Labutin
@Labutin
Web-разработчик

Как правильно организовать отказоустойчивость при работе к кластером RabbitMQ?

Начну вопрос с аналогий.
Скажем MongoDB. Есть три ноды в репликасете. В connection string указываются все три и драйвер сам определяет, кто сейчас PRIMARY и с этой нодой работает.

А вот как быть с RabbitMQ? Собрали кластер кроликов.
Как правильно коннектиться к кластеру? Т.е. если одна нода упала, как продолжить работать с другой? В connection string к кролику вроде как указывается только один адрес (т.е. коннектимся всегда к одной ноде).

Как вариант, поставить перед кроликами HA-Proxy и он уже будет мониторить ноды и направлять запрос на живую. Это единственный вариант? Или есть более правильный?
  • Вопрос задан
  • 1433 просмотра
Пригласить эксперта
Ответы на вопрос 1
@yarkin
На уровне данных. Когда поднимается ResplicaSet в MongoDB, она понимает, что данные нужно дублировать на несколько нод. Когда создаётся кластер RabbitMQ (по факту это кластер Erlang-машин), то по всем машинам дублируются лишь метаданные (информация об обменниках, очередях и т.п.), но сами данные остаются жить на одной ноде (но прозрачно передаются/забираются, если клиент подключён к другой ноде кластера). У них есть статья в доке по отказоустойчивости к потери данных.

На уровне коннектов. Драйвер MongoDB открывает подключения до каждой ноды ReplSet (может быть лишь до какого-то их количества, не уверен точно) и, в зависимости от операции и её параметров, использует то или иное подключение. То есть поддержка ReplSet заложена на уровне драйвера. RabbitMQ работает на протоколе AMQP (нативный), который работает только с одной нодой брокера, скорее всего есть куча библиотек, которые обёртывают в себе подключение к нескольким серверам RabbitMQ (либо один коннект и другой поднимается по отказу первого, либо сразу несколько коннектов, которые дают балансировку и малый лаг при отказе одной ноды). Но, если нет либы для работы с несколькими нодами, то сделать её, думаю, особых проблем не составит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 00:45
1000 руб./за проект
02 мая 2024, в 23:56
2000 руб./за проект
02 мая 2024, в 23:29
1500 руб./в час