我正在使用 Debian,并且想设置一个包含几台服务器的 HA 网络。
这是我的配置:
-----sw1--------------sw2------------ host1
/ / \ \ /
srv1 srv2 srv3 srv4 /
\ \ / / /
-----sw3--------------sw4------------
我有很多服务器(服务中心)连接到两个独立的网络。每个服务器有两个网卡。每个网卡都使用非托管交换机连接到其中一个网络(SW)。每台服务器都使用网卡作为具有一个固定 IP 地址的绑定接口。这主持人应该能够到达所有服务器。它也有一个绑定接口。
Linux 绑定设备可以实现上述场景吗?即使服务器的一个网卡处于非活动状态或其中一个网络已关闭,主机也应该能够联系所有服务器。交叉连接网络不是我想要的。
我对粘合模式做了一些实验主动备份和播送结合ARP监控。但没有成功...
通过上述模式,我能够创建一个工作网络,但一旦链接出现故障,网络就会崩溃。
你能帮助我吗?有其他选择可以实现我的目标吗?
提前致谢。
迪特尔
答案1
不,这不是联系的运作方式。
绑定使用类似的协议LACP聚合多个以太网链路之间相同的两个设备(2 个主机、2 个交换机或 1 个交换机和 1 个主机)并将它们视为单个链路。
srv1
因为、srv2
、srv3
、srv4
和上的两个网络接口host1
连接到不同的以太网接口,绑定/LACP 不适用。
一种选择是将 5 台主机中每台主机上的两个接口桥接在一起,并使主机参与生成树网络,以确保不存在第 2 层环路。不幸的是,由于您提到交换机是非托管的,因此生成树和第 2 层循环在您的场景中可能很危险,因为您无法在非托管交换机上配置生成树参数......或者它们可能根本不实现生成树。此外,STP 通过完全阻塞端口来解决网络中的环路,有效地导致主备配置,这不是您想要的。
另一种选择是使“顶部”和“底部”网络完全独立的IP网络。换句话说,在第 3 层而不是第 2 层实现负载平衡或冗余。
-----+----------------+---------------+--------------
| | |
|10.0.1.1/24 |10.0.1.2/24 |10.0.1.3/24
+------+ +------+ +------+
| srv1 | | srv2 | | srv3 | etc...
+------+ +------+ +------+
|10.0.2.1/24 |10.0.2.2/24 |10.0.2.3/24
| | |
-----+----------------+---------------+--------------
简易版:
对于每台服务器,在 DNS 中发布两个 IP 地址,并使用基于 DNS 的负载平衡来允许选择一个链接或另一个链接。
专业人士:
- 简单的
缺点:
- 单个 TCP 连接不会故障转移到其他链路
- 如果在尝试另一个链接之前其中一个链接已关闭,则可能会发生长时间超时
- 并非所有应用程序都了解如何重试与不同 IP 地址上的主机的连接
加强版:
在不在各个链路的任一子网上的每台主机上添加额外的环回地址。例如,10.0.3.x/32
:
- srv1:10.0.3.1/32
- 配置
ip addr add 10.0.3.1/32 dev lo
- 配置
- srv2:10.0.3.2/32
- srv3:10.0.3.3/32
- ETC...
让服务器之间使用 OSPF 等路由协议。使用斑驴以此目的。每台服务器将通过 OSPF 了解如何通过两条链路(或者如果只有一条链路可用,则仅通过一条链路)到达其他每台服务器的环回地址。仅发布 DNS 中的环回地址。
通过对内核源 IP 地址选择进行一些仔细的附加配置,您可以安排环回地址也用作源地址,这意味着各个 TCP 连接将无缝故障转移。