博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RocketMQ集群部署配置
阅读量:6587 次
发布时间:2019-06-24

本文共 6549 字,大约阅读时间需要 21 分钟。

目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式。

第一步,修改/etc/hosts文件

192.168.116.115 rocketmq1192.168.116.116 rocketmq2复制代码

集群机器配置完成之后,集群内进行ping一下,确保都通。

编译得到环境

git clone -b develop https://github.com/apache/rocketmq.gitcd rocketmqmvn -Prelease-all -DskipTests clean install -Ucd distribution/target/apache-rocketmq本版本是基于4.1.0的,之后apache-rocketmq_4.1.0.tar.gz拷贝集群所有机器进行解压tar -zxvf apache-rocketmq_4.1.0.tar.gz复制代码

配置集群模式【多Master多Slave模式,异步复制】

配置的目录说明:

  • 2m-noslave: 多Master模式
  • 2m-2s-sync: 多Master多Slave模式,同步双写
  • 2m-2s-async:多Master多Slave模式,异步复制

配置项一个主的配置

#所属集群名字brokerClusterName=rocketmq-cluster#broker名字,注意此处不同的配置文件填写的不一样brokerName=broker-a#0 表示 Master,>0 表示 SlavebrokerId=0#nameServer地址,分号分割namesrvAddr=rocketmq1:9876;rocketmq2:9876#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数defaultTopicQueueNums=4#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭autoCreateTopicEnable=true#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭autoCreateSubscriptionGroup=true#Broker 对外服务的监听端口listenPort=10911#删除文件时间点,默认凌晨 4点deleteWhen=04#文件保留时间,默认 72 小时fileReservedTime=120#commitLog每个文件的大小默认1GmapedFileSizeCommitLog=1073741824#ConsumeQueue每个文件默认存30W条,根据业务情况调整mapedFileSizeConsumeQueue=300000#destroyMapedFileIntervalForcibly=120000#redeleteHangedFileInterval=120000#检测物理文件磁盘空间diskMaxUsedSpaceRatio=75#存储路径storePathRootDir=/appl/rocketmq/store#commitLog 存储路径storePathCommitLog=/appl/rocketmq/store/commitlog#消费队列存储路径存储路径storePathConsumeQueue=/appl/rocketmq/store/consumequeue#消息索引存储路径storePathIndex=/appl/rocketmq/store/index#checkpoint 文件存储路径storeCheckpoint=/appl/rocketmq/store/checkpoint#abort 文件存储路径abortFile=/appl/rocketmq/store/abort#限制的消息大小 默认4M#maxMessageSize=4194304#flushCommitLogLeastPages=4#flushConsumeQueueLeastPages=2#flushCommitLogThoroughInterval=10000#flushConsumeQueueThoroughInterval=60000#Broker 的角色#- ASYNC_MASTER 异步复制Master#- SYNC_MASTER 同步双写Master#- SLAVEbrokerRole=ASYNC_MASTER#刷盘方式#- ASYNC_FLUSH 异步刷盘#- SYNC_FLUSH 同步刷盘flushDiskType=ASYNC_FLUSH复制代码

配置项另外一个备的配置

#所属集群名字brokerClusterName=rocketmq-cluster#broker名字,注意此处不同的配置文件填写的不一样brokerName=broker-b#0 表示 Master,>0 表示 SlavebrokerId=1#nameServer地址,分号分割namesrvAddr=rocketmq1:9876;rocketmq2:9876#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数defaultTopicQueueNums=4#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭autoCreateTopicEnable=true#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭autoCreateSubscriptionGroup=true#Broker 对外服务的监听端口listenPort=11911#删除文件时间点,默认凌晨 4点deleteWhen=04#文件保留时间,默认 72 小时fileReservedTime=120#commitLog每个文件的大小默认1GmapedFileSizeCommitLog=1073741824#ConsumeQueue每个文件默认存30W条,根据业务情况调整mapedFileSizeConsumeQueue=300000#destroyMapedFileIntervalForcibly=120000#redeleteHangedFileInterval=120000#检测物理文件磁盘空间diskMaxUsedSpaceRatio=75#存储路径storePathRootDir=/appl/rocketmq-s/store#commitLog 存储路径storePathCommitLog=/appl/rocketmq-s/store/commitlog#消费队列存储路径存储路径storePathConsumeQueue=/appl/rocketmq-s/store/consumequeue#消息索引存储路径storePathIndex=/appl/rocketmq-s/store/index#checkpoint 文件存储路径storeCheckpoint=/appl/rocketmq-s/store/checkpoint#abort 文件存储路径abortFile=/appl/rocketmq-s/store/abort#限制的消息大小 默认4M#maxMessageSize=4194304#flushCommitLogLeastPages=4#flushConsumeQueueLeastPages=2#flushCommitLogThoroughInterval=10000#flushConsumeQueueThoroughInterval=60000#Broker 的角色#- ASYNC_MASTER 异步复制Master#- SYNC_MASTER 同步双写Master#- SLAVEbrokerRole=SLAVE#刷盘方式#- ASYNC_FLUSH 异步刷盘#- SYNC_FLUSH 同步刷盘flushDiskType=ASYNC_FLUSH复制代码

