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服务器。每个子网都位于一个不同的子网( interconnected )中,子网通过路由器(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 - node4Openfire配置为使用MySQL数据库,它是成功地将从主node0复制到所有从节点(每个节点使用自己的本地数据库服务器,充当从节点)。
在Openfire >服务器管理器>集群中,我们可以看到所有集群节点。
Hazelcast的Openfire自定义设置
hazelcast.max.execution.seconds - 30
hazelcast.startup.delay.seconds - 3
hazelcast.startup.retry.count - 3
hazelcast.startup.retry.seconds - 10(%PROGRAMFILES%\Openfire\plugins\hazelcast\classes\hazelcast-cache-config.xml): node0的哈泽尔广播配置(除了接口部分外,其他节点类似)
<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 >Session中登录的用户被标记为脱机。即使在用户能够看到其他登录用户处于活动状态之后,消息也不会在5-10分钟后或在很少Openfire重新启动之后传递.
我们很感谢你的帮助。我们花了大约5天的时间试图陷害这个怪物,但我们没有任何想法.:(
提前谢谢!
UPD 1:安装了Openfire 3.8.2 alpha和Hazelcast 2.5.1构建20130427相同的问题
UPD 2:尝试在位于同一城市的两个服务器上启动集群,这两个服务器之间可能有1-2个跃点@1-5 5ms ping。一切都很完美!然后我们停止了其中一个服务器,并在另一个城市启动了一个服务器(3-4跳@ 80-100毫秒平),问题再次发生.缓慢的授权,在名册中注销用户,消息不能按时传递等等。
UPD 3:安装了没有JRE的Openfire 3.8.2和Java 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也许这能帮上忙..。实际上我们不知道该去哪找。
谢谢!
发布于 2013-05-22 06:37:59
Hazelcast文件 - 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配置属性
希望能帮上忙..。祝你好运!
https://stackoverflow.com/questions/16667489
复制相似问题