我正在尝试使用iptables
进行负载平衡。我正在使用virtualbox
。所有虚拟机(debian
)都在内部网络中,IP是静态的。我想将来自我的Web服务器(apache2
)的IP地址10.0.0.2:80
的请求路由到另一个网络上的服务器10.0.0.3:80
和192.168.0.2:80
的IP地址。网络构造如下:
网关进行IP转发,它有两个接口:eth0
用于网络10.0.0.0
,eth1
用于网络192.168.0.0
。然后是一个IP地址为10.0.0.2
的负载均衡器。我试图制定这些规则,但它们没有成功:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.0.2:80
答案 0 :(得分:5)
首先,因为在您的情况下,传入连接应分布在2台服务器上,因此可以预期与建议的解决方案类似的解决方案,但使用--every 2
而不是--every 3
工作
但是,正如this answer所示,当nth
模式成为statistic
模块的一部分(过去它是一个单独的模块)时,数据包计数器已从全局一对多个人,每个规则一个。
因此,以下内容应该有效:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 192.168.0.2:80
当然在第二条规则中没有实际需要使用statistic
模块,但是我已将它放在那里供将来参考,以便阐明如果传入连接是如何构建规则的分布在3个或更多服务器上,而不仅仅是2个。