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

在我的实验环境中,我正在为在3个Centos 5.4服务器上运行的应用程序进行压力testing。应用程序的所有工作都接收来自networking的数据,并在任何其他两台服务器上进行两次复制。 启动时,应用程序会绑定保存在configuration文件中的一个IP地址。 为了find性能的瓶颈,我将网卡从一个增加到三个,并为每个服务器上的每个网卡分配不同的IP地址。

现在我有三个服务器和三个网卡,可以在每个服务器上运行3个应用程序实例。一个实例绑定一个IP。所有这九个IP地址在下面的同一个子网

  • server1:10.24.1.41 / 24,10.24.1.51 / 24,10.24.1.61/24
  • server2:10.24.1.42 / 24,10.24.1.52 / 24,10.24.1.62 / 24
  • server3:10.24.1.43 / 24,10.24.1.53 / 24,10.24.1.63 / 24

在运行压力testing工具时,我发现三个网卡的传入方向的stream量是平衡的,但是也不是stream出的方向。 90%的stream量通过eth0发送。

我通过下面的命令“sar -n DEV 10”列出了网卡的状态

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

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

有两种方法通常用来完成这个。 首先是结合:

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

您可以对此进行设置,以使三个接口在所有三个接口之间显示为一个循环出站stream量。 如果其中一个接口出现故障,则还具有提供一些冗余的额外好处。

另一种方法是找出你正在做什么服务,以及在iptables中使用DNAT来在多个IP /接口之间将请求循环到该服务,并将它们路由到每一个都使用唯一的接口。