bonding
bonding 就是把多个物理网卡绑定成一个逻辑上的网卡,使用同一个 IP 工作,在增加带宽的同时也可以提供冗余性,一般使用较多的就是来提高冗余,分别和不同交换机相连,提高可靠性,但有时服务器带宽不够了也可以用作增加带宽。
bond 模式
网卡绑定 bond 共有七种模式 (0~6)
- mode=0 (balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合。
- mode=1 (active-backup) 表示主备模式,只有一块网卡是active, 另外一块是备份的standby, 这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
- mode=2 (broadcast) 表示所有包从所有 interface 发出, 这个不均衡, 只有冗余机制,和交换机的聚合强制不协商方式配合。
- mode=4 (802.3ad) 表示支持 802.3ad 协议, 和交换机的聚合 LACP 方式配合 (需要 xmit_hash_policy)。
- mode=5 (balance-tlb) 表示适配器传输负载均衡,是根据每个 slave 的负载情况选择 slave 进行发送, 接收时使用当前轮到的 slave。
- mode=6 (balance-alb) 在 5 的 tlb 基础上增加了 rlb。
交换机设置
- mode 1、5、6 不需要交换机设置
- mode 0、2、3 需要交换机设置静态聚合
- mode 4 需要交换机支持 802.3ad
内核
bonding 技术是 Linux 系统内核层面实现的,它是一个内核模块(驱动)。
编译配置
CONFIG_BONDING=m
查看 bonding 模块
modinfo bonding
查看 bond
cat /proc/net/bonding/bond0
实例
配置 bond
function configure_bond(){
# 创建并配置bond
# 参数1:网卡1名称
# 参数2:网卡2名称
# 参数3:IP地址/掩码元数
# 参数4:网关地址
# 参数5:bond名称
[ $# != 5 ] && echo "bond创建参数错误" && return
# 创建bond0
nmcli connection add con-name "$5" type bond ifname "$5" mode active-backup miimon 100
nmcli connection add type bond-slave ifname "$1" master "$5"
nmcli connection add type bond-slave ifname "$2" master "$5"
nmcli connection delete "$1"
nmcli connection delete "$2"
# 配置bond0
nmcli connection modify "$5" autoconnect yes
nmcli connection modify "$5" +ipv4.addresses "$3"
nmcli connection modify "$5" +ipv4.gateway "$4"
nmcli connection modify "$5" ipv4.method manual
nmcli connection reload
systemctl restart network
}
configure_bond0 ens33 ens36 "192.168.107.143/24" "192.168.107.2" bond0