目录

Life in Flow

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

X

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

作者:Soulboy