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