RabbitMQ est un broker de messages robuste, mais pour assurer une haute disponibilité, il est recommandé de déployer un cluster et d’utiliser des mirrored queues. Ce guide détaille l’installation, la configuration du cluster et la création de policies pour le mirroring et le load balancing.
Prérequis
- Trois nœuds RabbitMQ (Debian/Ubuntu ou RHEL/CentOS)
- Erlang compatible installé
- Ports ouverts : 5672, 4369, 25672, 15672 (management)
Alternatives et monitoring
- Supervisez avec Prometheus et Grafana
- Gérez les logs avec logrotate et la rotation des logs
- Automatisez avec cron et systemd timers
1. Installation des prérequis
sudo apt update
sudo apt install -y erlang rabbitmq-server
2. Créer le cluster
Sur le premier nœud (node1) :
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_app
Sur les nœuds suivants (node2, node3) :
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl join_cluster rabbit@node1
sudo rabbitmqctl start_app
Vérifiez le cluster :
sudo rabbitmqctl cluster_status
3. Configurer les mirrored queues (DEPRECATED)
⚠️ AVERTISSEMENT CRITIQUE : Les mirrored queues (ha-mode:all) sont DÉPRÉCIÉES depuis RabbitMQ 3.8 (2019) et seront SUPPRIMÉES dans RabbitMQ 4.0.
Cette section est fournie uniquement pour les installations existantes. Préférez les quorum queues (voir section 3b ci-dessous) pour tout nouveau déploiement.
Définissez une policy pour mirror toutes les queues :
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
"ha-mode":"all": réplique sur tous les nœuds"ha-sync-mode":"automatic": synchronisation automatique
3b. RECOMMANDÉ : Utiliser les Quorum Queues (Raft-based)
Les quorum queues sont le remplaçant moderne des mirrored queues. Elles offrent une meilleure performance et une vraie consensus-based replication avec le protocole Raft.
Activer les quorum queues globalement
sudo rabbitmqctl set_policy quorum "^quorum\." '{"queue-mode":"quorum"}' --apply-to queues
Déclarer une quorum queue (avec Python/Pika)
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Déclaration d'une queue quorum
channel.queue_declare(
queue='my-queue',
arguments={'x-queue-type': 'quorum'}
)
connection.close()
Déclarer une quorum queue (avec RabbitMQ CLI)
sudo rabbitmqctl declare_queue --queue my-queue --queue-type quorum
Avantages des quorum queues vs mirrored queues :
- ✅ Basées sur le consensus Raft (plus robuste)
- ✅ Meilleures performances sous charge
- ✅ Synchronisation plus efficace
- ✅ Support officiel et maintenance active
- ❌ Mirrored queues : mode legacy, performance dégradée, sera supprimé RabbitMQ 4.0
4. Mettre en place le load balancing
Utilisez un load balancer (HAProxy, Nginx) pour répartir les connexions sur les ports AMQP et HTTP management :
Exemple HAProxy
frontend rabbitmq-amqp
bind *:5672
default_backend rabbitmq-nodes
backend rabbitmq-nodes
mode tcp
balance roundrobin
server node1 10.0.0.1:5672 check
server node2 10.0.0.2:5672 check
server node3 10.0.0.3:5672 check
5. Surveillance et tests
- Management UI :
http://node1:15672 - Vérifiez la synchronisation des mirrored queues (legacy) :
sudo rabbitmqctl list_queues name slave_pids synchronised_slave_pids
- Vérifiez l'état des quorum queues (moderne) :
sudo rabbitmqctl list_queues name leader_replica_index replicas
Conclusion
Avec ce cluster RabbitMQ hautement disponible, vos applications bénéficient d'une résilience et d'une continuité de service.
Pour les nouveaux projets, privilégiez les quorum queues qui offrent une meilleure performance et une maintenance à long terme. Les mirrored queues restent disponibles pour les installations existantes mais seront supprimées dans RabbitMQ 4.0.
Associé à un équilibrage de charge adapté (HAProxy, Nginx), votre système de messaging sera robuste et scalable.


