目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式。
第一步,修改/etc/hosts文件
192.168.116.115 rocketmq1 192.168.116.116 rocketmq2
集群机器配置完成之后,集群内进行ping一下,确保都通。
编译得到环境
git clone -b develop https://github.com/apache/rocketmq.git cd rocketmq mvn -Prelease-all -DskipTests clean install -U cd 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 表示 Slave brokerId=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每个文件的大小默认1G mapedFileSizeCommitLog=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 #- SLAVE brokerRole=ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
配置项另外一个备的配置
#所属集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=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每个文件的大小默认1G mapedFileSizeCommitLog=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 #- SLAVE brokerRole=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参数除了堆大小其他的先不要调整,后续通过观察分析之后看看是否有必要进行其他参数的调整等,欢迎阅读本人 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.log INFO 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 broker sh bin/mqshutdown namesrv
到目前位置,关于RocketMQ的集群环境部署就结束了,未完待续……
如果读完觉得有收获的话,欢迎点赞加关注。
个人公众号,欢迎关注,查阅更多精彩历史!!!

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。