简介:本文详细介绍在Windows环境下搭建RocketMQ双主双从集群的完整流程,涵盖环境准备、节点配置、集群启动与验证等关键步骤,帮助开发者快速构建高可用消息队列系统。
在分布式系统中,消息队列是解耦微服务、实现异步通信的核心组件。RocketMQ作为Apache顶级项目,以其高性能、高可靠特性被广泛采用。双主双从架构通过主从复制提升可用性,主节点负责写操作,从节点同步数据并提供读服务,即使单主节点故障,系统仍能持续运行。本文将详细阐述如何在Windows环境下搭建RocketMQ双主双从集群,帮助开发者快速构建高可用消息队列系统。
Binary版本。D:\rocketmq,后续配置均基于此路径。编辑C:\Windows\System32\drivers\etc\hosts文件,添加集群节点IP与主机名映射:
192.168.1.100 master1192.168.1.101 master2192.168.1.102 slave1192.168.1.103 slave2
确保所有节点Hosts文件一致,避免DNS解析问题。
conf/broker.conf
brokerClusterName = DefaultClusterbrokerName = master1 # Master2节点改为master2brokerId = 0namesrvAddr = 192.168.1.100:9876;192.168.1.101:9876 # 两个主节点的NameServer地址listenPort = 10911 # Master1默认端口,Master2可改为10912storePathRootDir = D:\rocketmq\store\master1 # 区分不同节点存储路径storePathCommitLog = D:\rocketmq\store\master1\commitlogautoCreateTopicEnable = true
brokerId=0表示主节点,从节点需设为非零值(如1)。namesrvAddr需包含所有NameServer节点地址,实现高可用。conf/broker.conf
brokerClusterName = DefaultClusterbrokerName = master1 # 与对应主节点一致brokerId = 1 # 从节点标识namesrvAddr = 192.168.1.100:9876;192.168.1.101:9876listenPort = 10921 # Slave1默认端口,Slave2可改为10922storePathRootDir = D:\rocketmq\store\slave1storePathCommitLog = D:\rocketmq\store\slave1\commitlog
在主节点配置中添加brokerRole=SYNC_MASTER(同步复制)或ASYNC_MASTER(异步复制),从节点配置brokerRole=SLAVE。同步复制确保数据一致性,但性能略低。
在两个主节点上分别执行:
cd D:\rocketmq\binmqnamesrv.cmd
验证日志输出The Name Server boot success,表示启动成功。
mqbroker.cmd -n 192.168.1.100:9876;192.168.1.101:9876 -c D:\rocketmq\conf\broker.conf
mqbroker.cmd -n 192.168.1.100:9876;192.168.1.101:9876 -c D:\rocketmq\conf\broker.conf
通过mqadmin工具检查同步状态:
mqadmin clusterList -n 192.168.1.100:9876
输出应显示主从节点状态为RUNNING,且InSyncReplicaNum大于0。
// Producer示例DefaultMQProducer producer = new DefaultMQProducer("test_group");producer.setNamesrvAddr("192.168.1.100:9876;192.168.1.101:9876");producer.start();Message msg = new Message("TestTopic", "Hello RocketMQ".getBytes());producer.send(msg);producer.shutdown();
// Consumer示例DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test_group");consumer.setNamesrvAddr("192.168.1.100:9876;192.168.1.101:9876");consumer.subscribe("TestTopic", "*");consumer.registerMessageListener((msgs, context) -> {for (MessageExt msg : msgs) {System.out.println("Received: " + new String(msg.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;});consumer.start();
brokerRole=SYNC_MASTER且autoSwitchMaster=true)。Port already in use。listenPort为未占用端口,或终止占用进程。InSyncReplicaNum为0,消息无法同步。syncFlushTimeout参数,延长同步超时时间。namesrvAddr配置是否正确。runbroker.cmd中的JVM参数,如-Xms4g -Xmx4g。commitlog目录,使用mqadmin dumpLog工具恢复误删消息。通过本文步骤,开发者可在Windows环境下快速搭建RocketMQ双主双从集群,实现高可用消息队列服务。关键点包括:
broker.conf,区分主从节点角色。实际生产环境中,建议结合容器化部署(如Docker)简化运维,并定期进行压测与优化,确保系统稳定运行。