查看网络绑定(Network Bonding)信息

  1. 每个网络接口在 /sys/class/net 目录中包含一个目录。
    例如:
# ls /sys/class/net
bond0  bonding_masters  ens33  ens36  ens37  lo
  1. 在本例中,存在名为“bond0”的网络绑定。
    存在包含该绑定的配置信息的同名目录。
    例如:
# ls /sys/class/net/bond0
addr_assign_type  bonding    carrier_changes  dormant  gro_flush_timeout  iflink       lower_ens37   operstate     queues      subsystem     uevent
address           broadcast  dev_id           duplex   ifalias            link_mode    mtu           phys_port_id  speed       tx_queue_len
addr_len          carrier    dev_port         flags    ifindex            lower_ens33  netdev_group  power         statistics  type
  1. 在此目录中是一个绑定目录,其中包含有关 bond0 接口的信息。
    例如:
# ls /sys/class/net/bond0/bonding
active_slave       ad_aggregator   ad_select          arp_interval   fail_over_mac  mii_status    num_unsol_na       queue_id        updelay
ad_actor_key       ad_num_ports    ad_user_port_key   arp_ip_target  lacp_rate      min_links     packets_per_slave  resend_igmp     use_carrier
ad_actor_sys_prio  ad_partner_key  all_slaves_active  arp_validate   lp_interval    mode          primary            slaves          xmit_hash_policy
ad_actor_system    ad_partner_mac  arp_all_targets    downdelay      miimon         num_grat_arp  primary_reselect   tlb_dynamic_lb
  1. 查看包含每个从接口信息的目录。
    例如:
# ls /sys/class/net/bond0/lower_ens33
addr_assign_type  bonding_slave  carrier_changes  dev_port  flags              ifindex    master        operstate     queues      subsystem     uevent
address           broadcast      device           dormant   gro_flush_timeout  iflink     mtu           phys_port_id  speed       tx_queue_len  upper_bond0
addr_len          carrier        dev_id           duplex    ifalias            link_mode  netdev_group  power         statistics  type
  1. 以下是查看/sys/class/net 目录中文件的一些示例。
# cat /sys/class/net/bonding_masters
bond0
# cat /sys/class/net/bond0/operstate
up
# cat /sys/class/net/bond0/address
00:0c:29:54:f7:20
# cat /sys/class/net/bond0/bonding/active_slave
ens33
# cat /sys/class/net/bond0/bonding/mode
active-backup 1
# cat /sys/class/net/bond0/bonding/slaves
ens33 ens37
  1. 以下是查看/proc/net/bonding/bond0 文件的示例。
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens33
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:54:f7:20
Slave queue ID: 0
Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:54:f7:34
Slave queue ID: 0
CentOS/RHEL 7:如何使用 nmcli 创建网络绑定(Network Bonding / NIC teaming)
欢迎来到之路教程(on itroad-com)

使用 nmcli 创建网络绑定(Network Bonding)

1. 创建绑定接口

  1. 使用不带任何参数的 nmcli connection 命令查看现有的网络连接。
    我们可以将“connection”参数缩短为“con”。
    例子:
# nmcli connection 
NAME                UUID                                  TYPE            DEVICE 
ens33               59b61d18-90ed-4c3c-97e0-6c9e0528f25f  802-3-ethernet  ens33  
ens37               c09f18e1-793b-4d60-9107-98762cf593a7  802-3-ethernet  ens37
  1. 包括“添加类型绑定”参数,以及创建网络绑定连接的任何添加信息。
    下面的示例创建一个名为bond0 的绑定接口,将接口定义为bond0,将模式设置为“active-backup”,并为绑定接口分配一个IP 地址。
# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup ip4 192.168.219.150/24
Connection 'bond0' (1a75eef0-f2c9-417d-81a0-fabab4a1531c) successfully added.

nmcli con 命令显示新的绑定连接。

# nmcli connection 
NAME                UUID                                  TYPE            DEVICE 
bond0               1a75eef0-f2c9-417d-81a0-fabab4a1531c  bond            bond0  
ens33               59b61d18-90ed-4c3c-97e0-6c9e0528f25f  802-3-ethernet  ens33  
ens37               c09f18e1-793b-4d60-9107-98762cf593a7  802-3-ethernet  ens37
  1. 'nmcli con add type bond' 命令在 /etc/sysconfig/network-scripts 目录中创建一个接口配置文件。
    例如:
# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BONDING_OPTS=mode=active-backup
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=none
IPADDR=192.168.219.150
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=1a75eef0-f2c9-417d-81a0-fabab4a1531c
ONBOOT=yes
  1. ip addr 命令显示新的 bond0 接口:
# ip addr show bond0
5: bond0: [BROADCAST,MULTICAST,MASTER,UP] mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.219.150/24 brd 192.168.219.255 scope global bond0
       valid_lft forever preferred_lft forever

2. 创建从接口

  1. 对于要绑定的每个接口,使用“nmcli con add type bond-slave”命令。
    以下示例将 ens33 接口添加为绑定从站。
    该命令不包含 con-name 参数,因此会自动生成名称。
    我们可以使用 con-name 参数为从属接口设置名称。
