RocketMQ集群部署(2m-2s-async模式)

  1. 1. 1. 准备环境
    1. 1.1. 1.1 服务器
    2. 1.2. 1.2 rocketMQ
    3. 1.3. 1.3 关闭防火墙
  2. 2. 2. 集群搭建
    1. 2.1. 2.1 Broker配置属性详解
    2. 2.2. 2.2 修改Broker配置文件
      1. 2.2.1. 1. master1
      2. 2.2.2. 2. slaver2
      3. 2.2.3. 3. master2
      4. 2.2.4. 4. slaver1
      5. 2.2.5. 5. 配置文件小结
    3. 2.3. 2.3 修改启动脚本
      1. 2.3.1. 1) runbroker.sh
      2. 2.3.2. 2) runserver.sh
    4. 2.4. 2.4 服务启动
      1. 2.4.1. 1) 启动 NameServer 集群
      2. 2.4.2. 2) 启动 Broker 集群
  3. 3. 3. 集群监控平台搭建
  4. 4. 4. 其他资料

集群模式:双主双从的同步集群模式(2m-2s-async)

1. 准备环境

1.1 服务器

使用两台 Linux(centos7) 的服务器模拟集群

序号 IP 角色 服务 端口
1 192.168.56.113 NameServer NameServer 9876
Broker Master1 10909,10911,10912
Slave2 10909,10911,10912
2 192.168.56.114 NameServer NameServer 9876
Broker Master2 10909,10911,10912
Slave1 10909,10911,10912

1.2 rocketMQ

版本:4.4.0

下载地址:官方下载 其他历史版本

安装rocketMQ需要JDK1.8(64)位或以上的java环境

解压并移动到/usr/local文件夹下

1
2
3
4
5
6
# 解压 unzip命令无法识别时需要先执行 yum install -y unzip 进行安装
unzip rocketmq-all-4.4.0-bin-release.zip
# 移动并重命名
mv rocketmq-all-4.4.0-bin-release.zip /usr/local/rocketmq-4.4.0
# 跳转到rocketmq目录
cd /usr/local/rocketmq-4.4.0

目录结构:rocketmq目录结构

1.3 关闭防火墙

宿主机需要远程访问虚拟机的服务时,需要开放相关端口,或者直接关闭防火墙

直接关闭防火墙命令

1
2
3
4
5
6
# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动
systemctl disable firewalld.service

或者只开放需要的端口(更安全)

需要开放的端口:

9876:NameServer注册端口

10909:vip通道端口

10911:接受客户端连接的监听端口

10912:Master监听Slaver开放的端口

1
firewall-cmd --zone=public --add-port=9876/tcp --permanent

重置防火墙

1
firewall-cmd --reload

查看开放的端口列表

1
firewall-cmd --zone=public --list-ports

2. 集群搭建

2.1 Broker配置属性详解

