автор | Дата | номер версии |
---|---|---|
Юань Гонгзи | 2019-12-14 | v1.0.0 |
Чем меньше ты знаешь, тем меньше ты не знаешь
Если у вас нет лайков друзей, вы не можете улучшать и сражаться с монстрами
1. Сплетни
RocketMQ — это промежуточное ПО для сообщений, созданное Ali.她
— это распределенная платформа обмена сообщениями и потоковой передачи с малой задержкой, высокой производительностью и надежностью, емкостью в триллион масштабов и гибкой масштабируемостью. . . (Это должно быть зарегистрировано в очереди задержки для чтения исходного кода)
Во-первых, через официальное объяснение архитектуры программного обеспечения понять, какие роли используются в программном обеспечении.отвезти вас по адресу, легче понять через Google Translate. . .
Поскольку концепции будут использоваться во время развертывания, вот краткое описание моего понимания.
-
NameServer: понимается как Лидер, порт по умолчанию 9876.
集群
Когда необходимо запустить несколько служб, они не взаимодействуют друг с другом.Описание основной функции: получение запроса клиента (информация о конфигурации в проекте разработки представляет собой информацию об адресе и номере порта этого человека), управление брокером (через сердцебиение, а не глазами) и получение информации о маршрутизации брокера, и запишите полный объем каждой маршрутной информации.
-
Сервер-брокер: он понимается как подписчик NameServer, а также является основной ролью RocketMQ.Порт по умолчанию — 10911.
集群
Когда необходимо запустить несколько служб, они не взаимодействуют друг с другом. Однако при развертывании службы высокой доступности (высокая доступность) Брокер делится на две роли: Главный Брокер и Ведомый Брокер, между которыми происходит синхронизация данных.Описание основной функции: получение клиентских запросов, управление клиентами-производителями и потребителями, управление сообщениями (включая физическое хранилище).
-
Производитель и потребитель: производитель и потребитель.
在部署时
, нам не нужно заботиться об этом. Он применяется к ролям создания и потребления сообщений в проектах разработки.Поэтому при развертывании обратите внимание, что существует только две концепции NameServer и Broker Server.
2. Загрузите установочный пакет
Официальный адрес:документация по установке,4.6.0 Адрес загрузки
Загрузите последнюю версию программного обеспечения: Rocketmq-all-4.6.0-bin-release.zip.
3. Проверка/подготовка системной среды
- Среда Java jdk1.8 или выше
- Пример использования операционной системы Centos7
- Если вы не женщина-водитель, вы должны использовать root-пользователя на протяжении всего процесса.
- Напоминание о высокой энергии
如客官使用非root用户,考虑到权限方面,需把文章中涉及到/var这类根级别的目录,调整为用户home目录,又或者修改目录权限
- распаковать zip инструкция, способ установки:
yum install -y unzip zip
- Метод сопоставления доменных имен см. в других статьях.Главы с расширенным содержанием
4. Одиночная машина
В этой главе в основном описывается установка службы NameServer и брокера на машине.
1. Выберите каталог установки (поместите инструментальное программное обеспечение в папку /soft или как хотите)
распаковать
[root@dev /soft]# unzip rocketmq-all-4.6.0-bin-release.zip
Создавайте программные ссылки для облегчения последующих обновлений программного обеспечения или переключения между несколькими версиями.
[root@dev /soft]# ln -s rocketmq-all-4.6.0-bin-release rocketmq
2. Установите переменные среды
Добавьте следующее в нижней части файла,ROCKETMQ_HOME
Старайтесь не изменять имя переменной, потому что сценарий в каталоге bin программного обеспечения будет использовать переменную среды с этим именем.
[root@dev /soft]# vi /etc/profile
export ROCKETMQ_HOME=/soft/rocketmq
export PATH=$PATH:$ROCKETMQ_HOME/bin
执行保存: Esc :wq
[root@dev /soft]# source /etc/profile
3. Простой старт, чтобы узнать
# 启动 NameServer
[root@dev /soft]# mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
# 表示启动成功,ctrl + c 退出
# 启动 Broker
[root@dev /soft]# mqbroker
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /soft/hs_err_pid127774.log
# 我哔哔哔,内存不够啊
4. Найдите, что изменить
- параметры JVM
Параметры JVM по умолчанию, запускаемые NameServer и Broker, немного велики. Если это непроизводственная среда, их можно уменьшить.
NameServer: Через скрипт bin/mqnamesrv я узнал, что bin/runserver.sh используется для настройки JVM, поэтому я пришел к ней.
Найдите место, где установлен -Xms, и прокомментируйте строку, настройте, как показано ниже. (Посмотрите на эту конфигурацию, JDK 1.8 или выше)
[root@dev /soft/rocketmq/bin]# vi runserver.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn32m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=64m"
执行保存: Esc :wq
Брокер: С помощью скрипта bin/mqbroker я узнал, что bin/runbroker.sh используется для настройки JVM, так что продолжайте диск.
Найдите место, где установлен -Xms, и прокомментируйте строку, настройте, как показано ниже.
[root@dev /soft/rocketmq/bin]# vi runbroker.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn32m"
执行保存: Esc :wq
- путь журнала
Путь по умолчанию — это домашний каталог ${user.home} текущего запускаемого пользователя, а путь к хранилищу можно настроить в соответствии с реальной ситуацией. (На самом деле настраивать хлопотно, и не забудьте восстановить при обновлении в будущем)
Журнал NameServer: conf/logback_namesrv.xml, найдите строку конфигурации содержимого и определите замену переменной пути журнала с тем же именем ниже. Каталог пути журнала автоматически создается при запуске службы.
[root@dev /soft/rocketmq/conf]# vi logback_namesrv.xml
<configuration>
<property name="user.home" value="/var/rocketmq" />
执行保存: Esc :wq
Журнал брокера: conf/logback_broker.xml, как указано выше.
[root@dev /soft/rocketmq/conf]# vi logback_broker.xml
<configuration>
<property name="user.home" value="/var/rocketmq" />
执行保存: Esc :wq
- Скорректировать адрес NameServer, указанный Брокером по умолчанию (если они все установлены на одной машине, их нельзя изменить)
Сначала сделайте копию conf/broker.conf в качестве резервной копии, затем добавьте строку namesrvAddr внизу файла. (IP-адрес также рекомендуется использовать для сопоставления доменного имени)
[root@dev /soft/rocketmq/conf]# cp broker.conf broker.conf.bak
[root@dev /soft/rocketmq/conf]# vi broker.conf
# 参考行flushDiskType = ASYNC_FLUSH
namesrvAddr=127.0.0.1:9876
Когда Брокер стартует, несите-c
параметр, указывающий путь к файлу конфигурации.
[root@dev /soft/rocketmq]# mqbroker -c /soft/rocketmq/conf/broker.conf
5. Кластер
В этой главе в основном описывается многоузловой кластер NameServer и Broker. Чтобы усложнить задачу, подготовьтесь к развертыванию кластера на одном компьютере.
Кластер NameServer предназначен для запуска нескольких служб NameServer, а кластер Broker разделен на три режима: несколько мастеров, несколько мастеров и несколько ведомых устройств — асинхронная репликация и синхронная двойная запись. Ведомый создает резервную копию сообщений от ведущего, не получает сообщения, написанные клиентами, и может потреблять сообщения. Разница между асинхронным и синхронным режимами заключается во времени, в которое Мастер возвращает ответную информацию клиенту после написания сообщения.
-
Несколько мастеров, без ведомых
Если один из них выйдет из строя, неиспользованные сообщения на этом компьютере не будут подписаны для использования до тех пор, пока он не восстановится.
-
Multi-Master multi-Slave-асинхронная репликация (управление параметрами: brokerRole=ASYNC_MASTER)
В асинхронном режиме, если мастер записывает успешно, он немедленно сообщает об успешном завершении записи клиенту и одновременно записывает в ведомый асинхронно. Существует короткая задержка сообщения между первичным и вторичным.
-
Multi-Master, multi-Slave, синхронная двойная запись (управление параметрами: brokerRole=SYNC_MASTER)
После того, как и мастер, и ведомый успешно записаны, статус успешной записи сообщается клиенту.
Кроме того, обратите внимание на параметры метода написания сообщения здесь.flushDiskType
, Асинхронная очистка и синхронная очистка.
-
Асинхронная очистка (flushDiskType=ASYNC_FLUSH)
Пока сообщение записывается в память, оно будет сообщать клиенту о статусе успешной записи. Когда количество сообщений в памяти достигает определенного уровня, операция записи на диск запускается равномерно для быстрой записи.
-
Синхронный сброс (flushDiskType=SYNC_FLUSH)
После того как сообщение подтверждает, что оно было записано на диск, клиенту сообщается об успешном выполнении записи.
Официальный также предоставляет конфигурацию Брокера по умолчанию для этих трех режимов, которые размещены в каталоге conf: 2m-noslave (2 мастера), 2m-2s-async (асинхронная репликация, 2 мастера, каждому мастеру соответствует 1 слейв), 2m-noslave (2 мастера), 2m-2s-async -2s-sync (синхронная двойная запись, 2 мастера, каждому мастеру соответствует 1 слейв).
Вот думаю, как написать, чтобы добиться эффекта полного охвата сцены. Конечным результатом является решение разместить развертывание кластера на одной машине для объяснения, ведь есть больше вещей, которые нужно учитывать, чем несколько, например, конфликты портов и файловые каталоги. Однако, если позволяют условия, лучше развернуть по одному на каждый узел, ведь первоначальное намерение кластера — максимально предотвратить единые точки отказа и повысить общую производительность.
Итак, приступим к развертыванию кластера на одной машине. Наша цель кластера — 2 NameServer, 4 Brokers (2 Master, 2 Slave, каждый master соответствует 1 slave, асинхронная репликация), используя официальное объяснение расширения конфигурации 2m-2s-async.
Кластер серверов имен
- Подготовить файл конфигурации
Основное внимание уделяется решению проблемы конфликта портов, которая решается с помощью конфигурационного файла NameServer. Сначала мы создаем общую папку для хранения конфигурации кластера и файла конфигурации NameServer.
# 在用户根目录下,创建集群配置文件夹
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster
# 创建两个NameServer的配置文件
[root@dev /soft/rocketmq]# touch ~/rocketmq/cluster/nameserver-a.properties
[root@dev /soft/rocketmq]# touch ~/rocketmq/cluster/nameserver-b.properties
nameserver-a.properties
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/nameserver-a.properties
listenPort=9876
# 主目录,这里修改主用于指定所使用的日志文件
rocketmqHome=/root/rocketmq/cluster/nameserver-a
执行保存: Esc :wq
nameserver-b.properties
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/nameserver-b.properties
listenPort=9877
rocketmqHome=/root/rocketmq/cluster/nameserver-b
执行保存: Esc :wq
- Создайте
rocketmqHome
path и в файл конфигурации журнала, чтобы каждая служба NameServer создавала отдельный файл журнала. (Несколько узлов одного типа будут записывать файл журнала с одним и тем же именем при запуске, и есть определенные помехи)
сервер имен-журнал
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/nameserver-a/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_namesrv.xml ~/rocketmq/cluster/nameserver-a/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/nameserver-a/conf/logback_namesrv.xml
<configuration>
<property name="user.home" value="/var/rocketmq/nameserver-a" />
执行保存: Esc :wq
журнал имен сервера-b
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/nameserver-b/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_namesrv.xml ~/rocketmq/cluster/nameserver-b/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/nameserver-b/conf/logback_namesrv.xml
<configuration>
<property name="user.home" value="/var/rocketmq/nameserver-b" />
执行保存: Esc :wq
- запускать
[root@dev /soft/rocketmq]# nohup mqnamesrv -c ~/rocketmq/cluster/nameserver-a.properties >/dev/null 2>&1 &
[root@dev /soft/rocketmq]# nohup mqnamesrv -c ~/rocketmq/cluster/nameserver-b.properties >/dev/null 2>&1 &
[root@dev ~]# jps
35538 Jps
35401 NamesrvStartup
35454 NamesrvStartup
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/nameserver-a/logs/rocketmqlogs/namesrv.log
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/nameserver-b/logs/rocketmqlogs/namesrv.log
Другие связанные команды:
- Посмотреть все параметры NameServer: mqnamesrv -p
Брокерский кластер
- Подготовить файл конфигурации
Скопируйте файл конфигурации из conf/2m-2s-async в папку конфигурации кластера.
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/2m-2s-async/* ~/rocketmq/cluster/
Давайте вместе взглянем на конфигурацию брокера, предполагается, что ее необходимо изменить, например, номер порта, связанные пути и информацию, такую как указанное имя сервера подключения.
broker-a.properties, первый мастер-брокер
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-a.properties
# ============默认的参数============
# 默认集群名,如果一个集群Broker太多,则可以新增一个集群名,使其后续扩展的Broker连接到另一个集群。
brokerClusterName=DefaultCluster
# broker名称,如果是slave,保存于master一致。如果同属master,则不能一致。
brokerName=broker-a
# broker序号,如果是master,则为0.如果是slave,则1、2、3依序递增。
brokerId=0
# 删除过期文件时间点,默认是每天凌晨4点。默认每个文件的过期时间为72小时,不管文件上的消息是否被全部消费。
deleteWhen=04
# 文件的过期时间,默认不指定为72,官方配置文件修改为48,单位是小时。
fileReservedTime=48
# broker角色。SYNC_MASTER(同步双写),ASYNC_MASTER(异步复制),SLAVE(备份节点)
brokerRole=ASYNC_MASTER
# 刷盘方式:ASYNC_FLUSH(异步刷盘),SYNC_FLUSH(同步刷盘)
flushDiskType=ASYNC_FLUSH
# ============以下新增============
# broker端口。如在同机器,不管是master,还是slave,都不能一样。
# 一个Broker会占用三个端口,以及设置端口号的+1和-2。同机器安装时要留意,至少以4步长递增设置
listenPort=10911
# 指定连接的NameServer,多个以英文;分隔。IP地址最好用域名映射替换,少一些变更机器的烦恼。
namesrvAddr=192.168.0.215:9876;192.168.0.215:9877
# 存储消息的根目录
storePathRootDir=/var/rocketmq/broker-a/store
# commitLog存储路径
storePathCommitLog=/var/rocketmq/broker-a/store/commitlog
# 主目录,这里修改主用于指定所使用的日志文件,会读取该目录下conf文件夹下的日志文件。如果不设置,会读取ROCKETMQ_HOME环境变量的文件夹下conf文件夹下的日志文件
rocketmqHome=/root/rocketmq/cluster/broker-a
# broker机器IP地址,如使用多网卡,而且IP需要手工指定的话可设置
#brokerIP1=192.168.0.215
执行保存: Esc :wq
Broker-a-s.properties, подчиненный узел первого Мастер-брокера.
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-a-s.properties
# ============默认的参数============
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
# ============以下新增============
listenPort=10915
namesrvAddr=127.0.0.1:9876;127.0.0.1:9877
storePathRootDir=/var/rocketmq/broker-a-s/store
storePathCommitLog=/var/rocketmq/broker-a-s/store/commitlog
rocketmqHome=/root/rocketmq/cluster/broker-a-s
执行保存: Esc :wq
broker-b.properties, второй мастер-брокер
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-b.properties
# ============默认的参数============
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
# ============以下新增============
listenPort=10919
namesrvAddr=127.0.0.1:9876;127.0.0.1:9877
storePathRootDir=/var/rocketmq/broker-b/store
storePathCommitLog=/var/rocketmq/broker-b/store/commitlog
rocketmqHome=/root/rocketmq/cluster/broker-b
执行保存: Esc :wq
broker-b-s.properties, подчиненный узел второго главного брокера
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-b-s.properties
# ============默认的参数============
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
# ============以下新增============
listenPort=10923
namesrvAddr=127.0.0.1:9876;127.0.0.1:9877
storePathRootDir=/var/rocketmq/broker-b-s/store
storePathCommitLog=/var/rocketmq/broker-b-s/store/commitlog
rocketmqHome=/root/rocketmq/cluster/broker-b-s
执行保存: Esc :wq
- Создайте
rocketmqHome
Path и примите во внимание файл конфигурации журнала, чтобы каждая служба брокера создавала отдельный файл журнала.
брокер-журнал
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/broker-a/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_broker.xml ~/rocketmq/cluster/broker-a/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-a/conf/logback_broker.xml
<configuration>
<property name="user.home" value="/var/rocketmq/broker-a" />
执行保存: Esc :wq
журнал брокера
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/broker-a-s/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_broker.xml ~/rocketmq/cluster/broker-a-s/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-a-s/conf/logback_broker.xml
<configuration>
<property name="user.home" value="/var/rocketmq/broker-a-s" />
执行保存: Esc :wq
журнал брокера-b
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/broker-b/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_broker.xml ~/rocketmq/cluster/broker-b/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-b/conf/logback_broker.xml
<configuration>
<property name="user.home" value="/var/rocketmq/broker-b" />
执行保存: Esc :wq
Журнал брокера-б-са
[root@dev /soft/rocketmq]# mkdir -p ~/rocketmq/cluster/broker-b-s/conf
[root@dev /soft/rocketmq]# cp ${ROCKETMQ_HOME}/conf/logback_broker.xml ~/rocketmq/cluster/broker-b-s/conf/
[root@dev /soft/rocketmq]# vi ~/rocketmq/cluster/broker-b-s/conf/logback_broker.xml
<configuration>
<property name="user.home" value="/var/rocketmq/broker-b-s" />
执行保存: Esc :wq
- запускать
[root@dev /soft/rocketmq]# nohup mqbroker -c ~/rocketmq/cluster/broker-a.properties >/dev/null 2>&1 &
[root@dev /soft/rocketmq]# nohup mqbroker -c ~/rocketmq/cluster/broker-a-s.properties >/dev/null 2>&1 &
[root@dev /soft/rocketmq]# nohup mqbroker -c ~/rocketmq/cluster/broker-b.properties >/dev/null 2>&1 &
[root@dev /soft/rocketmq]# nohup mqbroker -c ~/rocketmq/cluster/broker-b-s.properties >/dev/null 2>&1 &
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/broker-a/logs/rocketmqlogs/broker.log
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/broker-a-s/logs/rocketmqlogs/broker.log
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/broker-b/logs/rocketmqlogs/broker.log
[root@dev /soft/rocketmq]# tail -f /var/rocketmq/broker-b-s/logs/rocketmqlogs/broker.log
Другие связанные команды:
-
Посмотреть основные или все параметры брокера: mqbroker -m или mqbroker -p
-
Просмотрите ситуацию с кластером: mqadmin clusterList -n localhost:9876 (используйте один из серверов имен в кластере, несколько точек с запятой сообщат об ошибке)
6. Самостоятельный запуск сервисов
- Как NameServer и Broker запускаются одновременно
[root@dev /soft/rocketmq]# cd /etc/init.d/
[root@dev /etc/init.d]# vi rocketmq
#!/bin/sh
# chkconfig: 345 85 15
# description: service for rocketmq 4.6.0
# processname: rocketmq
ROCKETMQ_DIR="/soft/rocketmq"
case "$1" in
start)
echo "Starting RocketMQ Server"
# 标准和错误信息不输出
nohup sh $ROCKETMQ_DIR/bin/mqnamesrv >/dev/null 2>&1 &
echo "The Name Server boot success..."
nohup sh $ROCKETMQ_DIR/bin/mqbroker -c $ROCKETMQ_DIR/conf/broker.conf >/dev/null 2>&1 &
echo "The Broker boot success..."
echo "RocketMQ started"
;;
stop)
echo "Stopping RocketMQ Server"
sh $ROCKETMQ_DIR/bin/mqshutdown broker
sleep 1
sh $ROCKETMQ_DIR/bin/mqshutdown namesrv
echo "RocketMQ stoped!"
;;
restart)
echo "Restarting RocketMQ Server"
$0 stop
sleep 5
$0 start
;;
*)
echo "Usage:$0 {start|stop|restart}"
exit 1
esac
执行保存: Esc :wq
[root@dev /etc/init.d]# chmod 755 rocketmq
[root@dev /etc/init.d]# chkconfig --add rocketmq
[root@dev /etc/init.d]# chkconfig rocketmq on
Другие связанные команды:
- Запуск: запуск службы RocketMQ
- Остановка: остановка службы RocketMQ
- Перезапуск: перезапуск службы RocketMQ
- Отключить автозапуск: chkconfig RocketMQ выключен
- Удалить автозапуск: chkconfig --del RocketMQ
- Показать все текущие процессы Java: jps
- Как NameServer и Broker запускаются отдельно
NameServer
[root@dev /soft/rocketmq]# cd /etc/init.d/
[root@dev /etc/init.d]# vi rocketmq-nameserver-a
#!/bin/sh
# chkconfig: 345 85 15
# description: service for rocketmq 4.6.0
# processname: rocketmq-nameserver-a
ROCKETMQ_DIR="/soft/rocketmq"
case "$1" in
start)
echo "Starting RocketMQ NameServer"
nohup sh $ROCKETMQ_DIR/bin/mqnamesrv -c /root/rocketmq/cluster/nameserver-a.properties >/dev/null 2>&1 &
echo "RocketMQ NameServer started"
;;
stop)
echo "Stopping RocketMQ NameServer"
sh $ROCKETMQ_DIR/bin/mqshutdown namesrv
echo "RocketMQ NameServer stoped!"
;;
restart)
echo "Restarting RocketMQ NameServer"
$0 stop
sleep 5
$0 start
;;
*)
echo "Usage:$0 {start|stop|restart}"
exit 1
esac
执行保存: Esc :wq
[root@dev /etc/init.d]# chmod 755 rocketmq-nameserver-a
[root@dev /etc/init.d]# chkconfig --add rocketmq-nameserver-a
[root@dev /etc/init.d]# chkconfig rocketmq-nameserver-a on
Broker
[root@dev /soft/rocketmq]# cd /etc/init.d/
[root@dev /etc/init.d]# vi rocketmq-broker-a
#!/bin/sh
# chkconfig: 345 85 15
# description: service for rocketmq 4.6.0
# processname: rocketmq-broker-a
ROCKETMQ_DIR="/soft/rocketmq"
case "$1" in
start)
echo "Starting RocketMQ Broker"
nohup sh $ROCKETMQ_DIR/bin/mqbroker -c /root/rocketmq/cluster/broker-a.properties >/dev/null 2>&1 &
echo "RocketMQ Broker started"
;;
stop)
echo "Stopping RocketMQ Broker"
sh $ROCKETMQ_DIR/bin/mqshutdown broker
echo "RocketMQ Broker stoped!"
;;
restart)
echo "Restarting RocketMQ Broker"
$0 stop
sleep 5
$0 start
;;
*)
echo "Usage:$0 {start|stop|restart}"
exit 1
esac
执行保存: Esc :wq
[root@dev /etc/init.d]# chmod 755 rocketmq-broker-a
[root@dev /etc/init.d]# chkconfig --add rocketmq-broker-a
[root@dev /etc/init.d]# chkconfig rocketmq-broker-a on
Если на одной платформе установлено несколько узлов, сценарий остановки остановит все узлы одного типа. Если вы хотите завершить работу отдельно, вам необходимо расширить некоторые из наших пользовательских сценариев завершения работы на основе официальных сценариев. (Не по теме, по скрипту можно догадаться, что официалы не рекомендуют разворачивать несколько нод на одной машине)
Здесь в основном поставить сценарий в оригиналеgrep java
, заменяетсяgrep $2.properties
[root@dev /soft/rocketmq/bin]# cp mqshutdown mqshutdownsingle
[root@dev /soft/rocketmq/bin]# vi mqshutdownsingle
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
case $1 in
broker)
pid=`ps ax | grep -i 'org.apache.rocketmq.broker.BrokerStartup' |grep $2.properties | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No mqbroker running."
exit -1;
fi
echo "The mqbroker(${pid}) is running..."
kill ${pid}
echo "Send shutdown request to mqbroker(${pid}) OK"
;;
namesrv)
pid=`ps ax | grep -i 'org.apache.rocketmq.namesrv.NamesrvStartup' |grep $2.properties | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No mqnamesrv running."
exit -1;
fi
echo "The mqnamesrv(${pid}) is running..."
kill ${pid}
echo "Send shutdown request to mqnamesrv(${pid}) OK"
;;
*)
echo "Useage: mqshutdown broker | namesrv"
esac
执行保存: Esc :wq
Скрипт остановки добавляет параметр, указывающий имя узла
[root@dev /soft/rocketmq]# mqshutdownsingle namesrv nameserver-a
[root@dev /soft/rocketmq]# mqshutdownsingle broker broker-a
7. Расширенный контент
1. Параметры конфигурации брокера просто отсортированы (или напрямую из исходного кода)
Параметры хранилища сообщений (имя исходного класса MessageStoreConfig) | имя ключа | ключ/описание |
maxMessageSize | Максимальный размер сообщения, по умолчанию 1024*1024*4 (4M), единица измерения - байт B | |
mappedFileSizeCommitLog | CommitLog размер каждого файла, по умолчанию 1024*1024*10241 (1G), единица измерения байт B | |
mappedFileSizeConsumeQueue | Количество строк хранилища по умолчанию на файл в ConsumeQueue, по умолчанию 300000*20 (30 Вт), 20 — размер единицы хранилища. | |
flushIntervalConsumeQueue | Интервал обновления ConsumeQueue, по умолчанию 1000, в миллисекундах |
2. Думать о том, чтобы не потерять сообщение
Без потери сообщений и с учетом производительности вывод я думаю таков:
-
Мастер должен выбрать синхронную очистку диска (flushDiskType=SYNC_FLUSH), чтобы сообщение попало на жесткий диск.
-
Вы можете выбрать асинхронную репликацию (brokerRole=ASYNC_MASTER) для ведущего устройства для синхронизации данных ведомого устройства, но ведущее устройство должно соответствовать как минимум одному или нескольким ведомым устройствам (лучше трем или более), чтобы обеспечить успешное резервное копирование хотя бы одного ведомого устройства.
-
Режим ведомой очистки можно считать асинхронной очисткой, в конце концов, он в основном используется для резервного копирования, и есть несколько ведомых братьев. С синхронизацией это кажется пустой тратой производительности.
Но теория принадлежит теории, здесь полностью основана на опыте и воображении. Если вы хотите понять это, вам нужно больше читать исходный код и больше реальных боев, прежде чем вы сможете улучшать и сражаться с монстрами.
3.mqadmin команда
- Использование команды запроса
-
Посмотреть все инструкции
[root@dev ~]# mqadmin The most commonly used mqadmin commands are: updateTopic Update or create topic deleteTopic Delete topic from broker and NameServer. updateSubGroup Update or create subscription group deleteSubGroup Delete subscription group from broker. updateBrokerConfig Update broker's config ......
-
Проверьте использование каждой инструкции, возьмите в качестве примера updateTopic (используемые параметры должны быть хорошо понятны)
[root@dev ~]# mqadmin help updateTopic usage: mqadmin updateTopic -b <arg> | -c <arg> [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>] -t <arg> [-u <arg>] [-w <arg>] -b,--brokerAddr <arg> create topic to which broker -c,--clusterName <arg> create topic to which cluster -h,--help Print help -n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876 -o,--order <arg> set topic's order(true|false) -p,--perm <arg> set topic's permission(2|4|6), intro[2:W 4:R; 6:RW] -r,--readQueueNums <arg> set read queue nums -s,--hasUnitSub <arg> has unit sub (true|false) -t,--topic <arg> topic name -u,--unit <arg> is unit topic (true|false) -w,--writeQueueNums <arg> set write queue nums
- Меморандум общих инструкций
# 创建消息主题。主要就是CNT,BNT。。。
# 为什么用命令创建?还是建议禁止开启自动创建主题的功能,以防项目中开发随意创建主题,导致最终维护困难。
# 通过指定集群的方式
[root@dev ~]# mqadmin updateTopic -c DefaultCluster -n localhost:9876 -t xx-topic
# 通过指定broker的方式
[root@dev ~]# mqadmin updateTopic -b localhost:10911 -n localhost:9876 -t xx-topic
# 删除主题
[root@dev ~]# mqadmin deleteTopic -c DefaultCluster -n localhost:9876 -t xx-topic
# 查看主题
[root@dev ~]# mqadmin topicRoute -n localhost:9876 -t xx-topic