Linux bonding 和 网络组 Network Teaming的实现

1、bonding

1.1、bonding聚合链路

模式 说明
mod = 0 (balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。
mod = 1 (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。
mod = 2 (balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文
mod = 3 broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去
mod = 4 (802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚
合)在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护
mod = 5 (balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。
mod = 6 (balance-alb) Adaptive load balancing(适配器适应性负载均衡)该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的

mod=6和mod=0的区别

mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量

说明

常用的模式为 0,1,3,6
mode 1、5、6 不需要交换机设置
mode 0、2、3、4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel

1.2、bonding配置

详细帮助文档

/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt

前提:虚拟机中有两块及以上的网卡

方法:

1.创建bonding设备的配置文件

[root@www.zhanglongjie.cn ~]#nmcli connection                      #查看当前连接
NAME                UUID                                  TYPE      DEVICE 
eth0                5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
Wired connection 1  ba3434c4-7189-3fd6-9105-1b28769e2afc  ethernet  eth1
[root@www.zhanglongjie.cn ~]#vim /etc/sysconfig/network-scripts/ifcfg-bond0
[root@www.zhanglongjie.cn network-scripts]#cat ifcfg-bond0 
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.208
PREFIX=24
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
BONEING_OPTS="mode=1 miimon=100 fail_over_mac=1"
[root@www.zhanglongjie.cn ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0 
[root@www.zhanglongjie.cn network-scripts]#cat ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
MASTER=bond0					# 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
ONBOOT=yes
[root@www.zhanglongjie.cn ~]#cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
[root@www.zhanglongjie.cn ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth1
[root@www.zhanglongjie.cn network-scripts]#cat ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=static
MASTER=bond0					# 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
ONBOOT=yes
[root@www.zhanglongjie.cn ~]#nmcli connection reload 
[root@www.zhanglongjie.cn ~]#nmcli connection up bond0
[root@www.zhanglongjie.cn ~]#cat /proc/net/bonding/bond0 

2.nmcli实现 bonding

#添加bonding接口
[root@www.zhanglongjie.cn ~]#nmcli connection add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 10.0.0.208/24
Connection 'mybond0' (fca1f616-d6da-4183-bc43-ce0543e95eaf) successfully added.

#添加从属接口,如无为从属接口提供连接名,则该名称是接口名称加类型构成
[root@www.zhanglongjie.cn ~]#nmcli connection add type bond-slave ifname eth0 master bond0
Connection 'bond-slave-eth0' (eaf5cafd-0026-46df-9cce-5d494a63eb5e) successfully added.
[root@www.zhanglongjie.cn ~]#nmcli connection add type bond-slave ifname eth1 master bond0
Connection 'bond-slave-eth1' (a135bec5-29c0-4bad-92bc-0c3d8eedc463) successfully added.

#要启动绑定,则必须首先启动从属接口
[root@www.zhanglongjie.cn ~]#nmcli con up bond-slave-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@www.zhanglongjie.cn ~]#nmcli con up bond-slave-eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

#启动绑定
[root@www.zhanglongjie.cn ~]#nmcli con up mybond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@www.zhanglongjie.cn ~]#nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
mybond0             4287fb51-c99c-4653-b5b6-02d5605a7e34  bond      bond0  
bond-slave-eth0     056d3f09-fdb3-4d37-ab73-c795b2b7048c  ethernet  eth0   
bond-slave-eth1     f17c9caa-2851-432a-906a-55c542aa7572  ethernet  eth1 
[root@www.zhanglongjie.cn ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:f7:6a:a4 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:f7:6a:a4 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:f7:6a:a4 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.248/24 brd 10.0.0.255 scope global noprefixroute bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::f5ed:db28:5ab2:cfd5/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2、网络组 Network Teaming

2.1 Network Teaming

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现

多种方式 runner 网络组特点
broadcast 启动网络组接口不会自动启动网络组中的port接口
roundrobin 启动网络组接口中的port接口总会自动启动网络组接口
activebackup 禁用网络组接口会自动禁用网络组中的port接口
loadbalance 没有port接口的网络组接口可以启动静态IP连接
lacp (implements the 802.3ad Link Aggregation Control Protocol) 启用DHCP连接时,没有port接口的网络组会等待port接口的加入

2.2、实现

#创建网络组接口
[root@www.zhanglongjie.cn ~]#nmcli con add type team con-name myteam0 ifname team0 config '{"runner":{"name": "loadbalance"}}' ipv4.addresses 10.0.0.248/24 ipv4.method manual
Connection 'myteam0' (67384c54-86de-4f4d-8c25-748e079f9aea) successfully added.

#创建port接口
[root@www.zhanglongjie.cn ~]#nmcli connection add con-name team0-eth0 type team-slave ifname eth0 master team0 
Connection 'team0-eth0' (06a34689-ac38-4b5b-ba6d-e8a2f492b724) successfully added.
[root@www.zhanglongjie.cn ~]#nmcli connection add con-name team0-eth1 type team-slave ifname eth1 master team0
Connection 'team0-eth1' (2cd85406-1d05-4455-b88c-9983d4e7a498) successfully added.

#启动绑定
[root@www.zhanglongjie.cn ~]#nmcli con up myteam0

#启动从属接口
[root@www.zhanglongjie.cn ~]#nmcli connection up team0-eth0
[root@www.zhanglongjie.cn ~]#nmcli connection up team0-eth1
[root@www.zhanglongjie.cn ~]#nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  ba3434c4-7189-3fd6-9105-1b28769e2afc  ethernet  eth1   
myteam0             67384c54-86de-4f4d-8c25-748e079f9aea  team      team0  
team0-eth0          06a34689-ac38-4b5b-ba6d-e8a2f492b724  ethernet  eth0 
上一篇:企业实战(1) 服务器断电重启业务异常随笔


下一篇:虚拟机linux Device eth0 does not seem to be present