Home 如何搭建RocketMQ集群 - 双主集群部署
Post
Cancel

如何搭建RocketMQ集群 - 双主集群部署

服务器环境

IP 角色 模式
192.168.2.222 nameServer1,brokerServer1 Master1
192.168.2.223 nameServer2,brokerServer2 Master2

修改配置文件

两台机器执行相同的操作,并注意,brokerName的值跟配置文件一致

1
2
vi /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
vi /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

这里把常用的参数配置基本都列了出来,具体意思在注释里

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
#所属集群名字 
brokerClusterName=rocketmq-cluster 
#broker名字,注意此处不同的配置文件填写的不一样 
brokerName=broker-a|broker-b 
#0 表示 Master,>0 表示 Slave 
brokerId=0 
#nameServer地址,分号分割 
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 
defaultTopicQueueNums=4 
# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 
autoCreateTopicEnable=true 
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 
autoCreateSubscriptionGroup=true 
# Broker 对外服务的监听端口 
listenPort=10911 
# 删除文件时间点,默认凌晨 4点 
deleteWhen=04 
#文件保留时间,默认 48 小时 
fileReservedTime=120 
#commitLog每个文件的大小默认1G 
mapedFileSizeCommitLog=1073741824 
#ConsumeQueue每个文件默认存30W条,根据业务情况调整 
mapedFileSizeConsumeQueue=300000 
#destroyMapedFileIntervalForcibly=120000 
#redeleteHangedFileInterval=120000 
#检测物理文件磁盘空间 
diskMaxUsedSpaceRatio=88 
#存储路径 
storePathRootDir= /usr/local/rocketmq/store 
#commitLog 存储路径 
storePathCommitLog= /usr/local/rocketmq/store /commitlog 
#消费队列存储路径存储路径 
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue 
#消息索引存储路径 
storePathIndex=/usr/local/rocketmq/store/index 
#checkpoint 文件存储路径 
storeCheckpoint=/usr/local/rocketmq/store/checkpoint 
#abort 文件存储路径 
abortFile=/usr/local/rocketmq/store/abort 
#限制的消息大小,默认4M
maxMessageSize=65536 
#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=128 
#拉消息线程池数量 
#pullMessageThreadPoolNums=128

启动

要先启动NameServer,再启Broker,两台机器执行相同的操作。启动BrokerServer(节点1用的是a.properties,节点2用的是b.properties)

数据清理

首先停一下服务

1
2
3
cd /usr/local/rocketmq/bin
sh mqshutdown broker
sh mqshutdown namesrv

然后清一下store,但别忘记重新建一下

1
2
3
4
5
rm -rf /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index

Broker重启对客户端的影响

Broker重启可能会导致正在发往这台机器的的消息发送失败,RocketMQ提供了一种优雅关闭Broker的方法,通过执行以下命令会清除Broker的写权限,过40s后,所有客户端都会更新Broker路由信息,此时再关闭Broker就不会发生发送消息失败的情况,因为所有消息都发往了其他Broker。

1
sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr
This post is licensed under CC BY 4.0 by the author.