Windows下RocketMQ双主双从集群搭建指南

一、环境准备与工具选择

1.1 系统与依赖环境

Windows系统下搭建RocketMQ需满足以下条件:

  • 操作系统:Windows 10/11专业版或企业版(需支持Hyper-V虚拟化)
  • Java环境:JDK 1.8+(推荐OpenJDK或Oracle JDK)
  • 内存配置:至少8GB RAM(双主双从集群建议16GB+)
  • 磁盘空间:主节点需预留50GB+存储空间

1.2 工具链安装

  1. RocketMQ二进制包:从Apache官网下载最新稳定版(如5.1.3)
  2. Erlang环境(可选):若需监控工具,需安装Erlang/OTP
  3. 网络工具:Wireshark(用于抓包分析)、Putty(SSH连接)
  4. 虚拟化方案:推荐使用WSL2或VMware Workstation创建Linux子系统(因原生Windows对RocketMQ支持有限)

二、双主双从集群架构设计

2.1 集群拓扑结构

  1. ┌─────────────┐ ┌─────────────┐
  2. Master1 Master2
  3. (NameSrv1) (NameSrv2)
  4. └───────┬─────┘ └───────┬─────┘
  5. ┌───────────────────┐ ┌───────────────────┐
  6. Slave1 (Sync) Slave2 (Async)
  7. (Broker-A-S) (Broker-B-S)
  8. └───────────────────┘ └───────────────────┘
  • 同步复制:Master1与Slave1采用同步写(保证数据强一致性)
  • 异步复制:Master2与Slave2采用异步写(提升吞吐量)
  • NameServer:双节点部署避免单点故障

2.2 端口规划

组件 默认端口 集群专用端口
NameServer 9876 9877
Broker 10911 10912/10913
JMX 1099 1100/1101

三、详细配置步骤

3.1 单节点基础配置

  1. 解压安装包

    1. tar -xzf rocketmq-5.1.3.tar.gz -C C:\rocketmq
  2. 修改运行内存(conf/2m-noslave/):

    1. # broker.conf
    2. JVM_XMS="2g"
    3. JVM_XMX="4g"
  3. 配置NameServer(namesrv.properties):

    1. rocketmq.namesrv.addr=127.0.0.1:9876;127.0.0.1:9877

3.2 双主节点配置

Master1配置(broker-a.properties):

  1. brokerClusterName = DefaultCluster
  2. brokerName = broker-a
  3. brokerId = 0
  4. listenPort = 10911
  5. namesrvAddr=127.0.0.1:9876;127.0.0.1:9877
  6. defaultTopicQueueNums=8
  7. autoCreateTopicEnable=true
  8. autoCreateSubscriptionGroupEnable=true

Master2配置(broker-b.properties):

  1. brokerClusterName = DefaultCluster
  2. brokerName = broker-b
  3. brokerId = 0
  4. listenPort = 10912
  5. # 其他参数同Master1,需修改brokerName

3.3 双从节点配置

Slave1同步配置

  1. brokerId = 1
  2. brokerRole = SYNC_MASTER
  3. flushDiskType = SYNC_FLUSH
  4. haListenPort = 10921

Slave2异步配置

  1. brokerId = 1
  2. brokerRole = SLAVE
  3. flushDiskType = ASYNC_FLUSH
  4. haListenPort = 10922

四、Windows特有问题处理

4.1 端口冲突解决

  1. 使用netstat -ano | findstr 9876检查端口占用
  2. 修改注册表禁用HNS端口保留:
    1. Windows Registry Editor Version 5.00
    2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HNS\Parameters]
    3. "DisablePortReservation"=dword:00000001

4.2 文件权限设置

  1. 赋予RocketMQ目录完全控制权限:
    1. icacls "C:\rocketmq" /grant Everyone:(F) /T
  2. 关闭Windows Defender实时保护(测试环境)

4.3 性能优化

  1. 内存映射文件:修改conf/tools.conf
    1. rocketmq.broker.fileReservedTime=72
    2. rocketmq.broker.deleteWhen=04
    3. rocketmq.broker.diskSpaceWarningLevelRatio=0.9
  2. 网络优化
    • 禁用TCP自动调优:
      1. netsh int tcp set global chimney=disabled
      2. netsh int tcp set global rss=disabled
    • 调整MTU值(建议1400)

五、集群验证与测试

5.1 启动顺序

  1. 启动NameServer集群:
    1. start mqnamesrv.cmd -n 127.0.0.1:9876
    2. start mqnamesrv.cmd -n 127.0.0.1:9877
  2. 依次启动Master1/Master2:
    1. start mqbroker.cmd -n localhost:9876 -c conf\2m-noslave\broker-a.properties
    2. start mqbroker.cmd -n localhost:9877 -c conf\2m-noslave\broker-b.properties
  3. 启动Slave节点

5.2 集群状态检查

  1. 使用JConsole监控:
    1. jconsole 127.0.0.1:1099
  2. 命令行验证:
    1. sh mqadmin clusterList -n 127.0.0.1:9876
  3. 发送测试消息:
    1. // Producer示例
    2. DefaultMQProducer producer = new DefaultMQProducer("test_group");
    3. producer.setNamesrvAddr("127.0.0.1:9876;127.0.0.1:9877");
    4. producer.start();
    5. Message msg = new Message("TestTopic", "Hello RocketMQ".getBytes());
    6. SendResult result = producer.send(msg);

六、运维建议

  1. 备份策略

    • 每日凌晨3点执行mqadmin dumpLog
    • 配置7天滚动日志
  2. 监控告警

    • 监控/dev/shm目录使用率
    • 设置磁盘空间阈值告警(85%)
  3. 升级方案

    • 滚动升级时先停Slave节点
    • 使用mqadmin updateBrokerConfig在线修改配置

七、常见问题排查

  1. Broker无法注册

    • 检查namesrvAddr配置是否包含所有NameServer节点
    • 验证防火墙是否放行9876/9877端口
  2. 消息堆积

    • 检查ConsumeQueue文件是否完整
    • 调整consumeThreadMin参数(默认20)
  3. 主从同步延迟

    • 使用mqadmin brokerStatus查看同步进度
    • 调整haTransferBatchSize(默认32KB)

通过以上步骤,开发者可在Windows环境下构建出生产级可用的RocketMQ双主双从集群。实际部署时建议结合Prometheus+Grafana搭建可视化监控平台,并定期进行混沌工程演练验证集群容错能力。对于高并发场景,可考虑将Windows节点作为开发测试环境,生产环境迁移至Linux系统以获得更优性能。