Linux 链路聚合之bond和team

交换机可以配置链路聚合,提供线路的冗余的同时提高带宽吞吐。服务器也可以通过bond/team技术做网口硬件层面的冗余,防止单个网口应用的单点故障以及提高带吞吐量。bond模式最多可以添加两块网卡,team模式最多可以添加八块网卡。

一、bond模式

  • mode=0(balance-rr)(平衡轮循环策略)
    链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置静态链路聚合。
    特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。

  • mode=1(active-backup)(主-备份策略)
    这个是主备模式,只有一块网卡是active,另一块是备用的standby,所有流量都在active链路上处理。
    特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N,连接交换机的两个端口不需要做LACP(链路聚合)。

  • mode=2(balance-xor)(平衡策略)
    表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
    特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。

  • mode=3(broadcast)(广播策略)
    表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
    特点:在每个slave接口上传输每个数据包,此模式提供了容错能力。

  • mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合)
    表示支持802.3ad协议,和交换机的动态链路方式配合(需要xmit_hash_policy),标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。
    特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
    外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。
    必要条件:
    条件1:ethtool支持获取每个slave的速率和双工设定
    条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
    条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

  • mode=5(balance-tlb)(适配器传输负载均衡)
    是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
    特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
    必要条件:
    ethtool支持获取每个slave的速率

  • mode=6(balance-alb)(适配器适应性负载均衡)
    在5的tlb基础上增加了rlb(接收负载均衡receive load balance),不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。
    必要条件:
    条件1:ethtool支持获取每个slave的速率;
    条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管。
    其实mode=6与mode=0的区别:mode=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mode=6,会发现第一个口流量很高,第2个口只占了小部分流量。

二、bond配置

  • 网卡配置
# 有其他未使用的网卡配置需要移除或者 ONBOOT=NO,否则会影响bond网卡启动

# vim /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
TYPE=Ethernet
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes

# vim /etc/sysconfig/network-scripts/ifcfg-em2
DEVICE=em2
TYPE=Ethernet
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes

# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=static
NM_CONTROLLED=no
ONBOOT=yes
IPADDR=10.10.1.112
NETMASK=255.255.255.0
GATEWAY=10.10.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
  • 内核加载bond模块
# modprobe bonding
# lsmod |grep bond
bonding               149864  0

# 写进配置文件, miimon链路检测时间,毫秒
# cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
options bonding mode=0 miimon=100
  • 查看bond状态
# cat /proc/net/bonding/bond0
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: em1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 34:73:5a:9a:82:64
Slave queue ID: 0

Slave Interface: em2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 34:73:5a:9a:82:65
Slave queue ID: 0

三、bond桥接

  • 安装brctl命令
# 安装这个命令是为了支持网卡桥接,没有这个命令,不能桥接网卡

# yum install bridge-utils -y
  • 对 bond网卡配置桥接,em1和em2配置依旧如上
# vim /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
TYPE=bond
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0

# vim /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=10.10.1.112
NETMASK=255.255.255.0
GATEWAY=10.10.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8

四、team模式

  • team 模式介绍
    链路聚合与双网卡绑定几乎相同,可以实现多网卡绑定主从荣誉,负载均衡,提高网络访问流量。但链路聚合与双网卡绑定技术(bond)不同点就在于,双网卡绑定只能使用两个网卡绑定,而链路聚合最多可将8个网卡汇聚同时做绑定,此聚合模式称之为team,team模式是有CentOS 7 才出现的。
  • team 模式种类
    1、broadcast - 广播容错
    2、roundrobin - 平衡轮询
    3、activebackup - 主备模式
    4、loadbalance - 负载均衡

五、team配置

