Цель состоит в том, чтобы использовать 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 завершено, продолжение следует...
Если вы найдете это полезным после прочтения, ставьте лайк и подписывайтесь.
Личный публичный аккаунт, добро пожаловать, чтобы обратить внимание и проверить более замечательную историю! ! !