如何在Linux上配置故障转移和高可用性网络绑定

本教程解释如何在Linux服务器上配置网络绑定。在我开始之前,让我解释一下网络绑定是什么,它做什么。在一个...

本教程介绍如何在Linux服务器上配置网络绑定。 在我开始之前,让我解释什么是网络绑定和它做什么。 在Windows环境中,网络绑定称为网络组合,这是一种功能,可帮助任何服务器体系结构提供高可用性和故障切换,其中一个主要的以太网电缆出现故障或配置错误。

通常情况下,这是一个最佳实践,并且必须具有在为生产目的设置服务器时实施的功能。 事实上,此功能可以在Linux环境配置中完成,但您必须首先使用网络管理员确认,以确保链接到您的服务器的交换机支持网络绑定。 您可以在服务器环境中实现多种绑定模式。 以下是可用模式及其操作的列表:

  • 平衡
    此模式通过循环策略提供负载平衡和容错(故障转移)功能。 意味着它从第一个可用从站到最后一个顺序的顺序发送数据包。
  • 主动备份
    此模式通过主动备份策略提供容错功能。 这意味着一旦绑定以太网启动,只有1个以太网从站是活动的。 当且仅当当前活动从站无法启动时,其他以太网从站才会激活。 如果选择此模式,您将注意到绑定MAC地址在外部仅在一个网络适配器上可见。 这是为了避免混淆开关。
  • 余量
    此模式提供负载平衡和容错功能。 它基于所选择的发送哈希策略进行传输。 可以通过xmit_hash_policy选项来选择备用发送策略。
  • 广播
    此模式仅提供容错功能。 它在所有从站以太网接口上传输所有内容。
  • 802.3ad
    此模式提供负载平衡和容错功能。 它创建一个共享相同速度和双工设置的聚合组。 它使用活动聚合器中的所有从属以太网接口,它基于802.3ad规范。 要实现此模式,ethtool必须支持基本驱动程序来检索每个从站的速度和双工模式。 交换机还必须支持动态链路聚合。 通常,这需要网络工程师干预以进行详细配置。
  • Balance-TLB
    此模式提供负载平衡功能,名称TLB表示传输负载均衡 。 对于此模式,如果配置tlb_dynamic_lb = 1,则根据每个从站上的当前负载分配出站流量。 如果配置tlb_dynamic_lb = 0,则禁用负载平衡,但是负载只能使用hasd分发。 对于此模式,ethtool必须支持基本驱动程序来检索每个从站的速度。
  • 平衡ALB
    此模式提供负载平衡功能,名称TLB表示自适应负载均衡 。 与balance-tlb类似,除了发送和接收流量都被绑定。 通过ARP协商接收负载分担。 绑定驱动程序拦截本地系统发出的ARP回复,并使用绑定中的一个从站的唯一硬件地址覆盖源硬件地址。 对于这种模式,ethtool必须支持基本驱动程序来检索每个从站的速度。


初步说明

对于本教程,我使用32位版本的Oracle Linux 6.4。 请注意,即使配置是在Oracle Linux下完成的,这些步骤也适用于CentOS和Red Hat OS发行版以及64位系统。 我们的示例设置的最终结果将显示,即使我已禁用1个以太网网络,与我们的绑定服务器建立的连接将保持连接。 在本示例中,我将演示如何使用主动备份策略的模式1应用网络绑定。


2.安装阶段

对于此过程,无需安装。 服务器的默认Linux安装包括网络绑定配置的所有必需软件包。


配置阶段

在我们开始配置之前,首先我们需要确保我们在服务器中配置了至少2个以太网接口。 要检查这一点,请转到网络配置文件夹并列出可用的以太网接口。 以下步骤如下:

cd /etc/sysconfig/network-scripts/
ls *ifcfg*eth*

结果是:

ifcfg-eth0 ifcfg-eth1

请注意,我们目前在我们的服务器中设置了2个以太网接口,它们是ETH0和ETH1。

