目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

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

作者:Soulboy