设为首页 收藏本站
查看: 842|回复: 0

[经验分享] CentOS多网卡绑定

[复制链接]

尚未签到

发表于 2018-4-21 15:03:10 | 显示全部楼层 |阅读模式
  防伪码:没有相当程度的孤独是不可能有内心的平和。
  1、概述
  随着技术的发展,四张及以上的千兆以太网卡(NIC)已经变成了服务器的标配。而在生产环境中,为了保证Linux服务器的网络稳定,会对服务器的多张网卡通过绑定一个IP的方式来实现网卡的热备冗余,增强网络的高可用和提升网络吞吐,避免业务中断。
  Linux的多网卡绑定功能使用的是内核中的"bonding"模块,主流Linux发行版本的内核均包含此模块。
  网卡绑定的模式(mode)共有七种(0~6) :bond0、bond1、bond2、bond3、bond4、bond5、bond6
  其中常用的有三种:
  mode=0round robin,平衡负载模式,有自动备援,且增加了带宽,能够大幅提升服务器的网络吞吐(I/O),但需要交换机支持。
  mode=1:active-backup,主-备份策略,一张网卡处于活动状态 ,另一张处于备份状态所有流量都在主链路上处理。而且该模式下的网卡MAC地址是外部可见得,从外面看来,bond的MAC地址是唯一的,从而避免交换机发生混乱。该模式只提供了容错能力,而没有负载功能。优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。
  mode=6:平衡负载模式,有自动备援,且增加了带宽,不需要交换机支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
  

  

  2、mode=1测试
  2.1 测试环境
  

主机名IP系统
test-01192.168.10.51CentOS release 6.9 (Final)
  本次测试通过VMware Workstation模拟。
  2.2 添加网卡
  在【虚拟机设置】中添加网络适配器。
DSC0000.png

DSC0001.png

  查看网卡是否添加:
[root@test-01 ~]#ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
inet addr:192.168.10.51  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe66:3036/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:91 errors:0 dropped:0 overruns:0 frame:0
TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9813 (9.5 KiB)  TX bytes:11278 (11.0 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:66:30:40
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5360 (5.2 KiB)  TX bytes:5360 (5.2 KiB)  

  2.3 创建bond
[root@test-01 ~]#cd /etc/sysconfig/network-scripts/
[root@test-01 network-scripts]#cp ifcfg-eth0 ifcfg-bond0
[root@test-01 network-scripts]#vim ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
ONBOOT=on
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.51
GATEWAY=192.168.10.2
NETMASK=255.255.255.0
DNS1=223.5.5.5  

  修改eth0:
[root@test-01 network-scripts]#vim ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=on
BOOTPROTO=none
MASTER=bond0
SLAVE=yes  

  修改eth1:
[root@test-01 network-scripts]#vim ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=on
BOOTPROTO=none
MASTER=bond0
SLAVE=yes  说明:MASTER=bond0和SLAVE=yes这两行参数主要是用于系统service network restart后自动启用。
  

  2.4 模块加载
[root@test-01 network-scripts]#echo "alias bond0 bonding" >>/etc/modprobe.d/dist.conf
[root@test-01 network-scripts]#echo "options bond0 mode=1 miimon=100" >>/etc/modprobe.d/dist.conf  说明:miimon是用来监测链路的,单位是ms(毫秒),即系统每100ms监测一次链路连接状态,若有一条链路不通就转入另一条链路。mode=1表示fault-tolerance (提供冗余功能)。
  

  2.5 重启网卡
[root@test-01 ~]#service network restart  

  bond0、eth0和eth1的MAC地址均变成之前eth0的MAC地址。
[root@test-01 network-scripts]#ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
inet addr:192.168.10.51  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe66:3036/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2508 (2.4 KiB)  TX bytes:3486 (3.4 KiB)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:971 errors:0 dropped:0 overruns:0 frame:0
TX packets:686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:91772 (89.6 KiB)  TX bytes:103730 (101.2 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:872 (872.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5360 (5.2 KiB)  TX bytes:5360 (5.2 KiB)  

  

  

  
  3、mode=1验证
  
  3.1 断开eth0测试
  宿主机ping192.168.10.51测试:
ping -t 192.168.10.51  

  默认连接的Slave是eth0,当断开eth0,观察到bond已经切换到eth1:
[root@test-01 ~]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:36
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:40
Slave queue ID: 0  

  在宿主机上观察到ping有一次丢包:
正在 Ping 192.168.10.51 具有 32 字节的数据:
来自 192.168.10.51 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64  

  3.2 断开eth1测试
  同理,重新连接eth0,断开eth1,bond切换到eth0:
[root@test-01 ~]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:36
Slave queue ID: 0
Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
Permanent HW addr: 00:0c:29:66:30:40
Slave queue ID: 0  

  切换的时候也丢了一次包:
来自 192.168.10.51 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64  

  4、mode=6测试
  4.1 配置
  配置方法和mode=1差不多。
  在mode=1的基础上修改/etc/sysconfig/network-scripts/ifcfg-bond0
echo "BONDING_OPTS='miimon=100 mode=6'" >>/etc/sysconfig/network-scripts/ifcfg-bond0  

  将mode=1改为mode=6:
sed -i 's#mode=1#mode=6#g' /etc/modprobe.d/dist.conf  

  重启网卡:
service network restart  

  4.2 验证
  再次查看网卡信息,eth1网卡的MAC地址都变成了原来的了:
[root@test-01 ~]#ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
inet addr:192.168.10.51  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe66:3036/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:3922 errors:0 dropped:0 overruns:0 frame:0
TX packets:3710 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:354254 (345.9 KiB)  TX bytes:288643 (281.8 KiB)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:3734 errors:0 dropped:0 overruns:0 frame:0
TX packets:3517 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:337074 (329.1 KiB)  TX bytes:270629 (264.2 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:66:30:40
UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:188 errors:0 dropped:0 overruns:0 frame:0
TX packets:193 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17180 (16.7 KiB)  TX bytes:18014 (17.5 KiB)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:83 errors:0 dropped:0 overruns:0 frame:0
TX packets:83 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5646 (5.5 KiB)  TX bytes:5646 (5.5 KiB)  

  Bonding Mode也变成了adaptive load balancing:
[root@test-01 ~]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:66:30:36
Slave queue ID: 0
Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:66:30:40
Slave queue ID: 0  mode=6的主备冗余功能和mode=1一样,就不重复验证了。

  mode=6负载均衡的工作机制是先占满eth0网卡的网络,再使用eth1的网络。
  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-450164-1-1.html 上篇帖子: centos 5,6 启动流程 下篇帖子: centos6.8 启动php
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表