ActiveMQ Artemis集群从经典复制迁移至可插拔仲裁配置的技术问询
ActiveMQ Artemis经典复制集群迁移至可插拔仲裁配置的问题
我需要将测试环境中的ActiveMQ Artemis集群从经典复制主从模式迁移至可插拔仲裁投票模式,具体环境与问题如下:
环境信息
- Artemis版本:2.23.1
- 当前集群拓扑:6台服务器,分为3组独立的主从节点(经典复制模式)
- 目标:保留6台服务器的拓扑,迁移至基于ZooKeeper的可插拔仲裁配置
- 预测试验证:已在无负载环境搭建2节点主备+3节点ZK集群,运行正常
原有经典复制配置
每组主从节点的核心broker.xml配置如下:
主节点
<ha-policy> <replication> <master> <check-for-live-server>true</check-for-live-server> <vote-on-replication-failure>true</vote-on-replication-failure> <quorum-size>2</quorum-size> <group-name>group-for-each-pair</group-name> </master> </replication> </ha-policy>
从节点
<ha-policy> <replication> <slave> <allow-failback>true</allow-failback> <group-name>group-for-each-pair</group-name> </slave> </replication> </ha-policy>
注:group-name用于绑定主从节点配对,确保从节点只连接对应主节点
迁移尝试遇到的问题
最初计划仅将角色从master/slave改为primary/backup,但遇到以下问题:
group-name配置失效:在primary/backup的HA策略中添加group-name会触发XSD验证错误,官方文档仅提到经典复制中的vote-on-replication-failure等配置不再需要,但未提及group-name,疑似文档疏漏。- 备用节点乱连主用节点:使用以下
primary/backup配置启动集群时,备用节点会尝试连接任意主用节点,导致部分节点无法正常启动。
新的可插拔仲裁配置
主用节点
<ha-policy> <replication> <primary> <manager> <class-name>org.apache.activemq.artemis.quorum.zookeeper.CuratorDistributedPrimitiveManager</class-name> <properties> <property key="connect-string" value="zookeeper-amq1:2181,zookeeper-amq2:2181,zookeeper-amq3:2181"/> </properties> </manager> </primary> </replication> </ha-policy>
备用节点
<ha-policy> <replication> <backup> <manager> <class-name>org.apache.activemq.artemis.quorum.zookeeper.CuratorDistributedPrimitiveManager</class-name> <properties> <property key="connect-string" value="zookeeper-amq1:2181,zookeeper-amq2:2181,zookeeper-amq3:2181"/> </properties> </manager> <allow-failback>true</allow-failback> </backup> </replication> </ha-policy>
已调研的可能方案
coordination-id:官方文档说明该配置用于多主用集群场景,不适用于当前3组主备的拓扑- ZK的
namespace属性:考虑通过给每组主备节点配置独立的ZK命名空间,实现分组配对,但不确定是否会引发其他问题(比如单ZK管理多集群的兼容性) - 缩容拓扑:移除4台服务器,仅保留1组主备节点,但需要调整客户端配置,且不符合保留原有拓扑的需求
核心需求
是否存在无需改变6台服务器拓扑的平滑迁移方案?该方案需适配UAT及生产环境的相同拓扑,尽可能减少改动风险。
内容的提问来源于stack exchange,提问作者Aleksandr Milovidov
相关产品推荐
相关产品推荐