备注:由于一台机器部署主备,所以主、备的端口和存储路径会不同,如果多台机器部署就可以保持一样了,主备主要区别在于brokerId、brokerRole配置区别。

注意到logback.*.xml配置文件中${user.home}需要替换自己指定的目录

可以使用sed进行替换:

sed -i 's#${user.home}#/appl/rocketmq#g' *.xml# sed -i 's#${user.home}#/appl/rocketmq-s#g' *.xml 由于一台机器部署了2个结点复制代码

修改启动脚本中的JVM参数

由于RocketMQ4.1.0官方建议使用64bit JDK 1.8+;比如查看runserver.sh文件jvm参数如下:

-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m复制代码

需要特别说明下:

元数据空间,专门用来存元数据的,它是jdk8以后用来替代perm的。

JVM堆空间大小根据机器情况进行调整,如果测试机器内存太小需要调整,不然启动不了,比如修改为如下

-Xms1G -Xmx1G -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m复制代码

可以使用sed进行替换,把所有PermSize、MaxPermSize替换掉:

sed -i 's#PermSize#MetaspaceSize#g' *sed -i 's#MaxPermSize#MaxMetaspaceSize#g' *复制代码

runbroker.sh里面的jvm:

-Xms8g -Xmx8g -Xmn4g复制代码

根据自己情况进行修改。

个人建议对于RocketMQ默认的jvm参数除了堆大小其他的先不要调整,后续通过观察分析之后看看是否有必要进行其他参数的调整等,欢迎阅读本人系列文章。

其实我有有疑惑,在broker的jvm参数:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30-XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:+DisableExplicitGC"JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"复制代码

-XX:+DisableExplicitGC,-XX:MaxDirectMemorySize=15g,但是当达到阀值之后会调用System.gc来做一次full gc,关键System.gc都被禁止了。 希望那位大佬知道,在留言区说明下,谢谢。

启动服务

记住先启动NameServer,再启动Broker,关闭的时候恰好相反,先关闭Broker再关闭NameServer

启动NameServer

nohup sh /appl/apache-rocketmq/bin/mqnamesrv &tail -f /appl/rocketmq-s/logs/rocketmqlogs/namesrv.log#tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.logINFO main - The Name Server boot success. serializeType=JSON复制代码

备注:由于namesrv的端口是写死在代码里面的,所以一台机器启动一个namesrv即可。

启动Broker

rocketmq1机器:nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &  rocketmq2机器:nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &   tail -f /appl/rocketmq/logs/rocketmqlogs/broker.log ……INFO main - The broker[broker-a, 192.168.116.116:10911] boot success. serializeType=JSON and name server is rocketmq1:9876;rocketmq2:9876……tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.log……new broker registerd, 192.168.116.116:11911 HAServer: 192.168.116.116:11912……new broker registerd, 192.168.116.115:11911 HAServer: 192.168.116.115:11912……复制代码

关闭服务:

sh bin/mqshutdown brokersh bin/mqshutdown namesrv复制代码

到目前位置,关于RocketMQ的集群环境部署就结束了,未完待续……

如果读完觉得有收获的话,欢迎点赞加关注。


个人公众号,欢迎关注,查阅更多精彩历史!!!

匠心零度公众号

转载地址:http://hehno.baihongyu.com/

你可能感兴趣的文章
linux中搭建java开发环境
查看>>
【转】64位ORACLE客户端上plsql无法识别ORACLE_HOME解决方案
查看>>
Github上不错的Android开源代码(一)
查看>>
mysql5.5.17源代码安装
查看>>
ios开发--企业帐号发布
查看>>
关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法...
查看>>
7z格式、LZMA压缩算法和7-Zip详细介绍
查看>>
imx6 uboot splash image
查看>>
转:全栈工程师的知识栈列表
查看>>
NetSnmp配置
查看>>
Memcached, Redis, MongoDB区别
查看>>
【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题
查看>>
LINQ的Union方法
查看>>
转:Java NIO系列教程(一)Java NIO 概述
查看>>
在Fedora8上配置Apache Httpd
查看>>
C/C++获取文件大小
查看>>
深入理解Java内存模型(五)——锁
查看>>
你不知道的Retrofit缓存库RxCache
查看>>
SpringCloud_Eureka集群配置
查看>>
阿里要把雄安打造成AI第一城:未来30年城市长啥样?
查看>>