# 本次直接使用 nmcli 命令行方式管理
# mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/backup				#删除原有网卡配置文件 
# nmcli device status							# 查看设备状态
# systemctl restart network
# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"loadbalance"}}'		#创建链路聚合,模式为 loadbalance
# nmcli connection show							# 查看网卡状态
# nmcli connection add type team-slave con-name team0-1 ifname em1 master team0
# nmcli connection add type team-slave con-name team0-2 ifname em2 master team0
# nmcli connection up team0-1					# 开启team0-1
# nmcli connection up team0-2					# 开启team0-2
# 添加team0 网卡配置
# nmcli connection modify team0 ipv4.addresses 192.168.3.200/24 ipv4.gateway 192.168.3.254 ipv4.method manual
# nmcli connection up team0						# 开启team0
# ls /etc/sysconfig/network-scripts/            # 可以看到生成了三个有关team模式的配置文件,主接口和两个子接口配置
ifcfg-team0  ifcfg-team0-1  ifcfg-team0-2 ...
# nmcli device status
# teamdctl team0 state							# 查看team0链路状态,如果是主备模式可以查看是当前工作的网卡
# ifdown/ifup em1                               # 测试断开一个网卡,看丢包情况

六、bond和team差别

  • bond只能是双网卡绑定,team不需要手动加载相应内核模块和有更强的拓展性,最高可以绑定8块网卡。
  • 其他参数区别
FeatureBondingTeam
broadcast TX policyYesYes
round-robin TX policyYesYes
active-backup TX policyYesYes
LACP (802.3ad) supportYesYes
hash-based TX policyYesYes
TX load-balancing support (TLB)YesYes
VLAN supportYesYes
LACP hash port selectYesYes
Ethtool link monitoringYesYes
ARP link monitoringYesYes
ports up/down delaysYesYes
configurable via Network Manager (gui, tui, and cli)YesYes
multiple device stackingYesYes
highly customizable hash function setupNoYes
D-Bus interfaceNoYes
ØMQ interfaceNoYes
port priorities and stickiness (“primary” option enhancement)NoYes
separate per-port link monitoring setupNoYes
logic in user-spaceNoYes
modular designNoYes
NS/NA (IPV6) link monitoringNoYes
load-balancing for LACP supportNoYes
lockless TX/RX pathNoYes
user-space runtime controlLimitedFull
multiple link monitoring setupLimitedYes
extensibilityHardEasy
performance overheadLowVery Low
RX load-balancing support (ALB)YesPlanned
RX load-balancing support (ALB) in bridge or OVSNoPlanned

七、总结

       在网卡绑定选项上可以根据操作系统来选择,team模式是 CentOS7 加上的,如果是 CentOS7及以上系统可选用team模式绑定,支持更多拓展性以及更节省资源。另外如果是要做桥接网络的话,目前测试只能使用bond模式,team模式无法桥接。

 
 
Reference:

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Linux多网卡绑定与交换机链路聚合是一种将多个物理网卡绑定为一个逻辑接口的技术,在高负载环境下提高网络带宽和可靠性。以下是关于如何配置Linux多网卡绑定和交换机链路聚合的指导: 1. Linux多网卡绑定配置: a. 确保服务器上安装了所需的驱动程序和工具,如bonding模块和ifenslave b. 在/etc/modules文件中添加bonding模块:modprobe bonding c. 创建一个新的网络接口,如bond0:编辑/etc/network/interfaces文件,并添加以下行: auto bond0 iface bond0 inet static address 192.168.xxx.xxx netmask 255.255.255.0 gateway 192.168.xxx.xxx slaves eth0 eth1 bond-mode 4 bond-miimon 100 bond-downdelay 200 bond-updelay 200 bond-lacp-rate 1 bond-xmit-hash-policy layer2+3 bond-primary eth0 d. 保存文件并重启网络服务:service networking restart 2. 交换机链路聚合配置: a. 登录交换机的管理界面 b. 创建一个新的聚合组:选择一个可用的组号,并指定组的工作模式为链路聚合(LACP或者Static) c. 添加相应的物理接口到聚合组中:将服务器上用于多网卡绑定的物理接口添加到交换机的聚合组中 d. 配置组的其他参数:根据需求,可以配置链路聚合组的一些其他参数,如备用接口、链路优先级等 e. 保存并应用配置,确保交换机和服务器的配置一致 配置完成后,多个物理网卡将作为一个逻辑接口(bond0)运行,向外提供网络连接。交换机链路聚合将这些物理链路合并成一个逻辑链路,提供更高的带宽和可靠性。需要注意的是,配置过程中需要确保服务器和交换机的配置参数一致,否则可能会导致链路无法正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值