Rocketmq两主一从集群搭建

Rocketmq两主一从集群搭建

设备准备

服务器 IP NameServer BROKER角色 Dashboard
服务器1 83.3.24.39 83.3.24.39:9876 broker-a(master) 83.3.24.39:18080
服务器2 83.3.24.40 83.3.24.40:9876 broker-b(master)
服务器3 83.3.24.41 83.3.24.41:9876 broker-a-s(slave)

Host配置

1
2
3
4
# 三台设备都要执行
echo "83.3.24.39 rocketmq-n0" | tee -a /etc/hosts
echo "83.3.24.40 rocketmq-n1" | tee -a /etc/hosts
echo "83.3.24.41 rocketmq-n2" | tee -a /etc/hosts

安装包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 下载安装包三台设备都要执行
cd /home
wget https://dist.apache.org/repos/dist/release/rocketmq/5.2.0/rocketmq-all-5.2.0-bin-release.zip

unzip rocketmq-all-5.2.0-bin-release.zip  
mv /home/rocketmq-all-5.2.0-bin-release /home/rocketmq

# 创建日志以及密码认证目录
mkdir -p /home/rocketmq/logs
mkdir -p /home/rocketmq/conf/acl

sed -i 's#${user.home}#/home/rocketmq#g' /home/rocketmq/conf/*.xml

# 根据自己设备修改JVM堆内存大小。 推荐brock大于namesrv
sed -i 's#-Xms8g -Xmx8g#-Xms64g -Xmx64g#g' /home/rocketmq/bin/runbroker.sh
sed -i 's#-Xms4g -Xmx4g#-Xms32g -Xmx32g#g' /home/rocketmq/bin/runserver.sh

配置namesrv

1
2
3
4
5
6
7
8
9
10
11
12
# 83.3.24.39 设备配置

tee /home/rocketmq/conf/namesrv.conf <<-'EOF'
listenPort=9876
enableControllerInNamesrv=true
controllerDLegerGroup=group1
controllerDLegerPeers=n0-rocketmq-n0:9878;n1-rocketmq-n1:9878;n2-rocketmq-n2:9878
controllerDLegerSelfId=n0
controllerStorePath=/home/rocketmq/controller/DledgerController
enableElectUncleanMaster=true
notifyBrokerRoleChanged=true
EOF
1
2
3
4
5
6
7
8
9
10
11
# 83.3.24.40 设备配置
tee /home/rocketmq/conf/namesrv.conf <<-'EOF'
listenPort=9876
enableControllerInNamesrv=true
controllerDLegerGroup=group1
controllerDLegerPeers=n0-rocketmq-n0:9878;n1-rocketmq-n1:9878;n2-rocketmq-n2:9878
controllerDLegerSelfId=n1
controllerStorePath=/home/rocketmq/controller/DledgerController
enableElectUncleanMaster=true
notifyBrokerRoleChanged=true
EOF
1
2
3
4
5
6
7
8
9
10
11
# 83.3.24.41 设备配置
tee /home/rocketmq/conf/namesrv.conf <<-'EOF'
listenPort=9876
enableControllerInNamesrv=true
controllerDLegerGroup=group1
controllerDLegerPeers=n0-rocketmq-n0:9878;n1-rocketmq-n1:9878;n2-rocketmq-n2:9878
controllerDLegerSelfId=n2
controllerStorePath=/home/rocketmq/controller/DledgerController
enableElectUncleanMaster=true
notifyBrokerRoleChanged=true
EOF
1
2
3
4
5
# 启动namesrv 三台设备都要执行
nohup sh /home/rocketmq/bin/mqnamesrv  -c /home/rocketmq/conf/namesrv.conf > /home/rocketmq/logs/mqnamesrv.log 2>&1 &

# 查看是否启动成功
tail -f /home/rocketmq/logs/mqnamesrv.log

配置broker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 83.3.24.39 配置

tee /home/rocketmq/conf/2m-2s-async/broker-a.conf <<-'EOF'
#所属集群名字
brokerClusterName=rocketmq-control-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
brokerRole=ASYNC_FLUSH
fetchNameSrvAddrByDnsLookup=false
namesrvAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,10911为默认值
listenPort=10911
#表示Master监听Slave请求的端口,默认为服务端口+1
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/store/abort
#限制的消息大小
maxMessageSize=104857600
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
#brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=64
#拉消息线程池数量
pullMessageThreadPoolNums=128
#broker检测队列中的消息等待时间(默认是200毫秒,自行配置)
waitTimeMillsInSendQueue=10000
#发送队列线程容量
sendThreadPoolQueueCapacity=100000
#关闭堆外内存
transientStorePoolEnable=false
#关闭文件预热
warmMapedFileEnable=false
#开启堆内传
transferMsgByHeap=true
aclEnable=false
# Broker controller 模式的总开关,只有该值为 true,自动主从切换模式才会打开
enableControllerMode=true
fetchControllerAddrByDnsLookup=false
controllerAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
# 向 controller 同步 Broker 副本信息的时间间隔
syncBrokerMetadataPeriod=5000
# 检查 SyncStateSet 的时间间隔,检查 SyncStateSet 可能会 shrink SyncState
checkSyncStateSetPeriod=5000
# 同步 controller 元数据的时间间隔,主要是获取 active controller 的地址
syncControllerMetadataPeriod=10000
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 83.3.24.40 配置

tee /home/rocketmq/conf/2m-2s-async/broker-b.conf <<-'EOF'
#所属集群名字
brokerClusterName=rocketmq-control-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
brokerRole=ASYNC_FLUSH
fetchNameSrvAddrByDnsLookup=false
namesrvAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,10911为默认值
listenPort=10911
#表示Master监听Slave请求的端口,默认为服务端口+1
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/store/abort
#限制的消息大小
maxMessageSize=104857600
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
#brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=64
#拉消息线程池数量
pullMessageThreadPoolNums=128
#broker检测队列中的消息等待时间(默认是200毫秒,自行配置)
waitTimeMillsInSendQueue=10000
#发送队列线程容量
sendThreadPoolQueueCapacity=100000
#关闭堆外内存
transientStorePoolEnable=false
#关闭文件预热
warmMapedFileEnable=false
#开启堆内传
transferMsgByHeap=true
aclEnable=false
# Broker controller 模式的总开关,只有该值为 true,自动主从切换模式才会打开
enableControllerMode=true
fetchControllerAddrByDnsLookup=false
controllerAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
# 向 controller 同步 Broker 副本信息的时间间隔
syncBrokerMetadataPeriod=5000
# 检查 SyncStateSet 的时间间隔,检查 SyncStateSet 可能会 shrink SyncState
checkSyncStateSetPeriod=5000
# 同步 controller 元数据的时间间隔,主要是获取 active controller 的地址
syncControllerMetadataPeriod=10000
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 83.3.24.41 配置

tee /home/rocketmq/conf/2m-2s-async/broker-a-s.conf <<-'EOF'
#所属集群名字
brokerClusterName=rocketmq-control-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
brokerRole=SLAVE
fetchNameSrvAddrByDnsLookup=false
namesrvAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,10911为默认值
listenPort=10911
#表示Master监听Slave请求的端口,默认为服务端口+1
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/store/abort
#限制的消息大小
maxMessageSize=104857600
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
#brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=64
#拉消息线程池数量
pullMessageThreadPoolNums=128
#broker检测队列中的消息等待时间(默认是200毫秒,自行配置)
waitTimeMillsInSendQueue=10000
#发送队列线程容量
sendThreadPoolQueueCapacity=100000
#关闭堆外内存
transientStorePoolEnable=false
#关闭文件预热
warmMapedFileEnable=false
#开启堆内传
transferMsgByHeap=true
aclEnable=false
# Broker controller 模式的总开关,只有该值为 true,自动主从切换模式才会打开
enableControllerMode=true
fetchControllerAddrByDnsLookup=false
controllerAddr=rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876
# 向 controller 同步 Broker 副本信息的时间间隔
syncBrokerMetadataPeriod=5000
# 检查 SyncStateSet 的时间间隔,检查 SyncStateSet 可能会 shrink SyncState
checkSyncStateSetPeriod=5000
# 同步 controller 元数据的时间间隔,主要是获取 active controller 的地址
syncControllerMetadataPeriod=10000
EOF

配置代理

1
2
3
4
5
6
7
8
9
10
11
12
# 8081的gRPC端口(用于 gRPC 协议通信,如跨语言客户端或 Stream 场景)。
tee /home/rocketmq/conf/rmq-proxy.json <<-'EOF'
{
 "namesrvAddr": "rocketmq-n0:9876;rocketmq-n1:9876;rocketmq-n2:9876",
 "proxyMode": "cluster",
 "rocketMQClusterName": "rocketmq-control-cluster",
 "remotingListenPort": 8380,
 "grpcServerPort": 8081,
 "useEndpointPortFromRequest": true,
 "enableACL": false
}
EOF
1
2
3
4
5
6
7
8
9
10
# 启动brock
# 83.3.24.39 执行
nohup /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-a.conf -pc /home/rocketmq/conf/rmq-proxy.json --enable-proxy > /home/rocketmq/logs/broker.log 2>&1 &


# 83.3.24.40 执行
nohup /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-b.conf -pc /home/rocketmq/conf/rmq-proxy.json --enable-proxy > /home/rocketmq/logs/broker.log 2>&1 &

# 83.3.24.41 执行
nohup /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-a-s.conf -pc /home/rocketmq/conf/rmq-proxy.json --enable-proxy > /home/rocketmq/logs/broker.log 2>&1 &

查询集群状态

1
/home/rocketmq/bin/mqadmin clusterlist -n rocketmq-n0:9876 rocketmq-n1:9876 rocketmq-n2:9876

部署Dashboard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 83.3.24.39下载、
cd /home
wget https://dist.apache.org/repos/dist/release/rocketmq/rocketmq-dashboard/2.0.0/rocketmq-dashboard-2.0.0-source-release.zip

vim /home/rocketmq-dashboard-2.0.0-source-release/src/main/resources/application.yml

rocketmq:
config:
   # if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, default localhost:9876
   # configure multiple namesrv addresses to manage multiple different clusters
  namesrvAddrs:
   # - 127.0.0.1:9876
   #     - 127.0.0.2:9876
   # 集群地址
     - 83.3.24.39:9876;83.3.24.40:9876;83.3.24.41:9876

# 打包jar包
mvn clean package -Dmaven.test.skip=true

# 运行jar
cd /home/rocketmq-dashboard-2.0.0-source-release/target/
nohup java -jar rocketmq-dashboard-2.0.0.jar &
# 查看日志
tail -f nohup.out
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# mvn仓库地址配置
[root@localhost conf]# cat settings.xml
<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>

<mirrors>
  <mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>

<profiles>
</profiles>

</settings>

Rocketmq两主一从集群搭建
http://ziiix.cn/2025/05/26/Rocketmq两主一从集群搭建/
作者
John Doe
发布于
2025年5月26日
许可协议