Openfire Cluster Hazelcast 插件问题
Posted
技术标签:
【中文标题】Openfire Cluster Hazelcast 插件问题【英文标题】:Openfire Cluster Hazelcast Plugin Issues 【发布时间】:2013-05-21 10:13:41 【问题描述】:Windows Server 2003R2/2008R2/2012、Openfire 3.8.1、Hazelcast 1.0.4、mysql 5.5.30-ndb-7.2.12-cluster-gpl-log
我们在 Openfire 集群 中设置了 5 台服务器。他们每个人都在一个不同的子网,子网位于不同的城市并且通过***路由器(2-8 Mbps):
192.168.0.1 - node0
192.168.1.1 - node1
192.168.2.1 - node2
192.168.3.1 - node3
192.168.4.1 - node4
Openfire 配置为使用 MySQL 数据库,该数据库成功地复制从 master node0 到所有 slave 节点(每个节点都使用自己的本地数据库服务器,充当从属服务器)。
在 Openfire Web Admin > Server Manager > Clustering 中,我们能够查看所有集群节点。
Hazelcast 的 Openfire 自定义设置:
hazelcast.max.execution.seconds - 30
hazelcast.startup.delay.seconds - 3
hazelcast.startup.retry.count - 3
hazelcast.startup.retry.seconds - 10
节点 0 的 Hazelcast 配置(在其他节点上类似,除了接口部分)(%PROGRAMFILES%\Openfire\plugins\hazelcast\classes\hazelcast-cache-config.xml):
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<hostname>192.168.0.1:5701</hostname>
<hostname>192.168.1.1:5701</hostname>
<hostname>192.168.2.1:5701</hostname>
<hostname>192.168.3.1:5701</hostname>
<hostname>192.168.4.1:5701</hostname>
</tcp-ip>
<aws enabled="false" />
</join>
<interfaces enabled="true">
<interface>192.168.0.1</interface>
</interfaces>
这些是从默认设置更改的唯一设置。
问题是XMPP客户端授权时间过长,大约3-4分钟,授权后名册中的其他用户不活动 5-7分钟,在此期间Openfire Web Admin > Sessions 中的用户登录时间标记为 Offline。即使在用户能够看到其他已登录的用户处于活动状态后,消息也不会传递,或者在 5-10 分钟后或在几次 Openfire 重新启动后传递......
我们感谢任何帮助。我们花了大约 5 天的时间试图设置这个怪物,但没有任何想法...... :(
提前非常感谢!
UPD 1: 安装 Openfire 3.8.2 alpha 和 Hazelcast 2.5.1 Build 20130427 同样的问题
UPD 2: 尝试在同一城市的两台服务器上启动集群,在 1-5 毫秒 ping 时可能间隔 1-2 跳。一切正常!然后我们停止了其中一台服务器并在另一个城市启动了一台(3-4 跳 @ 80-100 毫秒 ping)问题再次发生......授权缓慢,名册中的用户注销,消息未按时传递等。
UPD 3: 安装了 Openfire 3.8.2,没有 JRE 和 Java SDK 1.70_25。
这里是 JMX 截图:
节点 0:
节点 1:
红线是第一个客户端连接(Openfire 重启后)。在两个用户上测试。同样的事情......第一个用户(node0)立即连接,第二个用户(node1)在连接上花费了5秒。 名册一直在显示双方的离线用户 20-30 秒,然后在线用户开始出现在其中。 第一个用户向第二个用户发送消息。第二个用户等待 20 秒,然后收到第一条消息。回复和所有其他消息都会立即传送。
UPD 4:
在通过 JConsole“线程”选项卡进行挖掘的过程中,我们发现了以下各种状态:
例如hz.openfire.cached.thread-3:
WAITING on java.util.concurrent.SynchronousQueue$TransferStack@8a5325
Total blocked: 0 Total waited: 449
也许这会有所帮助...我们实际上不知道该去哪里寻找。
谢谢!
【问题讨论】:
【参考方案1】:[更新] Hazelcast documentation 的注意事项 - 仅企业版支持 WAN 复制,Openfire 附带的社区版不支持。如果您想使用此功能,您必须从 Hazelcast 获取企业许可证密钥。
您可以选择设置多个基于 LAN 的 Openfire 集群,然后使用跨不同 XMPP 域的 S2S 集成来联合它们。这是为庞大的用户群扩展 Openfire 的首选方法。
[原帖如下]
我的猜测是,远程集群配置中较长的网络延迟可能会占用 Hazelcast 执行器线程(用于查询和事件)。其中一些事件和查询在 Openfire 集群中同步调用。尝试调整以下属性:
hazelcast.executor.query.thread.count (default: 8)
hazelcast.executor.event.thread.count (default: 16)
我将首先将这些值分别设置为 40/80 (5x),以查看整体应用程序响应能力是否有任何改进,并且根据您的预期负载可能会更高。可以在此处找到其他 Hazelcast 设置(包括其他线程池)以及将这些属性添加到配置 XML 中的说明:
Hazelcast configuration properties
希望对您有所帮助……祝您好运!
【讨论】:
刚刚尝试将这些行添加到不同城市的两台服务器上的 hazelcast-cache-config.xml(UPD 2 中描述的场景)。配置文件:node0和node4 请记住,您将希望对集群中的所有成员使用相同的配置。同步集群任务(由 Openfire 使用)需要在所有成员上执行,然后发起成员才能继续。 我们对所有成员使用相同的配置,唯一的区别是<interface>192.168.4.1</interface>
行。虽然不太了解同步集群任务,你是什么意思?我们应该采取什么措施来检查这些任务。顺便说一句,也许我们应该提供日志?
还有其他建议吗?
如果您获取最新版本 (3.8.2),您可以利用新的 JMX 功能来帮助排除故障。安装新版本后,通过管理控制台启用 JMX 连接器。然后,您可以使用 JDK 附带的 JConsole 工具连接到 Openfire(例如 192.168.0.1:1099)。请注意,默认情况下,您需要使用您的 Openfire 管理员用户凭据来验证 JConsole 连接。从那里您可以监控线程和内存使用情况,以及其他 JVM 内部,以便更好地了解正在发生的事情。以上是关于Openfire Cluster Hazelcast 插件问题的主要内容,如果未能解决你的问题,请参考以下文章
Openfire开发配置,Openfire源代码配置,OpenFire二次开发配置
Openfire/xmpp : IntelliJ IDEA导入openfire插件开发
最近研究openfire + sparkweb 但是, openfire安装后将red5.war插件放到plugins下,也把HTTP 绑定了,