我正在尝试对 openfire XMPP 服务器的连接进行负载平衡 - 因此我在第二台服务器上托管了一个连接管理器,并尝试将 IP 表用作负载平衡器。这两个都在 Linux CentOS 6.3 上运行(是的,我知道它很旧 - 正在努力)。
我已经在我的第二台服务器(我们称之为服务器 A)上的端口 5300 上设置了连接管理器,并且 XMPP 服务器(服务器 B)已经运行了好几年并且继续这样做。
问题是让负载平衡实际进行任何平衡。
这些是我在服务器 A 上应用的预路由规则(IP 地址已编辑),以尝试在服务器 A 上的连接管理器(端口 5300)和服务器 B 上的 XMPP 服务(端口 5222)之间路由流量:
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 中的连接,似乎总是通过连接管理器建立连接。
关于为什么会发生这种情况或如何纠正它的任何想法?我知道那里有各种负载平衡软件解决方案,但更愿意在本地处理这个以最小化成本。
最佳答案
事实证明,从外观上看,xmpp 服务器从未接收到通过 IPTables 配置转发的数据包 - 但是 XMPP 服务器将所有默认规则设置为“接受”并且没有说明其他规则,并且正在接受来自连接管理器。 Spark 然后重新尝试连接;所以当然连接到连接管理器,因为这是一个“奇怪的”连接。
我将 [发布一个新问题/确定一个现有问题] 关于正在使用的 IPTables 规则以及为什么没有转发和/或接收数据包 - 比上述更简单的问题。
关于centos - 如何使用 IPTables 将流量重新路由到本地连接管理器或主 xmpp 服务 (Openfire),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54630537/