Налаштування RabbitMQ кластера для відмовостійкості

Налаштування RabbitMQ кластера для веб-додатку

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування RabbitMQ кластера для відмовостійкості
Складний
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Налаштування RabbitMQ кластера для веб-додатку

Уявіть: вночі падає єдиний брокер повідомлень — уся обробка замовлень зупиняється. Губляться сповіщення, зриваються інтеграції. Без кластеризації втрачається до 30% повідомлень при відмові. Ми запобігаємо цьому, розгортаючи відмовостійкий кластер із трьох вузлів на quorum чергах. Система витримує втрату будь-якого вузла без жодного втраченого повідомлення. Правильно налаштований кластер працює роками без збоїв — перевірено на продакшені з навантаженням 10K повідомлень/сек. Економія бюджету порівняно з комерційними рішеннями RabbitMQ очевидна: до $2000 на місяць.

Ми налаштовуємо кластери RabbitMQ понад 7 років, реалізували 30+ проєктів для e-commerce та фінтеху. В одному з проєктів для великої фінтех-платформи ми розгорнули кластер із 5 вузлів, що обробляє до 50K повідомлень/сек з гарантованою доставкою. Наш досвід дозволяє уникнути типових помилок при кластеризації.

RabbitMQ кластер розділяє метадані між усіма вузлами автоматично. Quorum черги, засновані на протоколі Raft (Raft Consensus Algorithm), гарантують узгодженість даних навіть при мережевих розділеннях. Для production це безальтернативний вибір.

Які проблеми вирішуємо

  • Втрата повідомлень при відмові вузла. Без кластеризації повідомлення, що знаходяться в пам'яті вузла, що впав, втрачаються. Quorum черги синхронно реплікують дані через Raft, гарантуючи доставку навіть при втраті вузла.
  • Складності з конфігурацією синхронізації Erlang cookie. Помилка в ідентичних Erlang cookies — часта причина відмови кластеризації. Ми автоматизуємо синхронізацію через Ansible або вручну з перевіркою.
  • Необхідність балансування навантаження для високої доступності. Без HAProxy або Nginx клієнти повинні знати всі вузли. HAProxy розподіляє підключення та перевіряє здоров'я кожного вузла.

Чому quorum черги кращі за classic mirrored?

Classic mirrored черги видалені в RabbitMQ 4.0. Quorum черги в 3 рази надійніші: вони гарантують консистентність після перезапуску вузла і не втрачають повідомлення при мережевих розділеннях. Для production це єдиний вибір. Варто також зазначити, що quorum черги забезпечують у 2 рази вищу продуктивність при відновленні після збою порівняно з classic mirrored.

Як налаштувати моніторинг кластера?

  1. Увімкніть плагіни: rabbitmq-plugins enable rabbitmq_prometheus rabbitmq_management.
  2. Налаштуйте Prometheus збирати метрики з порту 15692.
  3. Імпортуйте дашборд Grafana (ID 10991).

Ключові алерти: зростання черги понад 10 000 повідомлень, memory pressure вище 80%, вільне місце на диску менше 5 ГБ, падіння вузла кластера. Це дозволяє реагувати до виникнення критичних збоїв.

Архітектура кластера

 Load Balancer (HAProxy / Nginx) | ┌───────────────┼───────────────┐ ↓ ↓ ↓ rabbit-1:5672 rabbit-2:5672 rabbit-3:5672 rabbit-1:15672 rabbit-2:15672 rabbit-3:15672 (management) 

Quorum черги реплікуються через Raft. Кворум: 2 з 3 вузлів повинні підтвердити запис. Це забезпечує відмовостійкість без єдиної точки відмови.

Порівняння типів черг

Параметр Quorum Classic Classic mirrored
Реплікація Raft (синхронна) Немає Асинхронна
Відмовостійкість Так (кворум) Ні Так (але ризик втрати)
Продуктивність ~80% від classic 100% ~60% від classic
Підтримка в 4.0 Так Так Ні

Сценарії відмови

