本文介绍了如何在Linux环境下,设置3台服务器作为nameserver和brokerserver,实现RocketMQ的2M-2S异步复制集群配置,包括master和slave的配置,服务启动和控制台安装步骤。
一、环境要求
- 64bit OS-Linux
- 64bit JDK 1.8
- 下载安装RocketMQ 5.3.3 版本
二、服务器规划
| 序号 | IP | 角色 |
| 1 | 192.168.239.130 | nameserver、brokerserver |
| 2 | 192.168.239.131 | nameserver、brokerserver |
| 3 | 192.168.239.132 | nameserver、brokerserver |
2.1 服务规划
- NameServer:每台服务器运行一个 NameServer 实例。
- Broker Master:每台服务器运行一个 Master Broker。
- Broker Slave:每台服务器运行一个 Slave Broker,作为另一台服务器上的 Master Broker 的从节点。
2.2防火墙规划
确保以下端口开放:
- NameServer:9876
- Broker Master/Slave:10911, 10912, 10921, 10922
一次放开端口: sudo firewall-cmd --zone=public --add-port=9876/tcp --permanent sudo firewall-cmd --zone=public --add-port=10911/tcp --permanent sudo firewall-cmd --zone=public --add-port=10912/tcp --permanent sudo firewall-cmd --zone=public --add-port=10921/tcp --permanent sudo firewall-cmd --zone=public --add-port=10922/tcp --permanent重新加载防火墙规则 : sudo firewall-cmd --reload检查开放的端口 : sudo firewall-cmd --list-ports
三、下载安装
关于RocketMQ 5.3.3 下载安装可移步:https://www.cnblogs.com/luotengteng/p/19024820
先在第一台服务器下载安装包到我们想要安装的目录(本文的安装路径在/usr/local/rocketmq/rocketmq-cluster),然后进行配置文件修改以及日志目录修改,具体如下:
本文是多主多从异步复制集群配置,需要/usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async 目录针对master-a配置以及salve-b进行配置:
broker-a.properties配置文件如下:(master节点)
# 集群名,不同broker节点集群名是一样的 brokerClusterName=rocketmq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a #0 表示 Master ,>0 表示 Slave brokerId=0 #nameServer地址,多个用分号分割 namesrvAddr=192.168.239.130:9876;192.168.239.131:9876;192.168.239.132:9876 #强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误 brokerIP1=192.168.239.130 #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建Topic,建议线下开启,线上建议关闭 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上建议关闭 autoCreateSubscriptionGroup=false #Broker 对外服务的监听端口 listenPort=10921 #用于 Broker 主从同步的监听端口,默认值:listenPort - 1,可自己修改 haListenPort=10922 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=18 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/usr/local/rocketmq/rocketmq-cluster/store-s #commitLog 存储路径 storePathCommitLog=/usr/local/rocketmq/rocketmq-cluster/store-s/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/rocketmq/rocketmq-cluster/store-s/consumequeue #消息索引存储路径 storePathIndex=/usr/local/rocketmq/rocketmq-cluster/store-s/index #checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketmq/rocketmq-cluster/store-s/checkpoint #abort 文件存储路径 abortFile=/usr/local/rocketmq/rocketmq-cluster/store-s/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=SLAVE #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128
broker-b-s.properties配置文件如下:(salve节点)
# 集群名,不同broker节点集群名是一样的 brokerClusterName=rocketmq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b #0 表示 Master ,>0 表示 Slave brokerId=1 #nameServer地址,多个用分号分割 namesrvAddr=192.168.239.130:9876;192.168.239.131:9876;192.168.239.132:9876 #强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误 brokerIP1=192.168.239.130 #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建Topic,建议线下开启,线上建议关闭 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上建议关闭 autoCreateSubscriptionGroup=false #Broker 对外服务的监听端口 listenPort=10921 #用于 Broker 主从同步的监听端口,默认值:listenPort - 1,可自己修改 haListenPort=10922 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=18 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/usr/local/rocketmq/rocketmq-cluster/store-s #commitLog 存储路径 storePathCommitLog=/usr/local/rocketmq/rocketmq-cluster/store-s/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/rocketmq/rocketmq-cluster/store-s/consumequeue #消息索引存储路径 storePathIndex=/usr/local/rocketmq/rocketmq-cluster/store-s/index #checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketmq/rocketmq-cluster/store-s/checkpoint #abort 文件存储路径 abortFile=/usr/local/rocketmq/rocketmq-cluster/store-s/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=SLAVE #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128
注意事项:
1. 两个配置文件中都设置了存储路径,需要注意在自己的服务器上创建相应的目录
2. 注意brokerId的设置,0:表示master 大于0:表示salve
3. 两个配置文件中broker对外服务的监听端口listenPort和haListenPort注意设置不一样,不然会导致端口冲突
4. 分别修改 /usr/local/tools/rocketmq/rocketmq/bin 目录下 runserver.sh 和 runbroker.sh 的JAVA_OPT内存大小,不然启动不了
把第一台服务器的安装配置分别复制到第二和第三台服务器
scp -r /usr/local/rocketmq/rocketmq-cluster luoteng@192.168.239.131:/usr/local/rocketmq/scp -r /usr/local/rocketmq/rocketmq-cluster luoteng@192.168.239.132:/usr/local/rocketmq/
分别修改第二和第三台服务器broker配置,其实和第一台差不多,只是改下broker配置文件名称以及配置文件中的brokerName:
第二台服务器将broker-a.properties改为broker-b.properties,broker-b-s.properties改为broker-c-s.properties
第三台服务器将broker-b.properties改为broker-c.properties,broker-c-s.properties改为broker-a-s.properties
broker-b.properties,broker-c-s.properties配置文件内brokerName分别改为 broker-b,broker-c
broker-c-s.properties,broker-a-s.properties配置文件内brokerName分别改为 broker-c,broker-a
四、服务启动
#第一步:分别在三台服务器启动nameserver nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqnamesrv &#第二步:分别在三台服务器启动master-broker nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-a.properties & nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-b.properties & nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-c.properties &#第三步:分别在三台服务器启动salve-broker nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-b-s.properties & nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-c-s.properties & nohup sh /usr/local/rocketmq/rocketmq-cluster/bin/mqbroker -c /usr/local/rocketmq/rocketmq-cluster/conf/2m-2s-async/broker-a-s.properties &#分别在三台服务器执行jps命令,查看服务是否全部启动成功: jps #没错误的话应该有如下输出: 62196 Jps 8999 NamesrvStartup 18219 BrokerStartup 18015 BrokerStartup
五、修改RocketMQ控制台配置
更改配置文件application.properties,设置刚刚部署的nameserver地址:rocketmq.config.namesrvAddr=192.168.239.130:9876;192.168.239.131:9876;192.168.239.132:9876
重新打包部署:

RocketMQ控制台安装,可以移步:https://www.cnblogs.com/luotengteng/p/19025379
然后访问RocketMQ控制台,可以看到rocketmq集群信息:

至此,RocketMQ三主三从异步复制部署完成。
原文参考链接:https://blog.csdn.net/weixin_36818110/article/details/115654762