现在我们来配置一个名为BOND0的绑定界面。 该接口将是包含ETH0和ETH1的物理以太网接口的虚拟以太网接口。 以下步骤如下:

vi ifcfg-bond0

DEVICE=bond0
ONBOOT=yes
MASTER=yes
IPADDR=172.20.43.110
NETMASK=255.255.255.0
GATEWAY=172.20.43.1
BONDING_OPTS="mode=1 miimon=100"
TYPE=Ethernet

然后运行:

ls *ifcfg*bon*

结果是:

ifcfg-bond0


就这样。 请注意,在BOND0界面内,我已经包含了一个IP地址。 该IP地址将是连接到我们的服务器的唯一IP地址。 要进行此过程,我们需要修改与BOND0接口相关的物理以太网接口。 以下步骤如下:

vi ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

vi ifcfg-eth1

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

完成 我们修改了接口ETH0和ETH1。 请注意,我们已经删除了两个接口中的IP地址,并附加了MASTER = bond0。 这是需要验证两个接口将是专用于以太网BOND0接口的虚拟接口。

进行配置。 我们在/etc/modprobe.d下创建一个名为bond.conf的绑定配置文件。 以下步骤如下:

vi /etc/modprobe.d/bonding.conf

alias bond0 bonding
options bond0 mode=1 miimon=100

modprobe bonding

基于上述配置,我们使用接口BOND0配置了一个绑定模块。 我们还分配了绑定配置以使用主动备份策略的mode = 1。 选项miimon = 100表示​​我们的绑定服务器以毫秒为单位监视接口状态的监视频率。 根据上述描述,此模式将在服务器网络配置中提供容错功能。

随着所有的设置,让我们重新启动网络服务,以加载新的配置。 以下步骤如下:

service network restart

Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]


非常好,现在我们已经加载了我们上面所做的新配置。 您会注意到,名为BOND0的新界面将显示在网络列表中。 您还会注意到没有为接口ETH0和ETH1接口分配IP地址,只有BOND0接口显示IP。

ifconfig

bond0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:172.20.43.110 Bcast:172.20.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1723 errors:0 dropped:0 overruns:0 frame:0
TX packets:1110 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:147913 (144.4 KiB) TX bytes:108429 (105.8 KiB)

eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103486 (101.0 KiB) TX bytes:105439 (102.9 KiB)

