Openfire群集Hazelcast插件问题

时间:2013-05-21 10:13:42

标签: windows xmpp openfire hazelcast

Windows Server 2003R2 / 2008R2 / 2012 ,Openfire 3.8.1 ,Hazelcast 1.0.4 ,MySQL 5.5.30 < /强> -ndb-7.2.12-簇GPL-日志

我们在 Openfire群集中设置了 5台服务器。它们中的每一个都在不同的子网中,子网通过VPN路由器相互位于不同城市互联 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数据库 成功复制主节点0 到所有从属节点(每个节点使用它自己的本地数据库服务器,作为从服务器。)

Openfire Web Admin&gt;中服务器管理器&gt;群集我们能够查看所有群集节点

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&gt;中登录用户的时间会话标记为离线。即使用户能够看到其他登录用户处于活动状态,也不会在5-10分钟后或Openfire重启几次后传递或传递消息...

我们感谢任何帮助。我们花了大约5天试图建立这个怪物,并且没有任何想法...... :(

提前多多感谢!

UPD 1:已安装Openfire 3.8.2 alpha 与Hazelcast 2.5.1 Build 20130427 同样的问题

UPD 2:尝试在同一城市的两台服务器上启动群集,大概相隔1-2跳@ 1-5ms ping。一切都很完美!然后我们停止了其中一个服务器,并在另一个城市启动了一个(3-4个跃点@ 80-100毫秒ping)问题再次发生......缓慢的授权,在名册中注销用户,消息未按时交付等等< / p>

UPD 3 :安装了没有JRE的Openfire 3.8.2 ,以及 Java SDK 1.70_25

以下是JMX截图:

节点0:node0

节点1:node1

红线是第一个客户端连接(在Openfire重启后)。测试了两个用户。同样的事情......第一个用户(node0)立即连接,第二个用户(node1)连接花了5秒钟。 Rosters已经向双方显示离线用户20-30秒,然后在线用户开始出现在他们身上。 第一个用户向第二个用户发送消息。第二个用户等待20秒,然后收到第一条消息。回复和所有其他消息立即转移。

UPD 4:

通过JConsole“线程”标签挖掘diggin,我们发现了这些不同的状态:

例如 hz.openfire.cached.thread-3

WAITING on java.util.concurrent.SynchronousQueue$TransferStack@8a5325
Total blocked: 0  Total waited: 449

也许这会有所帮助......我们实际上不知道在哪里寻找。

谢谢!

1 个答案:

答案 0 :(得分: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

希望有帮助......祝你好运!