【发布时间】:2018-03-09 16:12:46
【问题描述】:
我在 1 个集群中配置了 3 个 Zookeeper 和 3 个 activemq 实例。
场景
- 3 个 activemq 实例,只有 1 个主实例,另外两个是从属实例。
- 所有3个activemq实例都在运行,即
sudo service activemq status返回running但检查日志,1个实例(activemq1)当前正在等待其他集群成员,1个实例(activemq2)停止,1个实例(activemq3)有错误.假设我们只需要两个实例来选举master,这个设置应该可以成功运行。 - 应该运行两个 activemq 实例
- zookeeper 实例运行良好。
问题
下面是各个 activemq 实例的堆栈跟踪。根据我的理解,集群至少需要两个正常运行的 activemq 实例才能提名一个主实例。鉴于所有 activemq 实例在使用 sudo service activemq status 发出时都会产生 running ,我假设每个 activemq 实例内部都存在问题 - 请参阅下面的堆栈跟踪。现在,我在日志中注意到,只有由于其他 activemq 实例在内部发生故障,activemq1 才无法正常运行。注意activemq2上的stacktrace,成功连接zookeeper后就卡住了,activemq3有问题,我还需要弄清楚。当我重新启动 activemq2 和 activemq3 时,该问题已得到解决。但是,我不能确定这不会再次发生,因此这个问题。
- activem1 显示下面的堆栈跟踪,我认为这是因为其他 2 个 activemq 实例正在运行但有错误
Session establishment complete on server 10.5.4.111/10.5.4.111:2181, sessionid = 0x1582db00708000c, negotiated timeout = 4000
Not enough cluster members connected to elect a master.
Not enough cluster members connected to elect a master.
Not enough cluster members connected to elect a master.
- activemq2 有下面的堆栈跟踪,这是我不明白的。连接zookeeper成功后就停止了,应该被属于cluster-activem1和activemq3的其他activemq实例检测到
Opening socket connection to server 10.5.4.111/10.5.4.111:2181
Socket connection established to 10.5.4.111/10.5.4.111:2181, initiating session
Session establishment complete on server 10.5.4.111/10.5.4.111:2181, sessionid = 0x1582db00708000d, negotiated timeout = 4000
-
activemq3 具有以下堆栈跟踪
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)[apache-jsp-8.0.9.M3.jar:2.3]
activemq的配置
这里之前的配置是 2s zkSessionTimeout - 这是默认值。我按照谷歌搜索将其设置为 4 秒,以最大限度地延长 activemq 实例向 Zookeeper 注册自身所需的时间。
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:61619"
zkAddress="zookeeper_addresses_here"
hostname="activemq_hostname_here"
zkSessionTimeout="4s"
/>
</persistenceAdapter>
zookeeper的配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/my/data/dir
clientPort=2181
server.1=activemq1_privateIP:2888:3888
server.2=activemq2_privateIP:2888:3888
server.3=activemq3_privateIP::2888:3888
autopurge.purgeInterval=24
autopurge.snapRetainCount=5
动物园管理员 3.4.9 版
ActiveMQ 版本 5.13.4
通过 Opswork 设置
【问题讨论】:
-
注意--- 如果这是一个全新的设置,您可能需要考虑在即将发布的 ActiveMQ 版本中不推荐使用 Replicated LevelDB。如果是这样,您的平台要求是什么?还有其他高可用性/复制设置可以满足您的需求。
-
感谢您的提醒。但是,基于他们的site,我们现在将坚持使用replicatedDB,因为我们将使用activeMQ。我已经看到有关这种设置的脆弱性的线程,但已经设法变得足够稳定以满足他们的要求 - 其中之一是增加 zkSessionTimeout 以使 activemq 有足够的时间连接到 Zookeeper。但我猜它对我不起作用。
-
对,我不是建议不要使用 ActiveMQ,而是建议您使用替代的主从配置。 NFSv4(共享)或 GFSv2(复制)更易于维护。