Конфигурация развертывания кластера RocketMQ

Java Java EE Linux
Конфигурация развертывания кластера RocketMQ

Цель состоит в том, чтобы использовать 2 машины для развертывания RocketMQ multi-Master multi-slave в режиме кластера асинхронной репликации.

Первый шаг — изменить файл /etc/hosts.

192.168.116.115 rocketmq1
192.168.116.116 rocketmq2

После завершения настройки машины кластера пропингуйте кластер, чтобы убедиться, что все подключено.

Скомпилируйте, чтобы получить среду

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

Настройте режим кластера [режим multi-Master multi-slave, асинхронная репликация]

Описание каталога конфигурации:

  • 2m-noslave: Мультимастер режим
  • 2m-2s-sync: режим Multi-Master-Multi-Slave, синхронная двойная запись
  • 2m-2s-async: режим Multi-Master-Multi-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.

Обратите внимание, что ${user.home} в файле конфигурации logback.*.xml необходимо заменить указанный каталог

Вы можете использовать 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 официально рекомендует использовать 64-битный JDK 1.8+, например, проверьте параметры jvm файла runserver.sh следующим образом:

-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m

Требуется специальное примечание:
Пространство метаданных, специально используемое для хранения метаданных, используется для замены perm после jdk8.

Размер кучи 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' *

JVM в runbroker.sh:

-Xms8g -Xmx8g -Xmn4g

Измените в соответствии с вашей собственной ситуацией.

Лично рекомендуется не настраивать параметры jvm по умолчанию 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}"

-XX:+DisableExplicitGC, -XX:MaxDirectMemorySize=15g, но при достижении порога будет вызван System.gc для выполнения полного 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

Примечание. Поскольку порт namerv жестко запрограммирован в коде, один компьютер может запустить namerv.

запускать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 завершено, продолжение следует...

Если вы найдете это полезным после прочтения, ставьте лайк и подписывайтесь.


Личный публичный аккаунт, добро пожаловать, чтобы обратить внимание и проверить более замечательную историю! ! !

匠心零度公众号
Публичный аккаунт Ingenuity Zero