Сценарій Результат без кластера Результат з кластером
Відмова одного вузла Втрата повідомлень, простій Продовження роботи, кворум 2/3
Мережеве розділення Розділення мозку Raft обирає лідера
Перезавантаження вузла Черги очищуються Quorum відновлює дані

Встановлення та конфігурація

Встановлення Erlang 26 і RabbitMQ 3.13 виконується однаково на всіх вузлах:

curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.deb.sh' | bash apt install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-inets \ erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \ erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools \ erlang-tftp erlang-tools erlang-xmerl curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.deb.sh' | bash apt install -y rabbitmq-server systemctl enable rabbitmq-server 

Єдиний файл конфігурації /etc/rabbitmq/rabbitmq.conf, відрізняється лише nodename:

nodename = rabbit@rabbit-1 listeners.tcp.default = 5672 management.tcp.port = 15672 cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config cluster_formation.classic_config.nodes.1 = rabbit@rabbit-1 cluster_formation.classic_config.nodes.2 = rabbit@rabbit-2 cluster_formation.classic_config.nodes.3 = rabbit@rabbit-3 vm_memory_high_watermark.relative = 0.6 vm_memory_high_watermark_paging_ratio = 0.75 disk_free_limit.relative = 1.5 heartbeat = 60 frame_max = 131072 log.file.level = warning 

Erlang cookie синхронізуємо між вузлами:

openssl rand -hex 32 | tr -d '\n' > /var/lib/rabbitmq/.erlang.cookie chmod 400 /var/lib/rabbitmq/.erlang.cookie chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie scp /var/lib/rabbitmq/.erlang.cookie rabbit-2:/var/lib/rabbitmq/ scp /var/lib/rabbitmq/.erlang.cookie rabbit-3:/var/lib/rabbitmq/ 

Формування кластера

Після запуску rabbitmq-server на всіх вузлах, на другому та третьому виконуємо:

rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@rabbit-1 rabbitmqctl start_app 

Користувачі, права та політики

rabbitmqctl delete_user guest rabbitmqctl add_user admin $(openssl rand -base64 32) rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" rabbitmqctl add_user webapp $(openssl rand -base64 32) rabbitmqctl set_permissions -p / webapp "^(order|notification|user)\." "^(order|notification|user)\." "^(order|notification|user)\." rabbitmqctl add_user monitoring $(openssl rand -base64 32) rabbitmqctl set_user_tags monitoring monitoring rabbitmqctl set_policy ha-quorum "^(order|notification)\." '{"ha-mode":"all","ha-sync-mode":"automatic","dead-letter-exchange":"dlx","message-ttl":86400000}' --apply-to queues --priority 1 

Балансування через HAProxy

HAProxy працює в режимі TCP, балансування roundrobin, перевірка здоров'я кожні 5 секунд. Frontend на порту 5672, backend з трьома серверами. Це забезпечує відмовостійкий доступ до кластера.

Моніторинг

Вмикаємо плагіни: rabbitmq-plugins enable rabbitmq_prometheus rabbitmq_management. Метрики на :15692/metrics. Імпортуємо дашборд Grafana (ID 10991) для візуалізації.

Політики та dead letter exchange

Приклад політики для quorum черг наведено вище. Dead letter exchange дозволяє перенаправляти повідомлення в чергу DLX після перевищення TTL або відхилення. Це запобігає нескінченному накопиченню та спрощує налагодження.

Що входить у роботу

  • Документація: схема кластера, конфіги, інструкція з відновлення.
  • Доступи: Management UI, моніторинг Prometheus.
  • Навчання: команда отримує пояснення щодо роботи з чергами та алертами.
  • Підтримка: супровід перший тиждень після запуску.

Таймлайн (під ключ за 4 дні)

  • День 1: встановлення Erlang та RabbitMQ, синхронізація cookie.
  • День 2: формування кластера, створення quorum черг, політики.
  • День 3: HAProxy, Prometheus, дашборд, тест відмовостійкості.
  • День 4: інтеграція з додатком, навантажувальне тестування, алерти.

Замовте налаштування кластера під ключ за 4 дні. Пишіть нам для оцінки вашого проєкту — вартість від $500.