Linux篇 | 多网卡绑定技术 bonding 和 网络组nmcli

多网卡绑定

“Bonding” 和 “nmcli的网络组Network Teaming”
二者实现的功能一样,但从某种角度,网络组要比Bonding的技术要好


网络接口配置:Bonding

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡被修改为相同的MAC地址。

一。Bonding工作模式

多网卡绑定有很多模式,如下:

Mode 0 (balance-rr):
轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力。如第一个数据包用网卡1转发,第二个数据包由网卡2转发。

Mode 1 (active-backup)
活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱,此时绑定的MAC地址只有一个外部端口上可见。即,平时只有一个网卡工作,当网卡坏掉会自动启动第二个网卡工作。

Mode 3 (broadcast)
广播策略:在所有的slave接口上传送所有的报文,提供容错能力。即在所有的网卡上传输一样的数据。

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

二。Bonding配置

1.bonding设备的配置文件

第一步:创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
推荐的配置的项有:
DEVICE=设备名称,如bond0
BOOTPROTO=协议,如none
BONDING_OPTS=指定工作模式,如 “miimon=100 mode=0”表示工作模式"Mode 0",且没100ms监测一次链路连接状态。

说明:
miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路

第二步:在要加入bonding的网卡,的配置文件里写入bonding设备的项。如下:
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0《======
SLAVE=yes 《======
USERCTL=no
写入上面两行后,网卡就不可以单独工作了,而是成为bonding的附属设备工作。可配置多个网卡配置文件加入bonding设备,且binding所属的网卡,显示的MAC地址都一样。

2.查看bond0的状态

查看bond0的状态:/proc/net/bonding/bond0
查看当前有几个bonding:/sys/class/net/bonding_masters

3.删除bond0

第一步:禁用bonding
ifconfig bond0 down
第二步:卸载bonding驱动模块
rmmod bonding
第三步:删除bonding的配置文件及所属网卡配置文件里bonding的项
第四步:重启网络服务

4.bonding的详细帮助

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

5.实验Mond 1 活动-备份(主备)策略

1.确保你有两个网卡,并且都在一个网络,如果用虚拟机做实验,要确保两个网卡是一个模式,如“仅主机模式”。

2.创建bonding设备的配置文件
    在/etc/sysconfig/network-scripts目录创建文件ifcfg-bond0
    DEVICE=bond0        \\设备名称  
    BOOTPROTO=none       \\协议
    IPADDR=192.168.36.6     \\bonding的ip地址
    PREFIX=24               \\子网掩码
    GATEWAY=192.168.36.254   \\网关
    DNS1=192.168.36.6       \\DNS  
    BONDING_OPTS=miimon=100 mode=1

3.在网卡的配置文件里加入bonding的项
    进入/etc/sysconfig/network-scripts/ifcfg-ethXX
    添加行:
        MASTER=bond0
        SLAVE=yes
    添加后,文件原来指定的静态或动态地址就会失效,生效的是bonding地址

4.确保NetworkManager服务关闭,并重启network服务
    Centos6: 
        service NetworkManager status  查看服务状态
        chkconfig NetworkManager off    \\关闭自动启动
        service NetworkManager stop     \\关闭服务
        service network restart         \\重启网络服务
    Centos7:
        systemctl status NetworkManager 查看服务状态
        systemctl stop NetworkManager   临时停止
        systemctl disable NetworkManager 下次开机即停止服务
        systemctl restart network       \\重启网络服务

5.查看bonding:“ifconfig”

6.检测
    停用一个网卡,在ping“bond0”地址,能ping通证明binding的"Mode 1"模式生效了。

7.查看binding设备中,“Mode 1”模式下,binding所属的哪个网卡在活动:
    方法一:使用watch -n1 netstat -i查看,不明显可以用另一台电脑ping“binding”的IP地址
    方法二:查看/proc/net/bonding/bond0文件

