Создание кластера RocketMQ — версия 4.2.0

задняя часть Linux Apache ZooKeeper

Впервые опубликовано в моем блоге:www.liutf.com/
Первая ссылка:ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.

задний план

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

Версия, используемая в настоящее время в производстве: v3.2, и версия на тот момент все еще принадлежит Али.

новая установкаОфициальный сайтновыйv4.2.0, ныне принадлежащийApache.

Схема архитектуры сети кластера

Введение в сервер имен

Как следует из названия, NameServer определенно является службой именования и управления службами в системе, и его функция должна быть аналогична zookeeper.Говорят, что ранняя версия RocketMq действительно использовала zookeeper, а позже была изменена на NameServer, реализованный сам по себе.

Две основные роли NameServer в RocketMQ:

  • NameServer поддерживает список адресов брокера, и брокер зарегистрируется на NameServer при его запуске и будет поддерживать состояние выживания брокера.

  • NameServer поддерживает список адресов Topic и очередей, соответствующих Topic, и брокер будет передавать информацию о Topic каждый раз, когда отправляет пульс.

Стабильность NameServer очень высока. Есть две причины:

  1. Серверы имен независимы друг от друга и не имеют связи друг с другом.Отказ одного сервера имен не влияет на другие серверы имен.Даже если все они выходят из строя, это не влияет на использование бизнес-системы. нет статуса.
  2. У NameServer не будет частых операций чтения и записи, поэтому потери производительности очень малы, а стабильность высока.

Знакомство с брокером

Брокер — это основной модуль для приема и обработки сообщений. Этот модуль используется для получения сообщений, отправленных производителями и потребителями.

Связь с NameServer

  • соединять

    Один брокер поддерживает длительное соединение со всеми серверами имен.

  • сердцебиение

    • Интервал пульса: отправка пульсаций всем серверам имен каждые 30 секунд (это время нельзя изменить).Пульс содержит информацию о конфигурации собственной темы.
    • Тайм-аут пульса: DNS-сервер сканирует все уцелевшие соединения брокера каждые 10 секунд (это время изменить нельзя). Отправьте данные пульса, затем отключитесь.
  • Отключить

  • Время: брокер зависает; тайм-аут пульса заставляет сервер имен активно закрывать соединение.

  • Действие: как только соединение будет разорвано, сервер имен немедленно обнаружит и обновит соответствие между топсом и очередью, но не будет уведомлять производителей и потребителей.

балансировки нагрузки

  • Тема распределяется по нескольким брокерам, и брокер может быть настроен с несколькими темами, которые находятся в отношениях «многие ко многим».
  • Если в топике большое количество сообщений, следует настроить для него еще несколько очередей и максимально распределить их по разным брокерам, чтобы снизить нагрузку на брокера.
  • Когда объем сообщений темы относительно однороден, чем больше очередей у ​​брокера, тем больше нагрузка на брокера.

Введение в кластер

  1. один мастер

    Этот метод является рискованным: после перезагрузки или выхода из строя брокера весь сервис будет недоступен, поэтому не рекомендуется использовать его в онлайн-среде.

  2. Режим нескольких мастеров

    В кластере нет подчиненных устройств, но есть все ведущие, например, 2 ведущих или 3 ведущих.

    преимущество:

    Конфигурация простая, простои или перезапуски одного Мастера никак не влияют на работу приложения, диск настраивается как

    В случае RAID10, даже если машина не работает и не может быть восстановлена, то же самое

    Диск очень надежен, и сообщения не будут потеряны (несколько сообщений теряются при асинхронной очистке и одно не теряется при синхронной очистке). Высочайшая производительность.

    недостаток:

    Во время простоя одной машины на неиспользованные сообщения на этой машине нельзя подписаться, пока машина не будет восстановлена, и это повлияет на характер сообщений в реальном времени.

    Стартовые шаги:

    Сначала запустите NameServer

    На машине А запустите первый Мастер

    На машине B запустите второй Мастер

  3. Режим Multi-Master multi-slave, синхронная очистка

    Каждый ведущий настроен с одним ведомым устройством, и существует несколько пар ведущий-ведомый.Высокая доступность использует синхронный метод двойной записи.И ведущий, и ведомый успешно записывают и возвращают успех приложению.

    преимущество:

    Единой точки для данных и сервисов нет, когда Master не работает, задержки в сообщениях нет, а доступность как сервисов, так и данных очень высока.

    недостаток:

    Производительность немного ниже, чем в режиме асинхронной репликации, примерно на 10% ниже, а RT для отправки одиночного сообщения будет немного выше. В настоящее время после выхода из строя основной машины резервная машина не может автоматически переключаться на основную машину, и функция автоматического переключения будет поддерживаться в будущем.

    Стартовые шаги:

    Сначала запустите NameServer

    На машине А запустите первый Мастер

    На машине B запустите второй Мастер

    На машине C запустите первый ведомый

    На машине D запустите второй ведомый

    Вышеуказанные Broker и Slave объединяются путем указания одного и того же параметра BrokerName.BrokerId Master должен быть равен 0, а BrokerId Slave должен быть числом больше 0. Несколько ведомых устройств могут быть смонтированы под другим мастером, а несколько ведомых устройств под одним и тем же мастером можно отличить, указав разные идентификаторы BrokerId.

  4. Режим 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, что можно настроить самостоятельно)

программное обеспечение:

  1. 64bit OS, Linux/Unix/Mac is recommended;
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x (не обязательно)
  4. Гит (не обязательно)

Официально построен

  1. Сначала создайте автономную среду, см.Автономное официальное руководство по быстрому запуску. Пусть каждая автономная машина работает и знакомится с основными командными операциями.

  2. После успешной сборки каждой отдельной машины мы приступаем к настройке кластера. Ядром кластера является конфигурация каждого файла конфигурации.

  3. Перейдите в каталог файла конфигурации/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 файла, на что мы и обращаем внимание.

  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