IPTables 内部负载平衡

IPTables 内部负载平衡

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

有一个网关服务器,它转发往返于虚拟服务器和现实世界的流量,我想使用该网关来平衡该虚拟局域网内的某些流量。

我的设置是:

  • 网关服务器 -> 2 个接口:eth0(公共)、eth2(私有;10.xy0/24)
  • 服务器A -> 1 接口:eth2(私有;10.xy0/24)
  • ServerB -> 1 接口:eth2(私有;10.xy0/24)

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

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

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

我已经按以下方式设置网关:

-A POSTROUTING -i eth2 -s 10.x.y.0/24 -p tcp --dport 60002 -j DNAT --to-destination 10.x.y.18-10.x.y.18:60003-60004

-A POSTROUTING -o eth2 -j MASQUERADE

在 ServerB 上嗅探时,我看到数据包来自 GatewayServer,但总是到达端口 60003,如前所述。

任何想法?

答案1

您需要检查正在运行的内核版本,因为 2.6.11-rc1 之后的内核已删除了您想要使用的功能。要查找您的内核版本,请使用 uname 例如

uname -r 
2.6.32-71.el6.x86_64

来自 iptables 手册页

在 2.6.10 之前的内核中,您可以添加多个 --to-destination 选项。对于这些内核,如果您通过地址范围或多个 --to-destination 选项指定多个目标地址,则这些地址之间将进行简单的循环(循环中一个接一个)负载平衡。更高版本的内核(>= 2.6.11-rc1)不再具有将 NAT 到多个范围的能力。

相关内容