网络组Network Teaming

概念:

  • 网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
  • 网络组不同于旧版中bonding技术,提供更好的性能和扩展性
  • 网络组由内核驱动和teamd守护进程实现.
  • 多种方式(模式)runner:
    • broadcast(广播策略)《===》对应bonding模式mode 3
    • roundrobin(轮转策略)《===》对应bonding模式mode 0
    • activebackup(活动-备份(主备)策略)《===》对应bonding模式mode 1
    • loadbalance(限定流量)《===》对应bonding模式mode 2
    • lacp(implements the 802.3ad Link Aggregation Control Protocol:实现802.3ad链路聚合控制协议)《===》对应bonding模式mode 4
      参考链接:https://www.cnblogs.com/lqynkdcwy/p/9548668.html

注意事项:

  • 启动网络组接口不会自动启动网络组中的port接口
  • 启动网络组接口中的port接口总会自动启动网络组接口
  • 禁用网络组接口会自动禁用网络组中的port接口
  • 没有port接口的网络组接口可以启动静态IP连接
  • 启用DHCP连接时,没有port接口的网络组会等待port接口的加入

创建网络组

1.创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]

  • CNAME表示连接名
  • INAME表示接口名
  • JSON指定runner方式(模式),格式如下:
    • '{"runner": {"name": "METHOD"}}',其中METHOD 可以是:
    • broadcast
    • roundrobin
    • activebackup
    • loadbalance
    • lacp

2.创建port接口
`nmcli con add type team-slave con-name CNAME ifname INAME master TEAM

  • CNAME 连接名
  • INAME 网络接口名
  • TEAM 网络组接口名
  • 连接名若不指定,默认为team-slave-IFACE
  • nmcli dev dis INAME
  • nmcli con up CNAME
    • INAME 设备名 CNAME 网络组接口名或port接口

3.新网络组的配置文件
示例

网络组的配置文件/etc/sysconfig/network-scripts/ifcfg-team0

DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes

网络组所属网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-team0-eth1

DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes

4.创建网络组示例

示例1:
nmcli con add type team con-name myteam0 ifname team0 config
'{“runner”: {“name”: “loadbalance”}}' ipv4.addresses
192.168.1.100/24 ipv4.method manual
示例2:
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
示例3:
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
示例4:
nmcli con up myteam0
示例5:
nmcli con up team0-eth1
示例6:
nmcli con up team0-eth2
示例7:查看tean0状态
teamdctl team0 state
示例8:
nmcli dev dis eth1

5.实验:创建、删除网络组

1)创建网络组team0
查看网络连接
ip link
创建网络组team0,名字为myteam0,模式是主备模式
nmcli con add type team con-name myteam0 ifname team0 config'{"runner": {"name": "activebackup"}}'
给网络组添加IP地址
nmcli con mod team0 ipv4.addresses '192.168.0.100/24'
手工指定
nmcli con mod team0 ipv4.method manual
将物理网卡eth1加入网络组etam0
nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0
将物理网卡eth2加入网络组etam0
nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0
将网络组关联的两个物理网卡启用
nmcli con up team0-port1
nmcli con up team0-port2
查看网络组状态
teamdctl team0 state
nmcli connection

2.删除网络组team0
首先禁用网络组team0
nmcli connection down team0
查看网络组
teamdctl team0 state
nmcli connection show
删除网络组的网卡设备
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
在查看网络组
查看网络组
teamdctl team0 state
nmcli connection show

删除网络组

示例:删除网络组team0
首先禁用网络组team0
nmcli connection down team0
查看网络组
teamdctl team0 state
nmcli connection show
删除网络组的网卡设备
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
在查看网络组
查看网络组
teamdctl team0 state
nmcli connection show

`

转载于:https://blog.51cto.com/13465487/2374959

你可能感兴趣的:(Linux篇 | 多网卡绑定技术 bonding 和 网络组nmcli)