一: bonding 的概念
所谓 bonding 就是将多块网卡绑定同一 IP 地址对外提供服务, 可以实现网卡的带宽扩容, 高可用或者负载均衡.
二: bonding 的优势
网络负载均衡
提高带宽网络传输效率
网络冗余与高可用
三: bonding 的策略(7 种策略)
1 balance-rr (mode=0)轮询 (Round-robin) 策略: 从头到尾顺序的在每一个 slave 接口上面发送数据包. 本模式提供负载均衡和容错的能力.
2 active-backup(mode=1)主备模式 , 在绑定中, 只有一个 slave 被激活. 当且仅当活动的 slave 接口失败时才会激活其他 slave. 为了避免交换
机发生混乱此时绑定的 Mac 地址只有一个外部端口上可见. 在 bongding 的 2.6.2 及其以后的版本中, 主备模式下发生一次故障迁移时, bonding 将在新
激活的 slave 上会送一个或者多个 gratuitous ARP.bonding 的主 salve 接口上以及配置在接口上的所有 VLAN 接口都会发送 gratuitous ARP, 只要
这些接口上配置了至少一个 IP 地址. VLAN 接口上发送的的 gratuitous ARP 将会附上适当的 VLAN id. 本模式提供容错能力, primary option,
documented below 会影响本模式的行为.
3 balance-xor(mode=2)XOR 策略: 基于所选择的传送 hash 策略. 本模式提供负载均衡和容错的能力.
4 broadcast(mode=3)广播策略: 在所有的 slave 接口上传送所有的报文. 本模式提供容错能力.
5 802.3ad(mode=4)IEEE 802.3ad 动态链路聚合. 创建共享相同的速率和双工模式的聚合组. 能根据 802.3ad 规范利用所有的 slave 来建立聚合链路.
Salve 的出站选择取决于传输的 hash 策略, 默认策略是简单的 XOR 策略, 而 hash 策略则可以通 xmit_hash_policy 选项加以改变. 需要注意的是: 不是所有
的传输策略都与 802.3ad 兼容, 尤其是 802.3ad 标准的 43.2.4 章节中关于 packet mis-ordering 要求的地方. 不同个体的实现往往出现很大的不兼容.
先决条件:
1. 每个 slave 的基本驱动支持 Ehtool 获取速率和双工状态.
2. 交换机支持 IEEE 802.3ad 动态链路聚合. 大多数的交换机都需要使用某种配置方式来启用 802.3ad 模式.
6 balance-tlb(mode=5)
自适应传输负载均衡: 信道绑定不需要特殊的交换机支持. 出口流量的分布取决于当前每个 slave 的负载(计算相对速度). 进口流量从当前的 slave 的接收.
如果接收 salve 出错, 其他的 slave 接管失败的 slave 的 Mac 地址继续接收.
先决条件:
每个 slave 的基本驱动支持 Ehtool 获取速率状态.
7 balance-alb(mode=6)
自适应负载均衡: 包括 balance-tlb(模式 5)以及用于 IPV4 流量的接收负载均衡, 并且不需要特殊的交换机支持. 接收负载均衡通过 ARP 协商实现. bonding 的
驱动拦截本机发出的 ARP Replies(ARP 回应报文), 并且用 bond 的某一个 slave 的硬件地址改写 ARP 报文的源地址, 使得本服务器对不同的设备使用不同的硬件
地址. 本服务器建立的连接的接收流量也是负载均衡的. 当本机发送 ARP Request 时, bonding 驱动通过 ARP 报文复制并保存节点的 IP 信息. 当从其他节点接收到
ARP Reply,bonding 驱动获取节点的硬件地址并且会回应一个包含绑定好的 slave 的硬件地址的 ARP Reply 给发送的节点. 用 ARP 协商的负载均衡的有一个问题
是每次用 bond 的硬件地址广播 ARP 报文, 那么其他节点发送的数据全部集中在一个 slave 上, 处理 ARP 更新给其他所有节点的时候, 每个节点会重新学习硬件地址,
导致流量重新分配. 当新加入一个 slave 或者一个非激活的 slave 重新激活的时候也会导致接收流量重新分配. 接收流量负载是串行 (轮转) 的分配在 bond 的一组速
率最高的 slave 上.
当一个链路重连或者一个新的 slave 加入的时候, bond 会重新初始化 ARP Replies 给所有的客户端. updelay 参数的值必须等于或者大于交换机的 forwarding delay,
以免 ARP Replies 被交换机阻塞.
先决条件:
1. 每个 slave 的基本驱动支持 Ehtool 获取速率状态.
2. 基本驱动支持当设备打开时重新设置硬件地址. 也要求每一个 slave 具有唯一的硬件地址. 如果 curr_active_slave 失败, 它的硬件地址被新选上的
curr_active_slave 硬件地址来替换
四 bonding 的相关配置(生产环境 mode=6 的方式)
1 首先进入网卡文件配置目录 cd /etc/sysconfig/network-scripts/
2 备份网卡配置文件 cp ifcfg-eth0 ifcfg 副本 - eth0
3 拷贝 cp ifcfg-eth0 ifcfg-bond0
4 配置 bonding
- #cat <<EOF>>ifcfg-bond0
- DEVICE=bond0
- BONDING_OPTS='miimon=100 mode=6'
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=192.168.1.61
- NETMASK=255.255.255.0
- GATEWAY=192.168.1.1
- USERCTL=no
- EOF
配置网卡 eth0,eth1
- #cat <<EOF>>ifcfg-eth0
- DEVICE=eth0
- HWADDR=D0:50:99:C1:0E:83
- TYPE=Ethernet
- UUID=5eefe89c-0cbf-426c-987e-1b6ee1c54024
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=none
- MASTER=bond0
- SLAVE=yes
- USERCTL=no
- EOF
- #cat <<EOF>>ifcfg-eth01
- DEVICE=eth1
- HWADDR=D0:50:99:C1:0E:81
- TYPE=Ethernet
- UUID=a71f51f5-c05b-4bcd-a618-bb09813be60e
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=none
- MASTER=bond0
- SLAVE=yes
- USERCTL=no
- EOF
五: 加载 bonding 模块配置文件声明
- # 加载配置
- # cat /etc/modprobe.d/bond.conf
- alias bond0 bonding
- # 修改 bond 模式的两种方式
- 1.cat /etc/modprobe.d/dist.conf
- options bond0 miimon=100 mode=6
2 还有一种修改方式在 ifcfg-bond0 网卡配置文件追加
- BONDING_OPTS="mode=1 miimon=100"
- 1 #modprobe bonding 加载 bonding 配置
service network restart 重启网卡
2 查看 bond0 是否生效
- #cat /proc.NET/bonding/bond0
- Bonding Mode: adaptive load balancing
- 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: d0:50:99:c1:0e:83
- Slave queue ID: 0
- Slave Interface: eth1
- MII Status: up
- Speed: 1000 Mbps
- Duplex: full
- Link Failure Count: 0
- Permanent HW addr: d0:50:99:c1:0e:81
- Slave queue ID: 0
3 开机自启脚本配置声明
- cat /etc/rc.local
- #!/bin/bash
- touch /var/lock/subsys/local
- ifenslave bond1 eth1 eth2
注意: 在重启 network 服务时需关闭 NetworkManager
- #systemctl stop NetworkManager.service# 停止 NetworkManager 服务
- #systemctl disable NetworkManager.service# 禁止开机启动 NetworkManager 服务
- #systemctlisdisable NetworkManager.service# 查看 NetworkManager 服务是否关闭
原因:
在 CentOS 系统上, 目前有 NetworkManager 和 network 两种网络管理工具. 如果两种都配置
会引起冲突, 而且 NetworkManager 在网络断开的时候, 会清理路由, 如果一些自定义的路
由, 没有加入到 NetworkManager 的配置文件中, 路由就被清理掉, 网络连接后需要自定义添
加上去.
五 测试:
1 在测试高可用时:
拔掉一根网线看是否还能 ping 通 bond0
2 在测试流量带宽时
如果两张网卡为千兆带宽时, 我们应同时准备两台同等带宽的服务器同时测试
准备:
软件: iperf3 参考博客: https://www.cnblogs.com/yingsong/p/5682080.html
命令 服务端: iperf -s -u -p 12345 -i 1
客户端: iperf -c server-ip -p server-port -i 1 -t 10 -b(两台客户端服务器同时执行)
结果: 如果服务端的带宽大于 1000M 且拔掉一根网线还能成功, 证明 bonding 配置成功
- Bonding Mode: adaptive load balancingPrimary Slave: NoneCurrently Active Slave: eth1MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0
- Slave Interface: eth0MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: d0:50:99:c1:0e:83Slave queue ID: 0
来源: http://www.bubuko.com/infodetail-3092921.html