多网卡绑定
"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
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
- `
来源: http://blog.51cto.com/13465487/2374959