ActiveMQ Artemis复制集群主节点地址队列不复制是否正常?
ActiveMQ Artemis集群行为疑问解答
这是默认配置下的正常行为,具体原因如下:
1. 地址与队列的跨节点同步逻辑
ActiveMQ Artemis默认采用对等集群模式,每个集群节点独立维护自身的地址、队列元数据及消息数据。你的架构中,单台服务器的主备节点通过复制机制实现内部数据同步,但不同主备对属于集群中的独立节点,默认不会自动跨节点同步地址和队列。只有配置了集群地址(Cluster Address)或开启了自动创建资源的集群同步规则,才能让在一个主节点创建的地址/队列同步到其他主节点。
2. 无备份时主节点宕机的数据丢失问题
当所有备份节点失效后,每个主节点的数据仅存储在本地磁盘。若某主节点宕机且无法恢复,其本地存储的队列和消息必然丢失——因为默认集群模式下,不同主节点之间不会复制消息数据,只有主备对内部存在数据副本。
集群检查命令输出
[peter@amq ~]$ /opt/amq/bin/artemis check cluster Connection brokerURL = tcp://192.168.2.74:61616
| nodeID | 主节点地址 | 主节点本地时间 | 备份节点地址 |
|---|---|---|---|
| 99b3b24f-d272-11ef-a58d-525400a7703c | tcp://192.168.2.76:61616 | 2025-01-15 13:14:03 | tcp://192.168.2.77:61616 |
| 4700c8d1-d268-11ef-8284-525400a7703c | tcp://192.168.2.74:61616 | 2025-01-15 13:14:03 | tcp://192.168.2.75:61616 |
集群内时间偏差为37毫秒
--> 验证节点ID 99b3b24f-d272-11ef-a58d-525400a7703c的拓扑结构,主节点 = tcp://192.168.2.76:61616,备份节点 = tcp://192.168.2.77:61616 在主节点tcp://192.168.2.76:61616上验证 ok! --> 验证节点ID 4700c8d1-d268-11ef-8284-525400a7703c的拓扑结构,主节点 = tcp://192.168.2.74:61616,备份节点 = tcp://192.168.2.75:61616 在主节点tcp://192.168.2.74:61616上验证 ok!
可选优化方案
- 若需跨主节点同步地址/队列:配置
cluster-connection的address属性为#(匹配所有地址),确保地址使用multicast路由类型,同时开启自动创建资源的集群同步配置。 - 若需避免无备份时主节点宕机数据丢失:可采用共享存储集群(如JDBC、共享文件系统),或通过集群连接配置跨节点的消息镜像机制。
内容的提问来源于stack exchange,提问作者user3183111
相关产品推荐
相关产品推荐

