среда, 8 июля 2015 г.

RabbitMQ: Highly Available Queues

Сделать high availability несложно, но нюансы далее.
Быстрый старт.



1) Выбираем любой узел, который будет мастером, и с него читаем /var/lib/rabbitmq/.erlang.cookie.
2) получаем имя кластера
# rabbitmqctl cluster_status
3) Все ноды, которые будут подключаться к нашему кластеру, полностью останавливаем и заменяем файл выше, с кукой. Не забываем вернуть права и владельца. Запускаем снова.
4) Подключаем ноды (мастер ноду не трогаем)
# rabbitmqctl stop_app
# rabbitmqctl join_cluster (имя_с_мастера)
# rabbitmqctl start_app
5) проверяем статус
# rabbitmqctl cluster_status
должны увидеть новую ноду в кластере.

6) Кластер собран, но очереди до сих пор независимые, теперь нужно включить HA для очередей.
Пример для очередей, которые начинаются с amq
# rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'

Или вообще для всех
# rabbitmqctl set_policy HA ".*" '{"ha-mode": "all"}'
Впрочем, это можно сделать и программно, на стадии queue_declare.

Нюансы.
2 ноды в кластере работают, но крайне не рекомендуются.
Если нод больше одной, отвал всей сети _может_ привести к развалу кластера или рассинхронизации
Есть проблемы синхронизации очередей, когда 1 нода упала надолго - будут потери сообщений.

Кластер все-таки не рассчитан на гео-кластеринг, только внутри одного ДЦ, и требует стабильности сетевой подсистемы.
В общем, перед запуском с реальными данными надо будет оттестировать работу кластера в хвост и в гриву.

Линки
https://www.rabbitmq.com/ha.html
https://www.rabbitmq.com/clustering.html
http://docs.openstack.org/high-availability-guide/content/_configure_rabbitmq.html
http://karlgrz.com/rabbitmq-highly-available-queues-and-clustering-using-amazon-ec2/
http://habrahabr.ru/post/193332/ + комментарии

Комментариев нет:

Отправить комментарий