Впервые опубликовано в моем блоге:www.liutf.com/
Первая ссылка:ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.
задний план
Поскольку промежуточное программное обеспечение сообщений RocketMQ, используемое в компании, представляет собой единый экземпляр, с развитием бизнеса все больше и больше приложений подключаются к одному и тому же промежуточному программному обеспечению, и связь становится слишком сильной. Я также чувствую себя все более и более беспокойным и беспокойным. Я боюсь, что когда он однажды рухнет, это повлияет на все предприятия. Для высокой доступности компонентов было принято решение построить новый кластер, а бизнес будет постепенно мигрировать.
Версия, используемая в настоящее время в производстве: v3.2, и версия на тот момент все еще принадлежит Али.
новая установкаОфициальный сайтновыйv4.2.0
, ныне принадлежащийApache
.
Схема архитектуры сети кластера
Введение в сервер имен
Как следует из названия, NameServer определенно является службой именования и управления службами в системе, и его функция должна быть аналогична zookeeper.Говорят, что ранняя версия RocketMq действительно использовала zookeeper, а позже была изменена на NameServer, реализованный сам по себе.
Две основные роли NameServer в RocketMQ:
NameServer поддерживает список адресов брокера, и брокер зарегистрируется на NameServer при его запуске и будет поддерживать состояние выживания брокера.
NameServer поддерживает список адресов Topic и очередей, соответствующих Topic, и брокер будет передавать информацию о Topic каждый раз, когда отправляет пульс.
Стабильность NameServer очень высока. Есть две причины:
- Серверы имен независимы друг от друга и не имеют связи друг с другом.Отказ одного сервера имен не влияет на другие серверы имен.Даже если все они выходят из строя, это не влияет на использование бизнес-системы. нет статуса.
- У NameServer не будет частых операций чтения и записи, поэтому потери производительности очень малы, а стабильность высока.
Знакомство с брокером
Брокер — это основной модуль для приема и обработки сообщений. Этот модуль используется для получения сообщений, отправленных производителями и потребителями.
Связь с NameServer
соединять
Один брокер поддерживает длительное соединение со всеми серверами имен.
сердцебиение
- Интервал пульса: отправка пульсаций всем серверам имен каждые 30 секунд (это время нельзя изменить).Пульс содержит информацию о конфигурации собственной темы.
- Тайм-аут пульса: DNS-сервер сканирует все уцелевшие соединения брокера каждые 10 секунд (это время изменить нельзя). Отправьте данные пульса, затем отключитесь.
Отключить
Время: брокер зависает; тайм-аут пульса заставляет сервер имен активно закрывать соединение.
Действие: как только соединение будет разорвано, сервер имен немедленно обнаружит и обновит соответствие между топсом и очередью, но не будет уведомлять производителей и потребителей.
балансировки нагрузки
- Тема распределяется по нескольким брокерам, и брокер может быть настроен с несколькими темами, которые находятся в отношениях «многие ко многим».
- Если в топике большое количество сообщений, следует настроить для него еще несколько очередей и максимально распределить их по разным брокерам, чтобы снизить нагрузку на брокера.
- Когда объем сообщений темы относительно однороден, чем больше очередей у брокера, тем больше нагрузка на брокера.
Введение в кластер
-
один мастер
Этот метод является рискованным: после перезагрузки или выхода из строя брокера весь сервис будет недоступен, поэтому не рекомендуется использовать его в онлайн-среде.
-
Режим нескольких мастеров
В кластере нет подчиненных устройств, но есть все ведущие, например, 2 ведущих или 3 ведущих.
преимущество:
Конфигурация простая, простои или перезапуски одного Мастера никак не влияют на работу приложения, диск настраивается как
В случае RAID10, даже если машина не работает и не может быть восстановлена, то же самое
Диск очень надежен, и сообщения не будут потеряны (несколько сообщений теряются при асинхронной очистке и одно не теряется при синхронной очистке). Высочайшая производительность.
недостаток:
Во время простоя одной машины на неиспользованные сообщения на этой машине нельзя подписаться, пока машина не будет восстановлена, и это повлияет на характер сообщений в реальном времени.
Стартовые шаги:
Сначала запустите NameServer
На машине А запустите первый Мастер
На машине B запустите второй Мастер
-
Режим Multi-Master multi-slave, синхронная очистка
Каждый ведущий настроен с одним ведомым устройством, и существует несколько пар ведущий-ведомый.Высокая доступность использует синхронный метод двойной записи.И ведущий, и ведомый успешно записывают и возвращают успех приложению.
преимущество:
Единой точки для данных и сервисов нет, когда Master не работает, задержки в сообщениях нет, а доступность как сервисов, так и данных очень высока.
недостаток:
Производительность немного ниже, чем в режиме асинхронной репликации, примерно на 10% ниже, а RT для отправки одиночного сообщения будет немного выше. В настоящее время после выхода из строя основной машины резервная машина не может автоматически переключаться на основную машину, и функция автоматического переключения будет поддерживаться в будущем.
Стартовые шаги:
Сначала запустите NameServer
На машине А запустите первый Мастер
На машине B запустите второй Мастер
На машине C запустите первый ведомый
На машине D запустите второй ведомый
Вышеуказанные Broker и Slave объединяются путем указания одного и того же параметра BrokerName.BrokerId Master должен быть равен 0, а BrokerId Slave должен быть числом больше 0. Несколько ведомых устройств могут быть смонтированы под другим мастером, а несколько ведомых устройств под одним и тем же мастером можно отличить, указав разные идентификаторы BrokerId.
-
Режим Multi-Master-Multi-Slave, асинхронное обновление
Каждый мастер настроен с одним ведомым, и есть несколько пар ведущий-ведомый.Высокая доступность принимает метод асинхронной репликации, а главный и резервный имеют короткую задержку сообщений, которая составляет миллисекунды.
преимущество:
Даже если диск поврежден, очень мало сообщений теряется, и сообщения в режиме реального времени не затрагиваются, потому что
После выхода из строя ведущего потребители все еще могут получать данные от ведомого устройства, и этот процесс прозрачен для приложения. Вмешательство человека не требуется. Производительность почти такая же, как и в режиме multi-Master.
недостаток:
Если мастер не работает, диск поврежден, и небольшое количество сообщений будет потеряно.
Стартовые шаги:
Сначала запустите NameServer
На машине А запустите первый Мастер
На машине B запустите второй Мастер
На машине C запустите первый ведомый
На машине D запустите второй ведомый
Кластерная конструкция
Подводя итог нескольким методам кластеризации, я выбираю多Master多Slave,异步刷盘
план.
Подготовка окружающей среды
- информация о хосте
IP | Примечание |
---|---|
10.10.10.31 | slave-b&namesrv |
10.10.10.43 | slave-a&namesrv |
10.10.10.44 | master-a&namesrv |
10.10.10.45 | master-b&namesrv |
Все 4 хоста запустили службу namesrv для формирования кластера namesrv.
Две машины 44 и 45 являются соответственно ведущими-а и ведущими-b.
43 и 31 — ведомый-a и ведомый-b соответственно.
Требования к конфигурации
аппаратное обеспечение:
12G+ памяти (брокер по умолчанию выделяет 8G, namedrv по умолчанию выделяет 4G, что можно настроить самостоятельно)
программное обеспечение:
- 64bit OS, Linux/Unix/Mac is recommended;
- 64bit JDK 1.8+;
- Maven 3.2.x (не обязательно)
- Гит (не обязательно)
Официально построен
-
Сначала создайте автономную среду, см.Автономное официальное руководство по быстрому запуску. Пусть каждая автономная машина работает и знакомится с основными командными операциями.
-
После успешной сборки каждой отдельной машины мы приступаем к настройке кластера. Ядром кластера является конфигурация каждого файла конфигурации.
-
Перейдите в каталог файла конфигурации
/home/rocket/apache-rocketmq/conf
. Здесь я использую одну из машинrocket-master-b
Пример.
Введение в каталог
- 2m-noslave: Мультимастер режим
- 2m-2s-sync: режим Multi-Master-Multi-Slave, синхронная двойная запись
- 2m-2s-async: режим Multi-Master-Multi-Slave, асинхронная репликация
я выбираю
多Master多Slave,异步刷盘
путь, введите2m-2s-async
каталог для настройки.[rocket@rocket-master-b conf]$ cd 2m-2s-async/ [rocket@rocket-master-b 2m-2s-async]$ ls broker-a.properties broker-a-s.properties broker-b.properties broker-b-s.properties
Здесь вы можете видеть, что по умолчанию есть 4 файла, на что мы и обращаем внимание.
-
Измените каждый файл конфигурации
-
broker-a.properties
# 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. # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所属集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a # 0 表示 Master,>0 表示 Slave brokerId=0 # 删除文件时间点,默认凌晨4点。24小时制,单位小时 deleteWhen=04 # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # Broker 对外服务的监听端口 listenPort=10911 # nameServer地址,分号分割 namesrvAddr=10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。 brokerIP1=10.10.10.45 # commitLog 存储路径 storePathCommitLog=/home/rocket/app/rocketmq/store/commitlog # 消费队列存储路径存储路径 storePathConsumerQueue=/home/rocket/app/rocketmq/store/consumequeue # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 异步复制Master # - SYNC_MASTER 同步双写Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盘方式 # - ASYNC_FLUSH 异步刷盘 # - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
-
broker-a-s.properties
# 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. # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所属集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a # 0 表示 Master,>0 表示 Slave brokerId=1 # 删除文件时间点,默认凌晨4点。24小时制,单位小时 deleteWhen=04 # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # Broker 对外服务的监听端口 listenPort=10911 # nameServer地址,分号分割 namesrvAddr=10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。 brokerIP1=10.10.10.44 # commitLog 存储路径 storePathCommitLog=/home/rocket/app/rocketmq-slave/store/commitlog # 消费队列存储路径存储路径 storePathConsumerQueue=/home/rocket/app/rocketmq-slave/store/consumequeue # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 异步复制Master # - SYNC_MASTER 同步双写Master # - SLAVE brokerRole=SLAVE # 刷盘方式 # - ASYNC_FLUSH 异步刷盘 # - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
-
broker-b.properties
# 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. # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所属集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b # 0 表示 Master,>0 表示 Slave brokerId=0 # 删除文件时间点,默认凌晨4点。24小时制,单位小时 deleteWhen=04 # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # Broker 对外服务的监听端口 listenPort=10921 # nameServer地址,分号分割 namesrvAddr=10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。 brokerIP1=10.10.10.46 # commitLog 存储路径 storePathCommitLog=/home/rocket/app/rocketmq/store/commitlog # 消费队列存储路径存储路径 storePathConsumerQueue=/home/rocket/app/rocketmq/store/consumequeue # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 异步复制Master # - SYNC_MASTER 同步双写Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盘方式 # - ASYNC_FLUSH 异步刷盘 # - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
-
broker-b-s.properties
# 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. # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所属集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b # 0 表示 Master,>0 表示 Slave brokerId=1 # 删除文件时间点,默认凌晨4点。24小时制,单位小时 deleteWhen=04 # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # Broker 对外服务的监听端口 listenPort=10921 # nameServer地址,分号分割 namesrvAddr=10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。 brokerIP1=10.10.10.31 # commitLog 存储路径 storePathCommitLog=/home/persiancat/rocketmq-slave-p/app/rocketmq-slave/store/commitlog # 消费队列存储路径存储路径 storePathConsumerQueue=/home/persiancat/rocketmq-slave-p/app/rocketmq-slave/store/consumequeue # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 异步复制Master # - SYNC_MASTER 同步双写Master # - SLAVE brokerRole=SLAVE # 刷盘方式 # - ASYNC_FLUSH 异步刷盘 # - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
Основные инструкции по настройке
- BrokerClusterName: в том же кластере BrokerClusterName должен быть непротиворечивым.
- BrokerId: 0 означает Master, >0 означает Slave
- namesrvAddr: настроить несколько, разделенных точкой с запятой
- BrokerIP1: Система по умолчанию распознает автоматически, но некоторые машины с несколькими сетевыми картами могут иметь ошибки распознавания, рекомендуется указывать их вручную.
- BrokerRole: выберите роль брокера
- flushDiskType: выберите метод очистки
-
запускать
После того, как конфигурационный файл настроен, запускаем загрузку.
# 进入rocketmq根目录
cd /home/rocket/apache-rocketmq
# 后台执行bin目录文件夹下mqnamesrv服务
nohup sh bin/mqnamesrv &
# broker-a机器下执行broker-a.properties文件启动
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties -n "10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876" &
# broker-b机器下执行broker-b.properties文件启动
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties -n "10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876" &
# broker-a-s机器下执行broker-a-s.properties文件启动
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties -n "10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876" &
# broker-b-s机器下执行broker-b-s.properties文件启动
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties -n "10.10.10.44:9876;10.10.10.45:9876;10.10.10.46:9876;10.10.10.31:9876" &
Меры предосторожности
- Обратите внимание на брандмауэр, вы можете отключить брандмауэр в начале строительства. После этого откройте брандмауэр и настройте соответствующий порт.
Консоль RocketMQ
- Официальная загрузка: https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console