ict-architecture

Labo 06: RabbitMQ Clusteren

Opzetten van een hoog beschikbare RabbitMQ cluster binnen Docker Swarm met peer discovery.

Handmatig Clusteren

chmod 600 .erlang.cookie && chown 999:999 .erlang.cookie
Zet de juiste permissies voor de Erlang cookie.
docker exec -it <container_id> rabbitmqctl stop_app
Stop de RabbitMQ applicatie op een node.
docker exec -it <container_id> rabbitmqctl join_cluster rabbit@<hostname_node_1>
Join de cluster via de eerste node.
docker exec -it <container_id> rabbitmqctl cluster_status
Controleer of de node succesvol is gejoind.

Declaratieve Setup

echo "MijnGeheimeCookie" | docker secret create erlang_cookie -
Maak een secret aan voor de Erlang cookie in Swarm.

Bestanden & Configuraties

rabbitmq.conf
ini
cluster_formation.peer_discovery_backend = classic_config
cluster_formation.classic_config.nodes.1 = rabbit@1.rabbitmq
cluster_formation.classic_config.nodes.2 = rabbit@2.rabbitmq
cluster_formation.classic_config.nodes.3 = rabbit@3.rabbitmq
Configuratie voor automatische peer discovery.
rabbitmq-stack.yaml
yaml
version: '3.8'
services:
rabbitmq:
image: rabbitmq:3-management
hostname: "{{.Task.Slot}}.rabbitmq"
environment:
RABBITMQ_USE_LONGNAME: "true"
RABBITMQ_NODENAME: "rabbit@{{.Task.Slot}}.rabbitmq"
RABBITMQ_ERLANG_COOKIE_FILE: "/run/secrets/erlang_cookie"
secrets:
- erlang_cookie
configs:
- source: rabbit_config
target: /etc/rabbitmq/rabbitmq.conf
networks:
- rabbit-net
deploy:
replicas: 3
endpoint_mode: dnsrr
networks:
rabbit-net:
driver: overlay
configs:
rabbit_config:
file: ./rabbitmq.conf
secrets:
erlang_cookie:
external: true
Stack configuratie voor RabbitMQ cluster met templates en secrets.