# nmcli con add type bond-slave ifname ens33 master bond0
Connection 'bond-slave-ens33' (79c40960-6b2c-47ba-a417-988332affed1) successfully added.
  1. 下面的例子将ens37接口添加为“bond-slave”。
# nmcli con add type bond-slave ifname ens37 master bond0
Connection 'bond-slave-ens37' (46222a52-f2ae-4732-bf06-ef760aea0d7b) successfully added.
  1. nmcli con 命令显示新连接。
# nmcli connection 
NAME                UUID                                  TYPE            DEVICE 
bond0               1a75eef0-f2c9-417d-81a0-fabab4a1531c  bond            bond0  
ens33               59b61d18-90ed-4c3c-97e0-6c9e0528f25f  802-3-ethernet  ens33  
ens37               c09f18e1-793b-4d60-9107-98762cf593a7  802-3-ethernet  ens37  
bond-slave-ens33    79c40960-6b2c-47ba-a417-988332affed1  802-3-ethernet  --     
bond-slave-ens37    46222a52-f2ae-4732-bf06-ef760aea0d7b  802-3-ethernet  -
  1. nmcli con add type bond-slave 命令在 /etc/sysconfig/network-scripts 目录中创建接口配置文件。
    例如:
# cat /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens33
TYPE=Ethernet
NAME=bond-slave-ens33
UUID=79c40960-6b2c-47ba-a417-988332affed1
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# cat /etc/sysconfig/network-scripts/ifcfg-bond-slave-ens37
TYPE=Ethernet
NAME=bond-slave-ens37
UUID=46222a52-f2ae-4732-bf06-ef760aea0d7b
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes
  1. ip addr 命令包括用于 ens33 和 ens37 接口的“SLAVE”,还包括“master bond0”。

3. 激活绑定接口

  1. 我们可以使用 nmcli 命令来建立连接。
    先调出slave,然后调出bond接口。
    以下命令启动从接口:
# nmcli connection up bond-slave-ens33
# nmcli connection up bond-slave-ens37
  1. 以下命令会打开 bond0 接口:
# nmcli con up bond0
  1. ip addr 命令或者 ip link 命令现在显示处于 UP 状态的从属接口和绑定接口。
# ip link
2: ens33: [BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP] mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:54:f7:20 brd ff:ff:ff:ff:ff:ff
3: ens37: [BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP] mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:54:f7:20 brd ff:ff:ff:ff:ff:ff
4: bond0: [BROADCAST,MULTICAST,MASTER,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:54:f7:20 brd ff:ff:ff:ff:ff:ff

如何在绑定接口上禁用 IPv4 或者 IPv6

仅当 bond1 不使用 ipv4 或者 ipv6 地址时才需要这些步骤

# nmcli connection modify bond1 ipv4.method disabled

或者

# nmcli connection modify bond1 ipv6.method ignore

Bonding的模式

根据我们的需求,可以将绑定模式设置为以下 7 种模式 之一)

模式策略这个怎么运作容错负载均衡
0Round Robin数据包依次通过每个接口一个接一个地发送/接收。是的是的
1Active Backup一个 NIC 处于活动状态,而另一个 NIC 处于休眠状态。如果活动 NIC 出现故障,另一个 NIC 将变为活动状态。仅在 x86 环境中受支持。是的
2XOR [exclusive OR]在这种模式下,从 NIC 的 MAC 地址与传入请求的 MAC 匹配,一旦建立此连接,同一个 NIC 将用于发送/接收目标 MAC。是的是的
3Broadcast所有传输都在所有从机上发送是的
4Dynamic Link Aggregation聚合的 NIC 充当一个 NIC,这会导致更高的吞吐量,但也会在 NIC 发生故障的情况下提供故障转移。动态链路聚合需要支持 IEEE 802.3ad 的交换机。是的是的
5Transmit Load Balancing (TLB)根据每个从接口上的当前负载分配传出流量。当前从站接收传入流量。如果接收从站出现故障,另一个从站将接管故障从站的 MAC 地址。是的是的
6Adaptive Load Balancing (ALB)与动态链路聚合不同,自适应负载平衡不需要任何特定的交换机配置。自适应负载平衡仅在 x86 环境中受支持。接收报文通过ARP协商进行负载均衡。是的是的

为什么要使用接口绑定(Interface bonding)?

创建接口绑定(Interface bonding)的两个重要原因是:

  1. 提供增加的带宽
  2. 面对硬件故障时提供冗余

配置绑定的准备工作之一是拥有支持 EtherChannel 的网络交换机(几乎所有交换机都是如此)。

什么是接口绑定(Interface bonding)

绑定或者通道绑定(Bonding / Channel Bonding)是由 Linux 内核和红帽企业 Linux 支持的一项技术,它允许管理员组合两个或者多个网络接口以形成单个逻辑“绑定”接口以实现冗余或者增加吞吐量。
绑定接口的行为取决于模式;一般来说,模式提供热备或者负载均衡服务。
此外,它们可以提供链路完整性监控。

日期:2020-09-17 00:12:02 来源:oir作者:oir