我对ActiveMQ Artemis集群迁移到可插拔仲裁配置有疑问。
目前我们在测试环境有一个集群,有6台服务器(3对主从,经典复制),我计划迁移到可插拔仲裁投票的集群。Artemis的版本是2.23.1。
我已经配置了另一个(pretest)集群,其中包含3个zoogger节点和2个主/备份Artemis节点。它看起来运行良好,但它是一个预测试环境,我们在其中执行一些实验,并且没有客户端和工作负载。所以我决定重新配置测试集群以使用可插拔的仲裁投票。
起初我认为我们可以将每个服务器的角色从主服务器更改为主服务器,从从服务器更改为备份。
以前的配置是-master:
<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>
组名用于从站确定它必须连接到哪个主站。
不幸的是,此设置在主部分和备份部分不起作用。我尝试配置它并得到经纪人. xml的xsd验证错误。
在留档中,有一些关于可插拔仲裁配置中不再需要的设置的单词:
有一些不再需要的经典复制配置:
投票复制失败仲裁投票等待投票重试投票重试等待实时服务器检查
但是没有任何关于的内容
新配置是-主要:
<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>
当我尝试使用这些设置启动集群时,我发现备份服务器尝试连接到任何主服务器,其中一些无法启动。我已经恢复到旧配置。
我读了留档,发现了一些可以帮助的设置:
另一种选择是删除不必要的4台ActiveMQ Artemis服务器并仅使用1对服务器。这将需要重新配置客户端,但即使连接字符串中仍有6台服务器,客户端仍将继续使用仅剩余的2台服务器。
在不改变集群拓扑(6台服务器)的情况下,是否有从经典复制迁移到可插拔仲裁投票的首选方法?
此测试环境中的任何更改(如果成功)都将在具有相同拓扑的UAT和生产集群上执行。因此,如果可能,我们希望平滑迁移。
我建议像以前一样使用group-name
。例如在主节点上:
<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>
<group-name>group-for-each-pair</group-name>
</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>
<group-name>group-for-each-pair</group-name>
<allow-failback>true</allow-failback>
</backup>
</replication>
</ha-policy>
也就是说,我强烈建议您使用单个HA代理对执行性能测试。单个代理每秒可能处理数百万条消息,因此您可能不需要由3个主代理组成的集群。此外,如果您的应用程序连接到集群节点,以便消息在一个节点上生成并从另一个节点消费,那么拥有一个集群实际上可能会降低整体消息吞吐量,因为消息必须采取额外的“跳数”。显然,这对于单个HA对来说不是问题。
最后,从6个代理减少到2个代理将显着降低配置和操作复杂性,并可能大幅降低基础设施成本。这是我们首先实现可插拔仲裁投票的主要原因之一。