在具有多个 NIC 的 Centos 服务器上对传出方向进行负载平衡

在具有多个 NIC 的 Centos 服务器上对传出方向进行负载平衡

在我的实验室环境中,我正在对在 3 台 Centos 5.4 服务器上运行的应用程序进行压力测试。该应用程序的所有工作都是从网络接收数据并在其他两台服务器上进行两份复制。该应用程序在启动时将绑定保存在配置文件中的一个 IP 地址。为了找到性能瓶颈,我将网络接口卡从一张增加到三张,并为每台服务器上的每个 NIC 分配不同的 IP 地址。

现在我有三台带有三个网卡的服务器,每台服务器上可以运行三个应用程序实例。一个实例绑定一个 IP。所有九个 IP 地址都位于下面列出的同一子网中

  • 服务器1:10.24.1.41/24,10.24.1.51/24,10.24.1.61/24
  • 服务器2:10.24.1.42/24,10.24.1.52/24,10.24.1.62/24
  • 服务器3:10.24.1.43/24,10.24.1.53/24,10.24.1.63/24

当运行压力测试工具时,我发现三个网卡的入方向流量平衡,但出方向流量不平衡。90%的流量是通过 eth0 发送的。

我通过命令“sar -n DEV 10”列出了 NIC 统计图,如下所示

上午 11:25:39 IFACE rxpck/s txpck/s rxkB/s txkB/s
上午 11:25:49 低 669.90 669.90 4727.13 4727.13
上午11:25:49 eth0 12290.80 23736.20 9183.59 18736.31
上午11:25:49 eth1 6056.10 0.00 8522.95 0.00
上午11:25:49 eth2 6048.10 0.00 8514.29 0.00
上午11:25:49 eth3 0.00 0.00 0.00 0.00
上午 11:25:49 sit0 0.00 0.00 0.00 0.00

上午 11:25:49 IFACE rxpck/s txpck/s rxkB/s txkB/s
上午 11:25:59 低 1106.80 1106.80 8044.32 8044.32
上午11:25:59 eth0 22891.80 41899.20 16967.78 32745.58
上午11:25:59 eth1 10641.70 0.00 15173.43 0.00
上午11:25:59 eth2 10982.20 0.00 15663.58 0.00
上午11:25:59 eth3 0.00 0.00 0.00 0.00

答案1

通常有两种方法可以实现这一点。第一种是粘合:

http://www.linuxfoundation.org/collaborate/workgroups/networking/bonding

您可以进行设置,让三个接口显示为一个,并在所有三个接口之间循环分配出站流量。如果其中一个接口也发生故障,这还有提供一些冗余的额外好处。

另一种方法是找出您要将所有流量发往哪个服务,并使用 iptables 中的 DNAT 在多个 IP / 接口之间循环处理对该服务的请求,并对其进行路由,使得每个 IP / 接口都使用唯一的接口。

相关内容