Кластеризация RabbitMQ на CentOS 7

RabbitMQ - это брокер сообщений с открытым исходным кодом, который поддерживает AMQP, STOMP и другие коммуникационные технологии. Он широко используется в корпоративных приложениях и современных архитектурах микросервисов, где он выступает в качестве асинхронного канала передачи сообщений между разными микросервисами. В этом руководстве будет описано, как можно кластеризовать RabbitMQ на нескольких серверах CentOS 7 для формирования брокера сообщений высокой доступности. В этом руководстве один сервер будет действовать как главный сервер, а другие серверы будут действовать как зеркальные серверы в случае, если главный сервер станет недоступным.

Предпосылки

Настройте брандмауэр

Брандмауэр CentOS ( firewalld) по умолчанию не разрешает входящий трафик. Чтобы сделать RabbitMQ доступным для других систем в сети и за ее пределами, и чтобы мы могли получить доступ к консоли управления, мы должны сначала открыть некоторые порты.

Консоль управления веб-интерфейсом RabbitMQ по умолчанию прослушивает порт 15672. Мы хотели бы сделать консоль управления общедоступной, чтобы иметь к ней доступ с нашего компьютера. Поэтому мы дадим указание firewalldпостоянно открывать порт 15672в публичной зоне (которая является активной и активной зоной в экземпляре Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Узлы RabbitMQ должны иметь возможность общаться друг с другом. Мы хотели бы открыть необходимые порты, но только через внутреннюю сеть. Мы не хотим, чтобы кто-либо в Интернете мог администрировать или напрямую связываться с нашими серверами. Следующие команды предполагают, что наши серверы находятся в 192.168.0.100/24подсети.

Первая служба - это epmdслужба обнаружения пиров, которая по умолчанию прослушивает порт 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Для междоузлия и CLI связи, RabbitMQ должен быть в состоянии общаться через порт 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

Инструменты CLI взаимодействуют через диапазон портов 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Если вашим приложениям нужен протокол AMQP, вам также необходимо открыть порты 5671и 5672. Если вам нужно иметь возможность общаться по другому протоколу, вы можете найти необходимую информацию о сетевых требованиях RabbitMQ в официальной документации RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Теперь, когда firewalldэто настроено, нам нужно дать ему команду перезагрузить конфигурацию.

sudo firewall-cmd --reload

Повторите шаги из этого раздела на всех серверах.

устанавливать rabbitmqadmin

Плагин управления поставляется с инструментом Python, rabbitmqadminкоторый можно легко установить в системе после включения плагина управления.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Настроить DNS

Вы должны использовать имена хостов сервера для идентификации серверов при кластеризации. По умолчанию серверам не назначена запись DNS, и соединение не будет установлено. Чтобы быстро преодолеть это, добавьте имя главного и зеркального хоста в /etc/hostsфайл, используя ваш любимый редактор.

Например, файл hosts вашего мастера может выглядеть следующим образом. Обратите внимание на последние две записи, которые позволяют серверам идентифицировать друг друга по имени хоста. Обязательно измените IP-адреса на свои.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Кластер узлов

Обязательным условием импорта, позволяющим узлам соединяться друг с другом, является то, что файл cookie Erlang всех узлов идентичен. По умолчанию каждому узлу будет присвоен уникальный файл cookie Erlang, поэтому вы должны перенастроить его на всех узлах.

Следующая команда установит для файла cookie Erlang значение « WE<3COOKIES», но вы можете сменить его по своему вкусу. Сделайте это на всех серверах.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Перезапустите RabbitMQ на всех серверах, чтобы убедиться, что файл cookie Erlang правильно загружен.

sudo systemctl restart rabbitmq-server.service

Выполните следующие команды на всех серверах, кроме главного. Это позволит узлам присоединиться к главному серверу и сформировать кластер.

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Убедитесь, что узлы присоединились к кластеру, выполнив следующую команду.

sudo rabbitmqctl cluster_status

Все ваши узлы будут отображаться в nodesи running_nodesразделе продукции. Отныне вам больше не нужно повторять шаги на каждом сервере, конфигурация будет автоматически отражаться на других узлах.

Создать политику высокой доступности

Теперь, когда у нас есть кластер узлов RabbitMQ, мы можем использовать это для создания очередей и обменов высокой доступности путем настройки новой политики. Эту политику можно добавить через консоль управления RabbitMQ или с помощью интерфейса командной строки.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

Следующий список объяснит, что означает каждая часть команды.

  • -p "/": Используйте эту политику на "/"vhost (по умолчанию после установки)
  • --priority 1: Порядок применения политик
  • --apply-to "all": Может быть "queues", "exchanges"или"all"
  • ha: Название, которое мы даем нашей политике
  • ".*": Регулярное выражение, которое используется для определения того, к каким очередям или обменам применяется эта политика. ".*"будет соответствовать чему угодно
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Представление политики в формате JSON. Этот документ описывает, что мы хотим - ровно 2 узла, на которых данные автоматически синхронизируются

Короче говоря, эта политика гарантирует, что у нас всегда будет 2 копии данных в очереди или при обмене, если у нас есть хотя бы 2 узла. Если у вас есть больше узлов, вы можете увеличить значение ha-params. Рекомендуется кворум ( N/2 + 1) узлов. Наличие большего количества копий ваших данных приведет к увеличению использования диска, ввода-вывода и сети, что может привести к снижению производительности.

Если вы хотите отразить данные на всех узлах кластера, вы можете использовать следующий документ JSON.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Если вы хотите отразить данные только для определенных узлов (например: node-1и node-2), вы можете использовать следующее.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Вы можете изменить регулярное выражение для назначения разных политик разным очередям. Скажем, у нас есть следующие три узла:

  • кролик @ мастер
  • кролик @ клиент-ха
  • кролик @ продукт-ха

Затем мы можем создать две политики, которые приведут к тому, что очереди с именем, начинающимся с «клиента», будут зеркально отображаться на rabbit@client-haузле, а все очереди с именем, начинающимся с «продукта», будут зеркально отображаться на rabbit@product-haузле.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

Небольшое замечание: исключительные очереди никогда не отражаются и не являются долговечными в RabbitMQ, даже если эта политика будет соответствовать таким очередям. Исключительные очереди автоматически уничтожаются, когда клиент отключается, и, следовательно, будет бесполезно копировать его на другой сервер. В случае сбоя сервера клиент отключится от него, и очередь будет автоматически уничтожена. Зеркальные экземпляры также будут уничтожены.

Тестирование настройки

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

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Это создаст долговременную очередь на /vhost по умолчанию с именем my-ha-queue.

Выполните следующую команду и убедитесь в том, что для очереди назначена наша политика 'ha' и pid на главном и зеркальном узле.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Теперь мы можем опубликовать сообщение в очередь от главного узла и остановить RabbitMQ на главном узле.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

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

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Наконец, мы можем перезапустить наш главный узел.

sudo systemctl start rabbitmq-server.service

Удалить гостевого пользователя

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

sudo rabbitmqctl delete_user guest


Leave a Comment

Как установить Anchor CMS на CentOS 7 LAMP VPS

Как установить Anchor CMS на CentOS 7 LAMP VPS

Используете другую систему? Anchor CMS - это сверхпростая и чрезвычайно легкая бесплатная система управления контентом (CMS) с открытым исходным кодом.

Как обновить CentOS 7, Ubuntu 16.04 и Debian 8

Как обновить CentOS 7, Ubuntu 16.04 и Debian 8

При настройке нового сервера Linux рекомендуется обновить ядро ​​системы и другие пакеты до последней стабильной версии. В этой статье

Как установить Backdrop CMS 1.8.0 на CentOS 7 LAMP VPS

Как установить Backdrop CMS 1.8.0 на CentOS 7 LAMP VPS

Используете другую систему? Backdrop CMS 1.8.0 - это простая и гибкая, удобная для мобильных устройств, бесплатная система с открытым исходным кодом (CMS), которая позволяет нам

Настройте Magento на CentOS 6

Настройте Magento на CentOS 6

Если вы хотите разместить свой инвентарь в Интернете или просто магазин технических аксессуаров, Magento - отличное решение для электронной коммерции в Интернете. Это статья

Как установить AirSonic на CentOS 7

Как установить AirSonic на CentOS 7

Используете другую систему? AirSonic - это бесплатный и потоковый сервер с открытым исходным кодом. В этом уроке я проведу вас через процесс развертывания

Как установить OrangeScrum на CentOS 7

Как установить OrangeScrum на CentOS 7

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

Как установить и настроить OrientDB Community Edition для CentOS 7

Как установить и настроить OrientDB Community Edition для CentOS 7

OrientDB - это мультимодельная СУБД NoSQL с открытым исходным кодом нового поколения. Благодаря поддержке нескольких моделей данных OrientDB может обеспечить большую функциональность и гибкость в

Как установить Vtiger CRM с открытым исходным кодом на CentOS 7

Как установить Vtiger CRM с открытым исходным кодом на CentOS 7

Vtiger CRM - это популярное приложение для управления взаимоотношениями с клиентами, которое может помочь предприятиям увеличить продажи, обеспечить обслуживание клиентов и увеличить прибыль. я

Как установить MaraDNS на CentOS 6

Как установить MaraDNS на CentOS 6

MaraDNS - это легкая, но надежная программа с открытым исходным кодом для DNS-сервера. По сравнению с другими приложениями того же типа, такими как ISC BIND, PowerDNS и djbdns

Установка Netdata в CentOS 7

Установка Netdata в CentOS 7

Используете другую систему? Netdata - восходящая звезда в области мониторинга показателей системы в режиме реального времени. По сравнению с другими инструментами того же рода, Netdata:

Как установить Starbound Server в CentOS 7

Как установить Starbound Server в CentOS 7

Используете другую систему? В этом уроке я расскажу, как настроить сервер Starbound в CentOS 7. Предварительные условия Вы должны иметь эту игру на себе

Настройка многопользовательского сервера SA-MP San Andreas на CentOS 6

Настройка многопользовательского сервера SA-MP San Andreas на CentOS 6

Добро пожаловать в другой учебник Vultr. Здесь вы узнаете, как установить и запустить сервер SAMP. Это руководство было написано для CentOS 6. Предварительные условия

Установите Elgg на CentOS 7

Установите Elgg на CentOS 7

Используете другую систему? Elgg - это движок социальных сетей с открытым исходным кодом, который позволяет создавать социальные среды, такие как социальные сети кампуса и

Установка Bolt CMS на CentOS 7

Установка Bolt CMS на CentOS 7

Bolt - это CMS с открытым исходным кодом, написанная на PHP. Исходный код Bolts размещен на GitHub. Это руководство покажет вам, как установить Bolt CMS на новую CentOS 7 Vult.

Как установить и использовать Apache PredictionIO для машинного обучения в CentOS 7

Как установить и использовать Apache PredictionIO для машинного обучения в CentOS 7

Традиционные подходы к анализу данных невозможно использовать, когда наборы данных достигают определенного размера. Современная альтернатива анализу огромных массивов данных, которые я

Как установить Elasticsearch на экземпляре Vultr CentOS 7 Server

Как установить Elasticsearch на экземпляре Vultr CentOS 7 Server

Elasticsearch - популярный движок полнотекстового поиска и аналитики с открытым исходным кодом. Благодаря своей универсальности, масштабируемости и простоте использования, Elasticsearch широко используется

Развертывание Kubernetes с помощью Kubeadm на CentOS 7

Развертывание Kubernetes с помощью Kubeadm на CentOS 7

Обзор Эта статья призвана помочь вам в кратчайшие сроки запустить и запустить кластер Kubernetes с помощью kubeadm. Это руководство будет развертывать два сервера, на

Настройте Sails.js для разработки на CentOS 7

Настройте Sails.js для разработки на CentOS 7

Используете другую систему? Введение Sails.js - это инфраструктура MVC для Node.js, аналогичная Ruby on Rails. Это делает для разработки современных приложений вер

Как установить PufferPanel (бесплатная панель управления Minecraft) на CentOS 7

Как установить PufferPanel (бесплатная панель управления Minecraft) на CentOS 7

Введение В этом руководстве мы будем устанавливать PufferPanel на нашем Vultr VPS. PufferPanel - это бесплатная панель управления с открытым исходным кодом для управления вами.

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

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

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

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

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше