ActiveMQ Artemis共享存储HA集群核心桥接配置疑问:主节点宕机后备节点未创建桥接消费者
首先可以明确:这不是共享磁盘HA与Core Bridge组合的预期行为。当主节点故障或关闭后,备节点应该自动提升为新主节点,并激活包括Core Bridge在内的所有服务组件。出现备节点不为桥接创建消费者的问题,大概率是故障转移未正常触发,或是HA/桥接配置存在细节疏漏,下面逐一拆解排查方向:
1. 先确认备节点是否成功提升为Master状态
共享磁盘HA模式下,备节点(Slave)仅在成功接管主节点角色、成为新的Master后,才会启动所有对外服务(包括Core Bridge、Acceptor等)。如果备节点始终处于Slave被动状态,自然不会为桥接创建消费者。
你可以通过以下方式验证:
- 查看备节点(比如
ba-artms4)的Artemis日志,搜索是否有类似Transitioning to live state或Live Server is now active的日志条目。如果没有这类日志,说明故障转移根本没触发。 - 检查备节点是否能正常访问共享存储目录(
/data/ba_artemis/msg-sms1/下的journal、bindings等):Artemis通过文件锁控制主备切换,主节点关闭后,备节点必须能获取磁盘锁才能完成角色提升。如果磁盘权限不足、存储挂载异常,都会导致锁获取失败,无法成为Master。
2. 核对备节点的HA Policy配置
你提到仅HA角色存在差异,那备节点的HA配置必须是Slave模式,否则无法触发自动故障转移。确保备节点的ha-policy配置如下:
<ha-policy> <shared-store> <slave> <failover-on-shutdown>true</failover-on-shutdown> </slave> </shared-store> </ha-policy>
如果备节点误配置为master,它永远不会主动接管主节点的角色,桥接自然不会激活。
3. 检查Core Bridge的HA配置细节
你的桥接已经配置了<ha>true</ha>和<failover-on-server-shutdown>true</failover-on-shutdown>,这部分是正确的,但要注意:
- 桥接的激活依赖本地节点处于Master状态:只有当备节点成为Master后,Artemis才会初始化并启动桥接,为指定队列创建消费者。
- 桥接使用的复合连接器(比如
sms1)包含主备节点地址,但Slave节点在未提升为Master前,其61616端口的Acceptor是未启动的——这是正常设计,因为Slave节点不处理外部流量。只有当备节点成为Master后,Acceptor才会监听端口,连接器才能正常建立连接。
4. 排查主节点关闭的方式
如果主节点是通过强制终止(比如kill -9)而非正常shutdown命令关闭,可能导致共享存储的文件锁未正常释放,备节点无法获取锁完成角色提升。这种情况下,你需要手动清理共享存储的锁文件(通常在journal目录下的activemq.lock),然后重启备节点。
总结
核心问题大概率是备节点未成功提升为Master,而非桥接的预期行为。按照上述步骤排查故障转移触发条件、HA配置、共享存储状态,应该能定位并解决问题。
内容的提问来源于stack exchange,提问作者TheCycoONE

