一、环境准备与基础配置
1.1 硬件与软件要求
在Windows环境下部署RocketMQ双主双从集群,建议使用Windows Server 2016/2019或Windows 10专业版系统,需配置至少8GB内存(推荐16GB+)、4核CPU及50GB以上磁盘空间。需提前安装JDK 1.8+、Maven 3.6+及Git客户端,并配置JAVA_HOME、MAVEN_HOME环境变量。
1.2 RocketMQ版本选择
推荐使用Apache RocketMQ 4.9.4或5.0.0版本,这两个版本在Windows下的兼容性较好。通过Git克隆官方仓库:
git clone https://github.com/apache/rocketmq.gitcd rocketmqgit checkout 4.9.4
1.3 依赖服务部署
需部署ZooKeeper 3.6.3作为协调服务,建议使用Windows版ZooKeeper二进制包。配置zoo.cfg文件时,需设置:
tickTime=2000dataDir=D:\\zookeeper\\dataclientPort=2181server.1=localhost:2888:3888
二、集群架构设计
2.1 双主双从拓扑结构
设计两个Master节点(Master1、Master2)和两个Slave节点(Slave1、Slave2),采用异步复制模式。物理部署建议:
- Master1与Slave2同机部署
- Master2与Slave1同机部署
实现高可用与资源隔离平衡。
2.2 网络配置要点
需确保各节点间网络互通,防火墙开放9876(Broker)、10911(NameServer)、2181(ZooKeeper)端口。Windows防火墙规则配置示例:
New-NetFirewallRule -DisplayName "RocketMQ Broker" -Direction Inbound -Protocol TCP -LocalPort 9876 -Action Allow
2.3 存储路径规划
建议创建专用目录结构:
D:\rocketmq\├── namesrv\├── broker-a\ (Master1)├── broker-b\ (Master2)├── broker-a-s\ (Slave1)└── broker-b-s\ (Slave2)
三、核心配置文件修改
3.1 NameServer配置
修改conf/namesrv.properties:
listenPort=9876rocketmqHome=D:\\rocketmq
3.2 Master节点配置
以broker-a(Master1)为例,修改conf/brokers/broker-a.conf:
brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0namesrvAddr = localhost:9876listenPort = 10911storePathRootDir = D:\\rocketmq\\broker-astorePathCommitLog = D:\\rocketmq\\broker-a\\commitlogdeleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSH
3.3 Slave节点配置
Slave1(对应Master2)配置conf/brokers/broker-b-s.conf:
brokerClusterName = DefaultClusterbrokerName = broker-bbrokerId = 1 # Slave节点ID为1namesrvAddr = localhost:9876listenPort = 11011storePathRootDir = D:\\rocketmq\\broker-b-shaListenPort = 10921 # 主从同步端口
四、集群启动流程
4.1 启动顺序规范
-
启动ZooKeeper服务:
zkServer.cmd start
-
启动NameServer集群:
# 主节点nohup mqnamesrv.cmd > D:\rocketmq\namesrv\namesrv.log 2>&1 &
-
按顺序启动Broker节点:
```bashMaster1
mqbroker.cmd -n localhost:9876 -c D:\rocketmq\conf\brokers\broker-a.conf
Master2
mqbroker.cmd -n localhost:9876 -c D:\rocketmq\conf\brokers\broker-b.conf
Slave1
mqbroker.cmd -n localhost:9876 -c D:\rocketmq\conf\brokers\broker-b-s.conf
Slave2
mqbroker.cmd -n localhost:9876 -c D:\rocketmq\conf\brokers\broker-a-s.conf
## 4.2 启动日志验证检查各节点日志文件,重点关注:- NameServer日志中的注册信息- Broker日志中的主从同步状态- ZooKeeper节点创建情况# 五、集群验证与测试## 5.1 基础功能验证使用mqadmin命令检查集群状态:```bashmqadmin clusterList -n localhost:9876mqadmin brokerStatus -b broker-a -n localhost:9876
5.2 生产消费测试
创建测试Topic:
mqadmin updateTopic -n localhost:9876 -b broker-a -t TestTopic
发送测试消息:
// 生产者示例DefaultMQProducer producer = new DefaultMQProducer("test_group");producer.setNamesrvAddr("localhost:9876");producer.start();Message msg = new Message("TestTopic", "Hello RocketMQ".getBytes());SendResult result = producer.send(msg);
5.3 故障转移测试
模拟Master1宕机:
- 终止broker-a进程
- 验证Slave2是否自动接管
- 检查消息生产消费是否持续可用
六、运维管理建议
6.1 监控指标配置
建议监控以下关键指标:
- Broker磁盘使用率(>85%预警)
- 主从同步延迟(>5秒预警)
- 消息堆积量(>10万条预警)
6.2 日常维护操作
-
定期清理过期消息:
mqadmin cleanExpiredCQ -n localhost:9876 -b broker-a
-
滚动升级流程:
- 先升级Slave节点
- 验证同步正常后升级Master节点
- 每次升级间隔不少于10分钟
6.3 常见问题处理
- 端口冲突:使用
netstat -ano | findstr 9876检查占用进程 - 主从不同步:检查
haListenPort配置及网络连通性 - 内存溢出:修改
runbroker.cmd中的JVM参数:set "JAVA_OPT=%JAVA_OPT% -Xms4g -Xmx4g -Xmn2g"
七、性能优化建议
7.1 参数调优
-
消息存储优化:
mapedFileSizeCommitLog=1073741824 # 1GBmapedFileSizeConsumeQueue=300000 # 300KB
-
网络传输优化:
transferMsgByHeap=truefastFailIfNoBufferInHeap=true
7.2 硬件配置建议
- 使用SSD存储commitlog
- 为每个Broker分配独立磁盘
- 千兆以上网络环境
7.3 客户端优化
生产者端配置:
producer.setRetryTimesWhenSendFailed(3);producer.setSendMsgTimeout(3000);
消费者端配置:
consumer.setPullBatchSize(32);consumer.setConsumeThreadMin(20);consumer.setConsumeThreadMax(64);
通过以上步骤,可在Windows环境下成功部署RocketMQ双主双从集群。实际生产环境中,建议结合Prometheus+Grafana构建监控体系,并定期进行灾备演练。对于大规模部署,可考虑使用Kubernetes进行容器化改造,提升资源利用率和管理效率。