RocketMQ集群高可用之双主双从
机器列表
server1 ssh root@192.168.159.133 部署nameServer Broker-a
server2 ssh root@192.168.159.130 部署nameServer Broker-a-s
server3 ssh root@192.168.159.131 Broker-b
server4 ssh root@192.168.159.132 Broker-b-s
修改 RocketMQ 启动内存配置
4 个机器都要修改, 其中 runbroker.sh 修改 4 个,runserver.sh 修改 2 个
# 解决NameServer内存不满足4G的报错:修改2个
vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh #修改JAVA_OPT JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 解决Broker内存不满足4G的报错: 修改4个
vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
编辑并启动 rocketmq 命令
broker-a 主节点
cd /test/rocketmq/distribution/target/apache-rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
# 修改配置文件
vim /test/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a.properties
namesrvAddr=192.168.159.133:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=
#storePathCommitLog
broker-a-s 从节点
cd /test/rocketmq/distribution/target/apache-rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
# 修改配置文件
vim /test/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a-s.properties
namesrvAddr=192.168.159.133:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=
#storePathCommitLog
broker-b 主节点
cd /test/rocketmq/distribution/target/apache-rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
# 修改配置文件
vim /test/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-b.properties
namesrvAddr=192.168.159.133:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=
#storePathCommitLog
*broker-b-s 从节点
cd /test/rocketmq/distribution/target/apache-rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
# 修改配置文件
vim /test/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-b-s.properties
namesrvAddr=192.168.159.133:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=
#storePathCommitLog
可视化管控台
管控台安装在 server1 机器里面。
# 修改pom文件
vim /test/rocketmq-externals-master/rocketmq-console/pom.xml
<rocketmq.version>4.4.0</rocketmq.version> #去掉 -SNAPSHOT
# 修改配置文件
vim /test/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties
rocketmq.config.namesrvAddr=192.168.159.133:9876;192.168.159.130:9876
#重新构建
cd /test/rocketmq-externals-master/rocketmq-console
mvn clean package -Dmaven.test.skip=true c
d target/
# 以守护进程的方式启动RocketMQ-Console
nohup java -jar /test/rocketmq-externals-master/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar &
生产环境操作和推荐配置
- Topic 创建线上禁止开启自动创建:一般是有专门的后台进行队列的 CRUD,应用上线需要申请队列名称。
- 生产环境推荐配置
* NameServer配置多个不同机器多个节点
* 多Master, 每个Master带有Slave
* 主从设置为SYNC_MASTER同步双写
* Producer用同步方式投递Broker
* 刷盘策略为SYNC_FLUSH(性能好点则可以为ASYNC_FLUSH):其实大多数情况下异步刷盘可以满足,毕竟性能好一些。
- 性能分析思路
* CPU: top
* 网卡: sar -n DEV 2 10、netstat -t、 iperf3
* 磁盘: iostat -xdm 1
* JVM: jstack、jinfo、MAT