IPTables内部负载平衡

我正在尝试使用IPTables在相同的LAN内设置负载平衡(如果可能的话)。 我的想法是仿效我们的主要负载均衡器,但是在虚拟环境中,所有的服务器都是虚拟机。

有一个网关服务器,转发虚拟服务器和真实世界的stream量,我想使用该网关来平衡虚拟局域网内的一些stream量。

我的设置是:

  • GatewayServer – > 2个接口:eth0(公共),eth2(私有; 10.xy0 / 24)
  • ServerA – > 1接口:eth2(Private; 10.xy0 / 24)
  • ServerB – > 1接口:eth2(Private; 10.xy0 / 24)

在ServerB上有两个服务实例,监听端口60003和60004。

我的目标是能够打开从ServerA到GatewayServer的连接:60002,并以循环方式在端口60003和60004上平衡到ServerB。

我已经能够通过GateWay服务器从ServerA打开到ServerB的连接,但是连接总是通过端口60003到达ServerB,而从另一个60004不会到达ServerB。

我有这样的网关设置:

-A POSTROUTING -i eth2 -s 10.xy0/24 -p tcp --dport 60002 -j DNAT --to-destination 10.xy18-10.xy18:60003-60004 -A POSTROUTING -o eth2 -j MASQUERADE 

在ServerB上嗅探我看到来自GatewayServer的数据包,但始终按照前面所述的方式将端口60003挂接。

任何想法?

您将需要检查作为内核运行的内核版本是否晚于2.6.11-rc1已经删除了您要使用的function。 要find你的内核版本使用uname例如

 uname -r 2.6.32-71.el6.x86_64 

从iptables手册页

在最高2.6.10的内核中,您可以添加多个“到”目标选项。 对于这些内核,如果通过地址范围或多个到目的地选项来指定多个目标地址,则在这些地址之间会发生一个简单的循环(一个接一个循环)负载均衡。 后来的内核(> = 2.6.11-rc1)不能再把NAT转换成多个范围。