Есть виртуальная машина с менеджером очередей RabbitMQ, несколько тысяч очередей и миллионы сообщений в день.
Задача: Хотим получить отказоустойчивость и масштабируемость.
RBAC - права и роли; Volume - хранилище; Services - сервисы.
В результате получится кластер RabbitMQ, равномерно распределяющий очереди по нодам и устойчивый к проблемам в среде выполнения.
При недоступности одной из нод кластера, очереди, содержащиеся на ней, перестанут быть доступны, всё остальное продолжит работу. Как только нода вернётся в строй, она вернётся в кластер, и очереди, для которых она была Master'ом, снова станут работоспособными с сохранением всех содержащихся в них данных (если не сломалось персистентное хранилище, разумеется). Все эти процессы проходят полностью автоматически и не требуют вмешательства.
Требуется полное зеркалирование всех содержащихся в кластере данных. Это нужно, чтобы в ситуации, когда хотя бы одна нода кластера работоспособна, с точки зрения прикладного приложения всё продолжало работать. Этот момент никак не связан именно с 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
- Репозиторий RabbitMQ Peer Discovery Kubernetes Plugin
- Пример конфигурации для деплоя RabbitMQ в K8S
- Описание принципов формирования кластера, механизма Peer Discovery и плагинов для него
- Эпичная дискуссия о правильной настройке hostname-based discovery
- Руководство по кластеризации RabbitMQ
- Описание split-brain проблем при кластеризации и способов их решения
- High Availability Queues в RabbitMQ
- Настройка Policies
Есть готовый helm chart