/rabbitmq-cluster-k8s

Есть виртуальная машина с менеджером очередей RabbitMQ, несколько тысяч очередей и миллионы сообщений в день. Хотим получить отказоустойчивость и масштабируемость.

RabbitMQ кластер в k8s

Задача:

Есть виртуальная машина с менеджером очередей RabbitMQ, несколько тысяч очередей и миллионы сообщений в день.

Задача: Хотим получить отказоустойчивость и масштабируемость.

Описание директорий:

RBAC - права и роли; Volume - хранилище; Services - сервисы.

Итог:

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

При недоступности одной из нод кластера, очереди, содержащиеся на ней, перестанут быть доступны, всё остальное продолжит работу. Как только нода вернётся в строй, она вернётся в кластер, и очереди, для которых она была Master'ом, снова станут работоспособными с сохранением всех содержащихся в них данных (если не сломалось персистентное хранилище, разумеется). Все эти процессы проходят полностью автоматически и не требуют вмешательства.

Настраиваем HA

Требуется полное зеркалирование всех содержащихся в кластере данных. Это нужно, чтобы в ситуации, когда хотя бы одна нода кластера работоспособна, с точки зрения прикладного приложения всё продолжало работать. Этот момент никак не связан именно с K8s.

Для включения полного HA необходимо в RabbitMQ dashboard на вкладке Admin -> Policies создать Policy. Имя произвольное, Pattern пустой (все очереди), в Definitions добавить два параметра: ha-mode: all, ha-sync-mode: automatic.

После этого все создаваемые в кластере очереди будут находиться в режиме High Availability: при недоступности Master-ноды новым мастером автоматически будет выбираться один из Slave’ов. А данные, поступающие в очередь, будут зеркалироваться на все ноды кластера. Что, собственно, и требовалось получить.

http://www.rabbitmq.com/ha.html

Полезная литература:

Helm

Есть готовый helm chart