linux 使用bond实现双网卡绑定单个IP的示例代码
双网卡绑定单个IP地址为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断。
bond在Linux下叫bonding,IBM称为etherchanel,broadcom叫team,但是名字怎么变,效果都是将两块或更多的网卡当做一块网卡使用,在增加带宽的同时也可以提高冗余性。
实现双网卡绑定的方法有两种:bond和team
这里先记下bond的绑定方法
bond支持的模式
共支持bond[0-6]共七种模式,常用的就三种,如下:
- mode=0:默认,平衡负载模式,有自动备援,但需要配置交换机。
- mode=1:主备模式,其中一条线若断线,其他线路将会自动备援,不需要配置交换机。
- mode=6:平衡负载模式,有自动备援,不需要配置交换机。
至于其他的模式,解释如下:
mode=2:选择网卡的序号=(源MAC地址XOR目标MAC地址)%Slave网卡(从网卡)的数量,其他的传输策略可以通过xmit_hash_policy配置项指定
mode=3:使用广播策略,数据包会被广播至所有Slave网卡进行传送
mode=4:使用动态链接聚合策略,启动时会创建一个聚合组,所有Slave网卡共享同样的速率和双工设定
但是,mode4有两个必要条件
1.支持使用ethtool工具获取每个slave网卡的速率和双工设定;
2.需要交换机支持IEEE802.3ad动态链路聚合(Dynamiclinkaggregation)模式
mode=5:基于每个slave网卡的速率选择传输网卡。必要条件:支持使用ethtool工具获取每个slave网卡的速率。
配置bond
网卡 | bond1IP | bond模式 |
---|---|---|
ens33、ens36 | 192.168.171.111 | mode1 |
注:ip地址配置在bond1上,物理网卡无需配置IP地址
#加载bonding模块,并确认已经加载 [root@web01~]#modprobe--first-timebonding [root@web01~]#lsmod|grepbonding bonding1415660 #编辑bond1配置文件 [root@web01~]#cat>/etc/sysconfig/network-scripts/ifcfg-bond1<DEVICE=bond1 >TYPE=Bond >IPADDR=192.168.171.111 >NETMASK=255.255.255.0 >GATEWAY==192.168.171.2 >DNS1=114.114.114.114 >DNS2=8.8.8.8 >USERCTL=no >BOOTPROTO=none >ONBOOT=yes >EOF #修改ens33配置文件 [root@web01~]#cat>/etc/sysconfig/network-scripts/ifcfg-ens33< DEVICE=ens33 >TYPE=Ethernet >ONBOOT=yes >BOOTPROTO=none >DEFROUTE=yes >IPV4_FAILURE_FATAL=no >NMAE=ens33 >MASTER=bond1#需要和上面的ifcfg-bond0配置文件中的DEVICE的值一致 >SLAVE=yes >EOF #修改ens36配置文件 [root@web01~]#cat>/etc/sysconfig/network-scripts/ifcfg-ens33< DEVICE=ens36 >TYPE=Ethernet >ONBOOT=yes >BOOTPROTO=none >DEFROUTE=yes >IPV4_FAILURE_FATAL=no >NAME=ens36 >MASTER=bood1 >SLAVE=yes >EOF #配置bonding [root@web01~]#cat>>/etc/modules-load.d/bonding.conf< aliasbond1bonding >optionsbondingmode=1miimon=200#加载bonding模块,对外虚拟网络接口设备为bond1 >EOF #重启网卡使配置生效 [root@web01~]#systemctlrestartnetwork
注:如果配置完毕后重启网卡服务一直启动失败,而且日志里面也检查不出错误来,可以关闭NetworkManager后再次重启网卡试试
重启网络后查看各个网卡的信息
[root@web01~]#ipashowens33 2:ens33:mtu1500qdiscpfifo_fastmasterbond1stateUPgroupdefaultqlen1000 link/ether00:0c:29:9f:33:9fbrdff:ff:ff:ff:ff:ff [root@web01~]#ipashowens36 3:ens36: mtu1500qdiscpfifo_fastmasterbond1stateUPgroupdefaultqlen1000 link/ether00:0c:29:9f:33:9fbrdff:ff:ff:ff:ff:ff [root@web01~]#ipashowbond1 7:bond1: mtu1500qdiscnoqueuestateUPgroupdefaultqlen1000 link/ether00:0c:29:9f:33:9fbrdff:ff:ff:ff:ff:ff inet192.168.171.111/24brd192.168.171.255scopeglobalnoprefixroutebond1 valid_lftforeverpreferred_lftforever inet6fe80::20c:29ff:fe9f:339f/64scopelink valid_lftforeverpreferred_lftforever
查看bond1相关信息
#查看bond1的接口状态 [root@web01~]#cat/proc/net/bonding/bond1 EthernetChannelBondingDriver:v3.7.1(April27,2011) BondingMode:loadbalancing(round-robin)#绑定模式 MIIStatus:up#接口状态 MIIPollingInterval(ms):100 UpDelay(ms):0 DownDelay(ms):0 SlaveInterface:ens33#备用接口:ens33 MIIStatus:up#接口状态 Speed:1000Mbps#端口速率 Duplex:full LinkFailureCount:0 PermanentHWaddr:00:0c:29:9f:33:9f#接口永久MAC地址 SlavequeueID:0 SlaveInterface:ens36#备用接口:ens36 MIIStatus:up Speed:1000Mbps Duplex:full LinkFailureCount:0 PermanentHWaddr:00:0c:29:9f:33:a9 SlavequeueID:0
当做到这一步的时候,ens33或ens36中任意一块网卡down掉,都不会影响通信
注:如果你是使用vmwareworkstaction虚拟机进行测试,请不要直接执行命令ifdownens33或ifdownens36进行测试,这样因为虚拟机的原因测试不到效果,可以在网络适配器里将已连接√给取消掉
到此这篇关于linux使用bond实现双网卡绑定单个IP的示例代码的文章就介绍到这了,更多相关linux双网卡绑定单个IP内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。