属性 说明
brokerClusterName 所属集群名字,默认值 DefaultCluster
brokerName Broker 的名称,不同的broker配置文件值不能相同
brokerId broker id, 0 表示 master, 其他的正整数表示 slave
namesrvAddr NameServer地址,多个以分号分隔
brokerIP1 当前broker监听的IP,一般会自动识别本机ip,但在多网卡的情况下可能会识别错误
brokerIP2 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
defaultTopicQueueNums 创建topic时默认的队列数量,默认值 4
autoCreateTopicEnable 是否允许 Broker 自动创建Topic,建议线上关闭
autoCreateSubscriptionGroup 是否允许 Broker 自动创建订阅组,建议线上关闭
listenPort 接受客户端连接的监听端口,默认值 10911
haListenPort 表示Master监听Slave请求的端口,默认为服务端口+1
deleteWhen 在每天的什么时间删除已经超过文件保留时间的 commit log,默认凌晨 4点
fileReservedTime 以小时计算的文件保留时间,默认值72
mapedFileSizeCommitLog commitLog每个文件的大小,默认1G
mapedFileSizeConsumeQueue ConsumeQueue每个文件默认存30W条,根据业务情况调整
destroyMapedFileIntervalForcibly 默认值 1000 * 120
redeleteHangedFileInterval 默认值 1000 * 120
diskMaxUsedSpaceRatio 检测物理文件磁盘空间
storePathRootDir 存储根目录
storePathCommitLog 存储 commit log 的路径
storePathConsumeQueue 存储 consume queue 的路径
storePathIndex 消息索引存储路径
storeCheckpoint checkpoint 文件存储路径
abortFile abort 文件存储路径
maxMessageSize 消息的最大长度,默认值:1024 * 1024 * 4,单位:字节
flushCommitLogLeastPages 刷新 CommitLog 时要刷新多少页,默认4
flushConsumeQueueLeastPages 刷新消费队列时要刷新多少页,默认2
flushCommitLogThoroughInterval 默认值 1000 * 10
flushConsumeQueueThoroughInterval 默认值 1000 * 60
brokerRole Broker 的角色,默认值 ASYNC_MASTER
- ASYNC_MASTER 异步复制Master
- SYNC_MASTER 同步双写Master
- SLAVE
flushDiskType 刷盘方式,默认 ASYNC_FLUSH
- ASYNC_FLUSH 异步刷盘,broker 利用刷盘一组消息的模式,可以取得更好的性能
- SYNC_FLUSH 同步刷盘,broker 保证在收到确认生产者之前将消息刷盘
checkTransactionMessageEnable
sendMessageThreadPoolNums 发送线程个数,建议配置成 Cpu 核数
pullMessageThreadPoolNums 拉消息线程池数量

更多其他属性请参考MessageStoreConfig

2.2 修改Broker配置文件

1. master1

服务器:192.168.56.113

1
vim /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-a.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
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
namesrvAddr=192.168.56.113:9876;192.168.56.114:9876
brokerIP1=192.168.56.113
brokerIP2=192.168.56.113
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq-4.4.0/store
storePathCommitLog=/usr/local/rocketmq-4.4.0/store/commitlog
storePathConsumeQueue=/usr/local/rocketmq-4.4.0/store/consumequeue
storePathIndex=/usr/local/rocketmq-4.4.0/store/index
storeCheckpoint=/usr/local/rocketmq-4.4.0/store/checkpoint
abortFile=/usr/local/rocketmq-4.4.0/store/abort
maxMessageSize=65536
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH

2. slaver2

服务器:192.168.56.113

1
vim /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
namesrvAddr=192.168.56.113:9876;192.168.56.114:9876
brokerIP1=192.168.56.113
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq-4.4.0/store-s
storePathCommitLog=/usr/local/rocketmq-4.4.0/store-s/commitlog
storePathConsumeQueue=/usr/local/rocketmq-4.4.0/store-s/consumequeue
storePathIndex=/usr/local/rocketmq-4.4.0/store-s/index
storeCheckpoint=/usr/local/rocketmq-4.4.0/store-s/checkpoint
abortFile=/usr/local/rocketmq-4.4.0/store-s/abort
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

3. master2

服务器:192.168.56.114

1
vim /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/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
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
namesrvAddr=192.168.56.113:9876;192.168.56.114:9876
brokerIP1=192.168.56.114
brokerIP2=192.168.56.114
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq-4.4.0/store
storePathCommitLog=/usr/local/rocketmq-4.4.0/store/commitlog
storePathConsumeQueue=/usr/local/rocketmq-4.4.0/store/consumequeue
storePathIndex=/usr/local/rocketmq-4.4.0/store/index
storeCheckpoint=/usr/local/rocketmq-4.4.0/store/checkpoint
abortFile=/usr/local/rocketmq-4.4.0/store/abort
maxMessageSize=65536
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH

4. slaver1

服务器:192.168.56.114

1
vim /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-a-s.properties

