我正在尝试使用iptable进行负载平衡。 我正在使用virtualbox。 所有vm(debian)都在内部networking,IP是静态的。 我想将来自我的web服务器(apache2)的IP地址10.0.0.2:80请求路由到另一个networking上的服务器10.0.0.3:80和192.168.0.2:80 IP。
网关进行IP转发,它有两个接口eth0用于networking10.0.0.0和eth1用于networking192.168.0.0 。 负载均衡器具有IP 10.0.0.2 。 我尝试设置这个规则,但它不起作用:
iptables -t nat -A PREROUTING -p tcp –dport 80 -m状态–state新-m统计–mode n -every 3 –packet 0 -j DNAT – 到目的地10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp –dport 80 -m state –state NEW -m统计–mode nnth –every 3 –packet 1 -j DNAT – 到目的地192.168.0.2:80
我build议使用像haproxy,nginx代理或几乎任何其他实际的负载平衡方法不同的解决scheme。 iptables负载平衡通常用于多个上行链路上的传出数据包。
如果你必须平衡使用iptables,那么你需要使用不同的方法。 只要每隔几个包就会打乱你的所有请求。 我在类似的设置( 这里 )看到一个体面的教程,它将所有奇数源地址“转发”给一个主机,并将所有偶数地址转发给另一个主机。 真的,每个服务器都获得所有的连接请求和stream量,但只有一个build立连接。 服务器被赋予相同的MAC地址,然后被告知从偶数或奇数源丢弃syn数据包。 这样做的好处是不会增加一个单一的故障点,只要你编写一些事件来重新允许所有的stream量,如果另一个失败。