目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式。
- 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
配置的目录说明:
配置项一个主的配置
- #所属集群名字
- 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个结点
由于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菜鸟进阶高手之路
- 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}"
- 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
- 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
来源: https://juejin.im/post/5a141788f265da43133cc828