RocketMQ 生产环境服务器的配置需要综合考虑性能、高可用性、数据安全和可维护性。以下是推荐的生产级 RocketMQ 服务器配置方案,适用于中大型系统部署。
一、硬件配置建议(单台服务器)
组件 | CPU | 内存 | 磁盘 | 网络 |
---|---|---|---|---|
NameServer / Broker | 8核以上 | 16GB ~ 32GB(Broker 可更高) | SSD,500GB+(根据消息量调整) | 千兆或万兆网卡 |
说明:
- NameServer:轻量级路由发现服务,资源消耗低,可以与 Broker 部署在同一机器(测试环境),但生产环境建议独立部署。
- Broker:核心组件,负责消息存储和转发,对 I/O 和内存要求较高,建议使用 SSD 提升写入性能。
- 消息量大时,Broker 建议 32GB 或更高内存,尤其是开启堆外内存(Direct Memory)用于 PageCache。
二、集群架构设计(高可用)
1. 推荐部署模式:主从同步 + 多副本
- NameServer 集群:至少 2~3 个节点,无状态,可部署在不同机器上。
- Broker 集群:
- 至少 2 主 2 从(即 2 Master + 2 Slave),组成双主双从架构。
- 使用 Dledger 模式(推荐)实现自动主从切换,避免单点故障。
- Dledger 是基于 Raft 协议的高可用方案,无需手动干预故障转移。
# broker配置示例(dledger模式)
brokerClusterName = DefaultCluster
brokerName=broker-a
brokerId=0
enableDLegerCommitLog=true
dLegerGroup=broker-a
dLegerPeers=n1:20911;n2:20911;n3:20911
dLegerSelfId=n1
sendMessageThreadPoolNums=16
flushDiskType=ASYNC_FLUSH
注:
brokerId=0
表示主节点,brokerId>0
为从节点(仅在普通主从模式下使用);Dledger 模式下由协议自动选举主节点。
三、关键配置参数优化
1. Broker 配置文件 (broker.conf
)
# 基础配置
brokerClusterName = RocketMQ-Cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
defaultTopicQueueNums=8
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
# 存储路径(建议挂载高性能SSD)
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
storePathIndex=/data/rocketmq/store/index
# 刷盘方式:生产环境可选择 ASYNC_FLUSH 提升性能
flushDiskType=ASYNC_FLUSH
# 主从复制方式(Dledger 下无效)
# 如果不用 Dledger,可设置 SYNC_MASTER + SLAVE_SYNC
brokerRole=SYNC_MASTER
# 最大消息大小(默认4MB,可调大)
maxMessageSize=10485760
# 线程池优化
sendMessageThreadPoolNums=32
pullMessageThreadPoolNums=32
2. JVM 参数优化(runbroker.sh
)
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m"
JAVA_OPT="${JAVA_OPT} -XX:MaxGCPauseMillis=50"
JAVA_OPT="${JAVA_OPT} -XX:+UnlockDiagnosticVMOptions"
JAVA_OPT="${JAVA_OPT} -XX:+ScavengeALot" # 减少 Full GC
JAVA_OPT="${JAVA_OPT} -XX:+DisableExplicitGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/data/rocketmq/logs/gc.log"
建议堆内存不超过物理内存的 70%,留足空间给 OS PageCache。
四、操作系统层面优化
-
文件句柄数
ulimit -n 100000
修改
/etc/security/limits.conf
* soft nofile 100000 * hard nofile 100000
-
内核参数优化
# /etc/sysctl.conf vm.swappiness=1 vm.overcommit_memory=1 net.core.somaxconn=65535 fs.file-max=1000000
-
磁盘调度策略(SSD)
echo deadline > /sys/block/sda/queue/scheduler
-
关闭透明大页(THP)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
五、部署拓扑示例(生产环境)
节点 | IP | 角色 |
---|---|---|
node1 | 192.168.1.10 | NameServer + Broker-a (Dledger) |
node2 | 192.168.1.11 | NameServer + Broker-b (Dledger) |
node3 | 192.168.1.12 | NameServer + Broker-c (Dledger) |
三节点 Dledger 集群,实现自动选主,高可用。
六、监控与运维
-
监控工具:
- 自带
mqadmin
命令行工具 - Prometheus + Grafana(通过 RocketMQ Exporter)
- ELK 收集日志
- 自带
-
常用命令:
sh mqadmin clusterList -n localhost:9876 sh mqadmin brokerStatus -n localhost:9876 -b 192.168.1.10:10911
-
备份策略:
- 定期归档 CommitLog(结合
fileReservedTime
) - 使用脚本定期压缩并备份到对象存储(如 S3、OSS)
- 定期归档 CommitLog(结合
七、安全建议
- 开启 ACL 认证(用户名密码访问控制)
- 网络隔离,Broker 不暴露公网
- 使用 TLS 加密通信(可选)
- 限制 Topic 创建权限
总结
项目 | 推荐配置 |
---|---|
部署模式 | Dledger 高可用集群(3节点) |
硬件 | 8C16G+,SSD 存储 |
刷盘方式 | ASYNC_FLUSH(兼顾性能与可靠性) |
复制方式 | Dledger(Raft 协议) |
JVM 堆 | 8G~16G,G1GC |
监控 | Prometheus + Grafana |
安全 | ACL + 网络隔离 |
如需具体部署脚本或自动化部署方案(如 Ansible、Kubernetes Helm Chart),也可进一步提供。