eth1 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:632 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:44487 (43.4 KiB) TX bytes:3288 (3.2 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:208 errors:0 dropped:0 overruns:0 frame:0
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:18080 (17.6 KiB) TX bytes:18080 (17.6 KiB)


您还可以通过以下命令检查绑定状态:

cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0

请注意,我们已经使用主动备份模式成功地将接口ETH0和ETH1转换为绑定配置。 现在还说服务器正在使用接口ETH0,ETH1将作为备份接口。


4.测试阶段

现在,一切都按预期配置。 我们做一个简单的测试,以确保我们做的配置是正确的。 对于此测试,我们将登录到一个新的服务器(或Linux桌面),并开始ping我们的绑定服务器,以查看是否在测试期间发生间歇性连接。 以下步骤如下:

login as: root
root@172.20.43.120's password:
Last login: Wed Sep 14 12:50:15 2016 from 172.20.43.80

ping 172.20.43.110

PING 172.20.43.110 (172.20.43.110) 56(84) bytes of data.
64 bytes from 172.20.43.110: icmp_seq=1 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=2 ttl=64 time=0.424 ms
64 bytes from 172.20.43.110: icmp_seq=3 ttl=64 time=0.415 ms
64 bytes from 172.20.43.110: icmp_seq=4 ttl=64 time=0.427 ms
64 bytes from 172.20.43.110: icmp_seq=5 ttl=64 time=0.554 ms
64 bytes from 172.20.43.110: icmp_seq=6 ttl=64 time=0.443 ms
64 bytes from 172.20.43.110: icmp_seq=7 ttl=64 time=0.663 ms
64 bytes from 172.20.43.110: icmp_seq=8 ttl=64 time=0.961 ms
64 bytes from 172.20.43.110: icmp_seq=9 ttl=64 time=0.461 ms
64 bytes from 172.20.43.110: icmp_seq=10 ttl=64 time=0.544 ms
64 bytes from 172.20.43.110: icmp_seq=11 ttl=64 time=0.412 ms
64 bytes from 172.20.43.110: icmp_seq=12 ttl=64 time=0.464 ms
64 bytes from 172.20.43.110: icmp_seq=13 ttl=64 time=0.432 ms

在此期间,让我们回到我们的绑定服务器,并关闭以太网接口ETH0。 以下步骤如下:

ifconfig eth0

eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103486 (201.0 KiB) TX bytes:105439 (122.9 KiB)

ifdown eth0

现在我们已经关闭了ETH0网络接口的服务。 我们来看看粘接状态。 以下步骤如下:

cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0

您会注意到,现在ETH0接口不再存在于绑定状态。 在此期间,我们回到以前的测试服务器,并检查连接ping到我们的绑定服务器。

64 bytes from 172.20.43.110: icmp_seq=22 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=23 ttl=64 time=0.402 ms
64 bytes from 172.20.43.110: icmp_seq=24 ttl=64 time=0.437 ms
64 bytes from 172.20.43.110: icmp_seq=25 ttl=64 time=0.504 ms
64 bytes from 172.20.43.110: icmp_seq=26 ttl=64 time=0.401 ms
64 bytes from 172.20.43.110: icmp_seq=27 ttl=64 time=0.454 ms
64 bytes from 172.20.43.110: icmp_seq=28 ttl=64 time=0.432 ms
64 bytes from 172.20.43.110: icmp_seq=29 ttl=64 time=0.434 ms
64 bytes from 172.20.43.110: icmp_seq=30 ttl=64 time=0.411 ms
64 bytes from 172.20.43.110: icmp_seq=31 ttl=64 time=0.554 ms
64 bytes from 172.20.43.110: icmp_seq=32 ttl=64 time=0.452 ms
64 bytes from 172.20.43.110: icmp_seq=33 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=34 ttl=64 time=0.491 ms

好的,现在你会看到,即使我们关闭了ETH0界面,我们仍然可以ping通并访问我们的绑定服务器。 现在再做一个测试。 返回ETH0接口并关闭ETH1接口。

ifup eth0
cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0

当ETH0接口已经启动时,我们关闭ETH1接口。

ifdown eth1

cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0


现在让我们回到测试服务器,检查在我们的绑定服务器上进行的连续ping

64 bytes from 172.20.43.110: icmp_seq=84 ttl=64 time=0.437 ms
64 bytes from 172.20.43.110: icmp_seq=85 ttl=64 time=0.504 ms
64 bytes from 172.20.43.110: icmp_seq=86 ttl=64 time=0.401 ms
64 bytes from 172.20.43.110: icmp_seq=87 ttl=64 time=0.454 ms
64 bytes from 172.20.43.110: icmp_seq=88 ttl=64 time=0.432 ms
64 bytes from 172.20.43.110: icmp_seq=89 ttl=64 time=0.434 ms
64 bytes from 172.20.43.110: icmp_seq=90 ttl=64 time=0.411 ms
64 bytes from 172.20.43.110: icmp_seq=91 ttl=64 time=0.420 ms
64 bytes from 172.20.43.110: icmp_seq=92 ttl=64 time=0.487 ms
64 bytes from 172.20.43.110: icmp_seq=93 ttl=64 time=0.551 ms
64 bytes from 172.20.43.110: icmp_seq=94 ttl=64 time=0.523 ms
64 bytes from 172.20.43.110: icmp_seq=95 ttl=64 time=0.479 ms


竖起大拇指! 我们成功配置并证明了我们的绑定服务器管理以满足网络故障转移条件下的灾难恢复方案。