【发布时间】:2023-03-28 23:30:02
【问题描述】:
我正在尝试对 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 中的连接,似乎总是通过连接管理器建立连接。
对于为什么会发生这种情况或如何纠正它有什么想法吗?我知道那里有各种负载平衡软件解决方案,但我更愿意在本地处理这个以最大限度地降低成本。
【问题讨论】: