我正在尝试对openfire XMPP服务器的连接进行负载平衡-这样,我在第二台服务器上托管了一个连接管理器,并试图将IP表用作负载平衡器。两者都在Linux CentOS 6.3上运行(是的,我知道它已经很旧了-可以使用它)。
我已经在第二台服务器(我们称其为服务器A)的端口5300上设置了连接管理器,并且XMPP服务器(服务器B)已经愉快地运行了很多年,并且继续这样做。 / p>
问题是使负载平衡实际上可以进行任何平衡。
这些是我已在服务器A上应用的预路由规则(已编辑的IP地址),以尝试在服务器A上的连接管理器(端口5300)和服务器B上的XMPP服务(端口5222)之间路由通信: / p>
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 <server A IP> tcp dpt:5222
statistic mode nth every 2 to:<server B IP>:5222
DNAT tcp -- 0.0.0.0/0 <server A IP> tcp dpt:5222
to:<server B IP>:5300
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我通过Spark使用端口5222连接到服务器A,它成功登录到XMPP服务。
我希望与端口5222上的服务器A的所有偶数连接都已转发到:5222上的openfire服务器,并且每个奇数连接都将被引用到:5300上的连接管理器。
但是,在openfire中查看连接时,似乎总是通过连接管理器进行连接。
关于这种情况可能发生或如何纠正的任何想法?我知道那里有各种负载平衡软件解决方案,但希望本机处理以最小化成本。
答案 0 :(得分:0)
事实证明,从外观上看,xmpp服务器从未接收过通过IPTables配置转发的数据包-但XMPP服务器已将所有默认规则设置为“接受”,并且未声明其他任何规则,并且正在接受来自连接管理器的连接。然后,Spark重新尝试连接;因此当然会连接到连接管理器,因为这是一个“奇数”连接。
我将[发布一个新问题/标识一个存在的问题]关于正在使用的IPTables规则以及为什么不转发和/或接收数据包的问题-比上述问题更简单。