RocketMQ集群安装配置完整指南
RocketMQ集群安装配置完整指南
一、RocketMQ简介
1.1 什么是RocketMQ?
RocketMQ是阿里巴巴开源的分布式消息中间件,具有高性能、高可靠、高吞吐的特点。
核心特性:
- 分布式架构
- 支持百万级QPS
- 消息持久化
- 顺序消息
- 事务消息
- 消息回溯
1.2 RocketMQ架构
┌─────────────────────────────────────────────────────────┐
│ Name Server Cluster │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │NameSrv1 │ │NameSrv2 │ │NameSrv3 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└────────────────────────┬────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Broker Master1 │ │ Broker Master2 │ │ Broker Master3 │
│ (Slave1) │ │ (Slave2) │ │ (Slave3) │
└─────────────┘ └─────────────┘ └─────────────┘
二、环境规划
2.1 集群规划
| 主机名 | IP地址 | 角色 | 内存 |
|---|---|---|---|
| mq-node01 | 10.0.0.11 | NameSrv + Broker Master | 8GB |
| mq-node02 | 10.0.0.12 | NameSrv + Broker Master | 8GB |
| mq-node03 | 10.0.0.13 | NameSrv + Broker Master | 8GB |
2.2 软件版本
- RocketMQ: 5.1.3
- Java: JDK 1.8+
- 系统: Ubuntu 22.04
三、安装RocketMQ
3.1 安装JDK
# 安装OpenJDK
sudo apt update
sudo apt install -y openjdk-8-jdk
# 验证安装
java -version
# 配置环境变量
cat >> ~/.bashrc << 'EOF'
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
EOF
source ~/.bashrc
3.2 下载RocketMQ
# 创建安装目录
sudo mkdir -p /opt/rocketmq
cd /opt/rocketmq
# 下载RocketMQ (阿里云镜像)
wget https://mirrors.aliyun.com/apache/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip
# 解压
unzip rocketmq-all-5.1.3-bin-release.zip
# 重命名
mv rocketmq-all-5.1.3-bin-release 5.1.3
3.3 配置环境变量
# 编辑环境变量
cat >> /etc/profile.d/rocketmq.sh << 'EOF'
export ROCKETMQ_HOME=/opt/rocketmq/5.1.3
export PATH=$ROCKETMQ_HOME/bin:$PATH
export NAMESRV_ADDR=10.0.0.11:9876;10.0.0.12:9876
EOF
source /etc/profile.d/rocketmq.sh
# 验证
echo $ROCKETMQ_HOME
四、配置NameServer集群
4.1 创建配置文件
# 创建NameServer配置
cat > /opt/rocketmq/5.1.3/conf/namesrv/namesrv.conf << 'EOF'
# NameServer配置文件
listenPort=9876
# 集群名称
clusterName=DefaultCluster
# 是否允许Broker注册
registerBrokerEnable=true
# 是否开启顺序消息配置
orderMessageEnable=false
# 心跳检测时间间隔
heartbeatInterval=1000
4.2 创建启动脚本
# 创建NameServer启动脚本
cat > /opt/rocketmq/5.1.3/bin/namesrv-start.sh << 'EOF'
#!/bin/bash
nohup sh /opt/rocketmq/5.1.3/bin/mqnamesrv \
-c /opt/rocketmq/5.1.3/conf/namesrv/namesrv.conf \
> /opt/rocketmq/5.1.3/logs/namesrv.log 2>&1 &
echo "NameServer started"
EOF
chmod +x /opt/rocketmq/5.1.3/bin/namesrv-start.sh
4.3 创建systemd服务
# 创建NameServer systemd服务
cat > /etc/systemd/system/rocketmq-namesrv.service << 'EOF'
[Unit]
Description=RocketMQ NameServer
After=network.target
[Service]
Type=forking
ExecStart=/opt/rocketmq/5.1.3/bin/namesrv-start.sh
Restart=on-failure
User=root
LimitNOFILE=655350
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable rocketmq-namesrv
sudo systemctl start rocketmq-namesrv
# 检查状态
sudo systemctl status rocketmq-namesrv
五、配置Broker集群
5.1 Broker配置文件
# 创建Broker主配置
cat > /opt/rocketmq/5.1.3/conf/broker.conf << 'EOF'
# Broker配置文件
# 集群名称
brokerClusterName=DefaultCluster
# Broker名称
brokerName=broker-a
# Broker ID (0为主,大于0为从)
brokerId=0
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间(小时)
fileReservedTime=48
# Broker角色
brokerRole=ASYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
# NameServer地址
namesrvAddr=10.0.0.11:9876;10.0.0.12:9876;10.0.0.13:9876
# Broker IP地址
brokerIP1=10.0.0.11
# 监听端口
listenPort=10911
# 是否允许自动创建Topic
autoCreateTopicEnable=true
# 是否允许自动创建SubscriptionGroup
autoCreateSubscriptionGroup=true
# 消息存储路径
storePathRootDir=/opt/rocketmq/store
storePathCommitLog=/opt/rocketmq/store/commitlog
# 队列数量
defaultTopicQueueNums=8
# 消息最大大小(字节)
maxMessageSize=4194304
# 消息体大小阈值
messageSizeLimit=4194304
# 事务消息半消息阈值
tranMaxMessageSize=4194304
EOF
5.2 创建启动脚本
# 创建Broker启动脚本
cat > /opt/rocketmq/5.1.3/bin/broker-start.sh << 'EOF'
#!/bin/bash
nohup sh /opt/rocketmq/5.1.3/bin/mqbroker \
-c /opt/rocketmq/5.1.3/conf/broker.conf \
> /opt/rocketmq/5.1.3/logs/broker.log 2>&1 &
echo "Broker started"
EOF
chmod +x /opt/rocketmq/5.1.3/bin/broker-start.sh
5.3 创建systemd服务
# 创建Broker systemd服务
cat > /etc/systemd/system/rocketmq-broker.service << 'EOF'
[Unit]
Description=RocketMQ Broker
After=network.target rocketmq-namesrv.service
[Service]
Type=forking
ExecStart=/opt/rocketmq/5.1.3/bin/broker-start.sh
Restart=on-failure
User=root
LimitNOFILE=655350
Environment="JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64"
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable rocketmq-broker
sudo systemctl start rocketmq-broker
# 检查状态
sudo systemctl status rocketmq-broker
六、配置双主双从同步集群
6.1 集群规划
| 主机 | IP | Master | Slave | BrokerName |
|---|---|---|---|---|
| mq-node01 | 10.0.0.11 | Master1 | - | broker-a |
| mq-node02 | 10.0.0.12 | Master2 | - | broker-b |
| mq-node03 | 10.0.0.13 | - | Slave1 | broker-a |
| mq-node04 | 10.0.0.14 | - | Slave2 | broker-b |
6.2 Master1配置(mq-node01)
cat > /opt/rocketmq/5.1.3/conf/broker-a-master.conf << 'EOF'
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.0.0.11:9876;10.0.0.12:9876;10.0.0.13:9876
brokerIP1=10.0.0.11
listenPort=10911
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
storePathRootDir=/opt/rocketmq/store
storePathCommitLog=/opt/rocketmq/store/commitlog
defaultTopicQueueNums=8
maxMessageSize=4194304
deleteWhen=04
fileReservedTime=48
EOF
6.3 Slave1配置(mq-node03)
cat > /opt/rocketmq/5.1.3/conf/broker-a-slave.conf << 'EOF'
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.0.0.11:9876;10.0.0.12:9876;10.0.0.13:9876
brokerIP1=10.0.0.13
listenPort=10911
autoCreateTopicEnable=true
storePathRootDir=/opt/rocketmq/store
storePathCommitLog=/opt/rocketmq/store/commitlog
EOF
七、验证集群
7.1 检查进程
# 在所有节点执行
jps
# 预期输出
# NameServer
# Broker
# 检查NameServer集群
sh mqadmin clusterList -n 10.0.0.11:9876
# 检查Broker状态
sh mqadmin brokerStatus -n 10.0.0.11:9876
7.2 测试消息
# 在任意节点执行
# 发送测试消息
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费测试消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
7.3 使用控制台
# 安装rocketmq-console
# 下载地址: https://github.com/apache/rocketmq-externals
# 配置控制台
cat > application.properties << 'EOF'
server.port=8080
rocketmq.config.namesrvAddr=10.0.0.11:9876;10.0.0.12:9876;10.0.0.13:9876
rocketmq.config.isVIPChannel=false
EOF
# 启动控制台
java -jar rocketmq-console-ng-2.0.0.jar
八、常见问题
8.1 NameServer无法启动
# 检查端口是否被占用
netstat -tlnp | grep 9876
# 检查日志
tail -f /opt/rocketmq/5.1.3/logs/namesrv.log
# 解决方案
# 1. 杀掉占用端口的进程
# 2. 修改端口配置
8.2 Broker无法连接NameServer
# 检查NameServer是否正常
telnet 10.0.0.11 9876
# 检查配置文件中的NameServer地址
cat /opt/rocketmq/5.1.3/conf/broker.conf | grep namesrvAddr
# 防火墙放行
sudo ufw allow 9876
sudo ufw allow 10911
8.3 消息积压
# 查看压情况
sh mqadmin consumerProgress消息积 -n 10.0.0.11:9876
# 解决方案
# 1. 增加消费者数量
# 2. 增加队列数量
# 3. 优化消费者逻辑
九、性能优化
9.1 JVM参数优化
# 编辑runbroker.sh
cat >> /opt/rocketmq/5.1.3/bin/runbroker.sh << 'EOF'
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC"
JAVA_OPT="${JAVA_OPT} -XX:G1HeapRegionSize=16m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC"
JAVA_OPT="${JAVA_OPT} -XX:MaxGCPauseMillis=150"
JAVA_OPT="${JAVA_OPT} -XX:+ParallelRefProcEnabled"
JAVA_OPT="${JAVA_OPT} -XX:+UseLargePagesInMetaspace"
EOF
9.2 Linux内核参数优化
# 编辑/etc/sysctl.conf
cat >> /etc/sysctl.conf << 'EOF'
# RocketMQ优化
fs.file-max = 655350
vm.overcommit_memory = 1
vm.max_map_count = 262144
EOF
# 应用配置
sysctl -p
十、总结
本文介绍了RocketMQ集群的完整安装配置,包括:
✅ 单Master集群安装 ✅ NameServer集群配置 ✅ Broker主从同步配置 ✅ 双主双从集群规划 ✅ 集群验证和测试 ✅ 常见问题排查 ✅ 性能优化配置
生产环境建议:
- 至少部署3个NameServer节点
- Broker采用主从同步模式
- 配置消息持久化
- 开启消息重试机制
- 部署RocketMQ Console控制台
- RocketMQ官方文档: https://rocketmq.apache.org/
- RocketMQ GitHub: https://github.com/apache/rocketmq
参考文档:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