修改配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
namesrvAddr=192.168.56.113:9876;192.168.56.114:9876
brokerIP1=192.168.56.114
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq-4.4.0/store-s
storePathCommitLog=/usr/local/rocketmq-4.4.0/store-s/commitlog
storePathConsumeQueue=/usr/local/rocketmq-4.4.0/store-s/consumequeue
storePathIndex=/usr/local/rocketmq-4.4.0/store-s/index
storeCheckpoint=/usr/local/rocketmq-4.4.0/store-s/checkpoint
abortFile=/usr/local/rocketmq-4.4.0/store-s/abort
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

5. 配置文件小结

  1. 同一集群下,brokerClusterName字段(所属集群名字)值必须一致
  2. brokerName 字段(Broker名称)值,对于不同的配置文件不能相同,但Master及其对应的Slaver可以保持一致
  3. storePathRootDir等存储目录字段,一般情况下会保持一致,但是由于此次为每台虚拟机启动两个Broker进程,若存储目录保持一致会导致启动失败,所以这里Master和Slaver的消息存储目录的路径是不相同的
  4. RocketMQ存储目录的字段配置后,使用配置文件作为参数启动时,若文件不存在,则会自动创建文件

2.3 修改启动脚本

RocketMQ默认JVM配置过大,启动服务前需要修改其配置

1) runbroker.sh

1
vim /usr/local/rocketmq-4.4.0/bin/runbroker.sh

​ 需要根据内存大小进行适当的对JVM参数进行调整:

1
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

2) runserver.sh

1
vim /usr/local/rocketmq-4.4.0/bin/runserver.sh
1
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

2.4 服务启动

1) 启动 NameServer 集群

分别在 192.168.56.113192.168.56.114 上启动 NameServer

1
2
cd /usr/local/rocketmq-4.4.0/bin
nohup sh mqnamesrv &

2) 启动 Broker 集群

192.168.56.113 上启动 master1 和 slaver2

1
2
3
4
5
cd /usr/local/rocketmq-4.4.0/bin
# master1
nohup sh mqbroker -c /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-a.properties &
# slaver2
nohup sh mqbroker -c /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-b-s.properties &

192.168.56.114 上启动 master2 和 slaver1

1
2
3
4
5
cd /usr/local/rocketmq-4.4.0/bin
# master2
nohup sh mqbroker -c /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-b.properties &
# slaver1
nohup sh mqbroker -c /usr/local/rocketmq-4.4.0/conf/2m-2s-sync/broker-a-s.properties &

查看启动状态

1
jps

java进程情况

1
netstat -tunlp | grep java

java端口占用情况

端口说明:

  • 9876:NameServer服务注册端口
  • 10909:vip通道的监听端口
  • 10911:Master监听端口
  • 10912:Master监听Slave请求的端口

3. 集群监控平台搭建

RocketMQ有一个对其扩展的开源项目rocketmq-externals,其中的rocketmq-console子模块便是RocketMQ的控制台管理项目了

下载项目:

1
git clone https://github.com/apache/rocketmq-externals.git

没有安装git可以直接去github下载 rocketmq-externals

github下载rocketmq-externals

进入 rocketmq-console 目录:

github下载rocketmq-externals

修改NameServer集群配置:

1
2
# 打开文件 rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties
rocketmq.config.namesrvAddr=192.168.56.113:9876;192.168.56.114:9876

打开cmd,并执行打包命令:

1
mvn clean package -Dmaven.test.skip=true

打包完成后的jar包就在 rocketmq-console/target目录下了,可以直接在本地运行,也可以复制到虚拟机上运行,运行命令:

1
java -jar rocketmq-console-ng-2.0.0.jar

也可以在后台运行

1
nohup java -jar rocketmq-console-ng-2.0.0.jar &

部署完成后就可以通过浏览器访问8080端口来查看自己部署的RocketMQ集群了,其他使用可以参考官方中文文档

RocketMQ控制台-集群

4. 其他资料

Apache RocketMQ开发者指南

mqadmin管理工具官方中文文档

RocketMQ 代码测试样例

RocketMQ单机部署