Отказоустойчивый кластер RabbitMQ с помощью docker-compose
Для создания отказоустойчивого кластера RabbitMQ с помощью Docker Compose, нужно будет настроить несколько контейнеров для RabbitMQ с необходимыми конфигурациями для кластера, а также обеспечить нужные параметры для взаимодействия между контейнерами.
Вот пример docker-compose.yml для поднятия отказоустойчивого кластера RabbitMQ с использованием 3-х нод:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69  | 
						version: '3' services:   rabbitmq1:     image: rabbitmq:3-management     container_name: rabbitmq1     hostname: rabbitmq1     networks:       - rabbitmq-net     environment:       - RABBITMQ_ERLANG_COOKIE=secretcookie       - RABBITMQ_NODENAME=rabbit@rabbitmq1     ports:       - "15671:15672"  # RabbitMQ Management plugin UI       - "5671:5672"    # RabbitMQ AMQP port     volumes:       - rabbitmq1-data:/var/lib/rabbitmq     deploy:       replicas: 1       restart_policy:         condition: on-failure   rabbitmq2:     image: rabbitmq:3-management     container_name: rabbitmq2     hostname: rabbitmq2     networks:       - rabbitmq-net     environment:       - RABBITMQ_ERLANG_COOKIE=secretcookie       - RABBITMQ_NODENAME=rabbit@rabbitmq2     ports:       - "15672:15672"  # RabbitMQ Management plugin UI       - "5672:5672"    # RabbitMQ AMQP port     volumes:       - rabbitmq2-data:/var/lib/rabbitmq     deploy:       replicas: 1       restart_policy:         condition: on-failure   rabbitmq3:     image: rabbitmq:3-management     container_name: rabbitmq3     hostname: rabbitmq3     networks:       - rabbitmq-net     environment:       - RABBITMQ_ERLANG_COOKIE=secretcookie       - RABBITMQ_NODENAME=rabbit@rabbitmq3     ports:       - "15673:15672"  # RabbitMQ Management plugin UI       - "5673:5672"    # RabbitMQ AMQP port     volumes:       - rabbitmq3-data:/var/lib/rabbitmq     deploy:       replicas: 1       restart_policy:         condition: on-failure networks:   rabbitmq-net:     driver: bridge volumes:   rabbitmq1-data:   rabbitmq2-data:   rabbitmq3-data:  | 
					
Объяснение:
- Три RabbitMQ сервера (rabbitmq1, rabbitmq2, rabbitmq3):
- Для каждого контейнера создается отдельный сервис RabbitMQ.
 - Каждому сервису назначается свой 
hostnameи уникальное имя узла (RABBITMQ_NODENAME). - Устанавливается одинаковый 
RABBITMQ_ERLANG_COOKIEдля всех узлов. Это необходимо для того, чтобы узлы RabbitMQ могли общаться между собой и образовывать кластер. 
 - Порты:
- Каждый контейнер открыт для использования порта AMQP (5672) и порта для RabbitMQ Management Plugin (15672).
 - Каждый сервис использует уникальный порт для UI, чтобы избежать конфликтов.
 
 - Сетевые настройки:
- Контейнеры подключаются к общей сети 
rabbitmq-net, чтобы иметь возможность взаимодействовать между собой. 
 - Контейнеры подключаются к общей сети 
 - Docker Volumes:
- Каждому контейнеру выделен отдельный том для хранения данных RabbitMQ.
 
 
Шаг 2: Создание кластера
После того как контейнеры будут запущены с помощью docker-compose up -d, необходимо выполнить следующие шаги для создания кластера.
- 
Подключитесь к одному из контейнеров RabbitMQ:
12docker exec -it rabbitmq1 bash - В контейнере rabbitmq1 выполните команду для присоединения его к кластеру:
1234rabbitmqctl stop_apprabbitmqctl join_cluster rabbit@rabbitmq2rabbitmqctl start_app - Повторите этот процесс для других узлов, например, для 
rabbitmq2:
12345docker exec -it rabbitmq2 bashrabbitmqctl stop_apprabbitmqctl join_cluster rabbit@rabbitmq1rabbitmqctl start_app - И для 
rabbitmq3:
12345docker exec -it rabbitmq3 bashrabbitmqctl stop_apprabbitmqctl join_cluster rabbit@rabbitmq1rabbitmqctl start_app 
Теперь у вас будет работать отказоустойчивый кластер RabbitMQ с тремя узлами.
Шаг 3: Проверка состояния кластера
Для того чтобы убедиться, что кластер настроен корректно, вы можете использовать команду:
| 
					 1 2  | 
						rabbitmqctl cluster_status  | 
					
Это должно вывести информацию о том, что все три узла успешно присоединились друг к другу.
Заключение
Теперь у вас есть отказоустойчивый кластер RabbitMQ, состоящий из 3-х узлов, с настройками для работы в Docker с использованием Docker Compose.
Recommended Posts
Golang map и Swiss Table
16.03.2025
