浅谈bond及实验Linux下双网卡绑定
网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。 通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址,在应用部署中是一种常用的技术。
Bond的工作室模式有以下七种,常用的是0 1 6
- Mode=0(balance-rr) 轮询策略round-robin(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),本模式提供负载均衡和容错的能力,和交换机的聚合强制不协商的方式配合,从头到尾顺序的在每一个slave接口上面发送数据包
- Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱,此时绑定的MAC地址只有一个外部端口上可见
- Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)
- Mode=3(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。
5和6不需要交换机端的设置,网卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式,但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。
用文件来配置来实现Bonding
- 创建bonding设备的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BOND_OPTS="millon=100 mode=0"
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=bond0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
- 查看bond0的状态
cat /proc /net /bonding /bond0 - miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测
一次链路连接状态,如果有一条线路不通就转入另一条线路 - 删除bond0配置
ifconfig bond0 down
rmmod bonding
用nmcli实现bonding
- 添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
- 添加从属接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
- 要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
- 启动绑定
nmcli con up mybond0
实验多网卡绑定
实验网卡绑定,先做绑定然后再把绑定后的网卡配置成桥接:
- 准备一个虚拟机并增加一块网卡
- 配置bond0
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-bond0
vim ifcfg-bond0
DEVICE=bond0
NAME=bond0
ONBOOT=yes
BOOTPROTO=dhcp
BONDING_OPTS="miimon=100 mode=1"
- 配置eth0
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
NAME=eth0
MASTER=bond0
SLAVE=yes
ONBOOT=yes
- 配置eth1
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1
DEVICE=eth1
NAME=eth1
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
- 重启网络服务
service network restart #这里用的是centos6做的实验
- 查看bond0状态
cat /proc/net/bonding/bond0
- 删除bond0
ifconfig bond0 down
rmmod bonding