Vous souhaitez réduire les charges de travail et les délais de livraison de vos applications ? Épargnez-vous les maux de tête et configurez un cluster RabbitMQ pour votre application !
Dans ce didacticiel, vous apprendrez à configurer le cluster RabbitMQ et à disposer d'un cluster RabbitMQ entièrement fonctionnel avec prise en charge de la haute disponibilité.
Prêt? Continuez à lire et commencez à réduire les charges de travail !
Prérequis
Pour suivre ce didacticiel, assurez-vous que vous disposez des conditions suivantes :
- Deux serveurs Linux ou plus sur le même réseau :ce didacticiel utilise trois serveurs Debian 11 nommés node01, node02 et node03.
- Privilèges root Sudo ou accès au compte root/administrateur.
Configuration d'un fichier Hosts
Le cluster RabbitMQ fonctionne avec le nom d'hôte ou le domaine local. Vous devez vous assurer que chaque nom d'hôte correspond à l'adresse IP du serveur en modifiant le /etc/hosts fichier.
Ouvrez le /etc/hosts
fichier sur tous les serveurs à l'aide de votre éditeur de texte préféré et ajoutez les lignes suivantes au fichier.
N'oubliez pas que la modification du fichier /etc/hosts nécessite un privilège sudo.
Le format de /etc/hosts la configuration est IP-address hostname
.
Remplacez les valeurs ci-dessous par les adresses IP et les noms d'hôte de vos serveurs, enregistrez les modifications et quittez l'éditeur.
# /etc/hosts file RabbitMQ Servers
172.16.1.20 node01
172.16.1.21 node02
172.16.1.22 node03
Maintenant, exécutez le ping
commande ci-dessous pour vérifier que chaque nom d'hôte correspond à l'adresse IP correcte du serveur. Chaque -c 3
l'option fait ping
demande trois fois, puis met fin aux demandes.
# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03
Si votre configuration est correcte, vous verrez que chaque nom d'hôte est résolu en l'adresse IP correcte du serveur, comme indiqué ci-dessous.

Installation de RabbitMQ sur tous les serveurs
Maintenant que vous avez configuré le /etc/hosts
sur tous les serveurs, il est temps d'installer les packages RabbitMQ sur tous les serveurs (node01, node02 et node03). Vous pouvez installer RabbitMQ à partir du référentiel de distribution officiel pour la plupart des distributions Linux.
Au moment de la rédaction, les référentiels Debian et Ubuntu fournissent la dernière version stable de RabbitMQ 3.8.9.
1. Exécutez le apt
commande ci-dessous pour actualiser tous les index de packages de votre système.
sudo apt update
2. Ensuite, exécutez le apt install
suivant commande pour installer RabbitMQ (rabbitmq-server
) sur votre système.
Une fois l'installation terminée, le rabbitmq-server
Le service est automatiquement démarré et activé sur votre système.
sudo apt install rabbitmq-server -y
3. Enfin, exécutez la commande suivante pour vérifier le rabbitmq-server
l'état du service.
sudo systemctl status rabbitmq-server
Ci-dessous, vous pouvez voir que le service de serveur RabbitMQ est actif (en cours d'exécution) et activé . Par conséquent, les services démarrent automatiquement au démarrage/démarrage du système.

De plus, vous pouvez également vérifier la version de RabbitMQ sur votre système à l'aide de la commande suivante.
sudo rabbitmq-diagnostics server_version
La version de RabbitMQ installée est 3.8.9 , comme illustré ci-dessous, mais la vôtre peut être différente.

Configuration du cluster RabbitMQ
Après avoir installé RabbitMQ, il est temps de configurer le cluster RabbitMQ. L'utilisation du cluster RabbitMQ empêche la perte de données et le manque entre vos applications. Le cluster RabbitMQ offre une réplication et une haute disponibilité sur tous les serveurs.
RabbitMQ est une application écrite en Erlang et fournit par défaut un .erlang.cookie fichier sur le répertoire de données RabbitMQ (/var/lib/rabbitmq) .
Pour créer un cluster RabbitMQ, vous allez configurer un .erlang.cookie fichier sur chaque serveur avec le même contenu et doit appartenir au rabbitmq
utilisateur et groupe.
1. Sur le serveur node01, exécutez la commande suivante pour vérifier les fichiers disponibles dans le répertoire de données RabbitMQ (/var/lib/rabbitmq
). La commande imprime alors le contenu du .erlang.cookie
dossier.
# List files and directories on /var/lib/rabbitmq
ls -lah /var/lib/rabbitmq
# Print content of the file .erlang.cookie
cat /var/lib/rabbitmq/.erlang.cookie
Copiez la sortie (UXPBSDKHLRMGJSOJVEAN ) à votre note, car vous ajouterez cette sortie aux serveurs node02 et node03 dans les étapes suivantes. N'oubliez pas que vous pouvez obtenir une sortie différente du .erlang.cookie.
fichier que ce qui est montré ci-dessous.

2. Ensuite, passez au serveur node02 et exécutez la commande suivante à stop
le rabbitmq
service.
sudo systemctl stop rabbitmq-server
3. Modifiez le /var/lib/rabbitmq/.erlang.cookie
fichier dans votre éditeur de texte préféré. Remplacez le contenu d'origine par celui que vous avez noté à la première étape, enregistrez les modifications et quittez l'éditeur.
# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN
4. Maintenant, exécutez la commande ci-dessous pour démarrer le rabbitmq-server
service.
sudo systemctl start rabbitmq-server
5. Passez au serveur node03 et répétez les étapes (deux à quatre) pour modifier le /var/lib/rabbitmq/.erlang.cookie
fichier.
6. Exécutez le rabbitmqctl
suivant commandes sur les serveurs node02 et node03 pour les ajouter au cluster RabbitMQ (node01).
# Stop RabbitMQ application
sudo rabbitmqctl stop_app
# Join the RabbitMQ node01
sudo rabbitmqctl join_cluster [email protected]
# Start the RabbitMQ application again
sudo rabbitmqctl start_app
Ci-dessous, vous pouvez voir que le serveur node02 est en cluster avec le cluster RabbitMQ (node01), et il en va de même pour le serveur node03.

7. Enfin, exécutez le rabbitmqctl
commande ci-dessous pour vérifier l'état du cluster RabbitMQ. Vous pouvez l'exécuter à partir de n'importe quel serveur (node01, node02 ou node03).
sudo rabbitmqctl cluster_status
Vous pouvez voir dans la sortie ci-dessous le nom du cluster ([email protected] ) et les nœuds en cours d'exécution.

Configuration d'un utilisateur administrateur pour RabbitMQ
Après avoir configuré le cluster RabbitMQ, vous allez créer un nouvel utilisateur administrateur pour RabbitMQ et supprimer l'utilisateur invité par défaut. L'utilisateur administrateur RabbitMQ est autorisé à configurer, lire et écrire toute entité disponible sur le cluster RabbitMQ.
1. Passez au serveur node01 et exécutez le rabbitmqctl
commande ci-dessous pour créer un nouvel utilisateur appelé admin
avec le mot de passe défini comme AdminPassRabbitMQ
. Vous pouvez définir votre nom d'utilisateur et votre mot de passe préférés, mais assurez-vous de définir un mot de passe fort.
sudo rabbitmqctl add_user admin AdminPassRabbitMQ

2. Ensuite, exécutez la commande suivante pour définir (set_user_tags
) le nouvel utilisateur (admin
) comme administrator
pour le cluster RabbitMQ.
sudo rabbitmqctl set_user_tags admin administrator

3. Exécutez la commande ci-dessous pour set_permissions
au admin
utilisateur avec ce qui suit :
- Autorise (
-p /
)admin
utilisateur pour accéder à tous les vhosts sur le cluster RabbitMQ. - Premier
".*"
– Permet à l'utilisateur de configurer l'autorisation pour chaque entité et vhosts. - Deuxième
".*"
- Active l'autorisation d'écriture pour l'utilisateur sur chaque entité et vhosts. - Troisième
".*"
- Active l'autorisation de lecture pour l'utilisateur sur chaque entité et vhosts.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

4. Maintenant, exécutez la commande suivante pour supprimer (delete_user
) l'utilisateur par défaut (guest
) du cluster RabbitMQ.
sudo rabbitmqctl delete_user guest

5. Enfin, exécutez la commande ci-dessous pour répertorier tous les utilisateurs disponibles (list_users
) sur le cluster RabbitMQ.
sudo rabbitmqctl list_users
Ci-dessous, vous ne pouvez voir qu'un seul utilisateur (admin) . Vous pouvez également vérifier les utilisateurs d'autres serveurs (node02 et node03) et vous obtiendrez le même résultat.

Création d'un hôte virtuel et d'un nouvel utilisateur administrateur sur RabbitMQ
Vous avez configuré votre cluster RabbitMQ et créé un utilisateur administrateur sur RabbitMQ. Mais maintenant, vous allez créer un hôte virtuel (vhost) et des utilisateurs sur RabbitMQ, afin que votre application puisse se connecter à RabbitMQ.
Le concept de base d'un hôte virtuel (vhost) sur RabbitMQ est similaire à celui d'Apache ou de blocs de serveur sur NGINX. Chaque vhost a des entités telles que des échanges, des files d'attente, des liaisons, des autorisations utilisateur, l'authentification, etc.
1. Exécutez le rabbitmqctl
commande ci-dessous pour créer un nouveau vhost (add_vhost
) nommé app-qa1
.
sudo rabbitmqctl add_vhost app-qa1

2. Ensuite, exécutez les commandes suivantes pour créer un nouvel utilisateur (add_user
) nommé alice
avec le mot de passe AlicePassRabbitMQ
et marquez l'utilisateur comme administrator
. Vous pouvez définir le nom d'utilisateur et le mot de passe selon vos préférences.
# create new user alice
sudo rabbitmqctl add_user alice AlicePassRabbitMQ
# set a tag administrator for user alice
sudo rabbitmqctl set_user_tags alice administrator

3. Exécutez la commande ci-dessous pour définir les autorisations de l'utilisateur alice
pour gérer vhost app-qa1
. Ces autorisations permettent à l'utilisateur alice
pour configurer, lire et écrire toutes les entités sous le vhost app-qa1
.
# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"

4. Enfin, exécutez chaque commande ci-dessous pour répertorier les vhosts disponibles (list_vhosts
) sur le cluster RabbitMQ et les autorisations (list_user_permissions
) du nouvel utilisateur admin (alice
).
# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts
# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice

Création d'échanges, de files d'attente et de liaisons sur RabbitMQ
Votre hôte virtuel et votre utilisateur administrateur sont configurés, mais sont-ils tout ce dont vous avez besoin pour que votre application fonctionne ? Vous devrez toujours créer des entités, telles que des échanges, des files d'attente et des liaisons sur RabbitMQ. Ces entités sont nécessaires pour que votre application fonctionne avec RabbitMQ.
1. Exécutez le rabbitmqadmin
suivant commande pour créer un nouvel échange sur RabbitMQ appelé test_exchange
sous le app-qa1
vhost et l'utilisateur alice
. Vous pouvez spécifier le type d'échanges avec le type
option, qui est direct
pour cette démo.
# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct

2. Ensuite, exécutez chaque commande ci-dessous pour créer de nouvelles files d'attente sur RabbitMQ. Dans cette démo, vous allez créer le classic
par défaut (test_classic
) et le quorum
file d'attente nommée test_quorum
.
# create quorum queue with option queue_type=quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_quorum durable=true queue_type=quorum
# create default classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_classic durable=true

3. Exécutez les commandes ci-dessous pour créer une liaison pour les deux test_classic
et test_quorum
files d'attente. Chaque liaison a un routing_key
différent mais fonctionne toujours sur le même échange (test_exchange
).
# create binding for test_quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_quorum" routing_key="test_routing_key_quorum"
# create binding for test_classic
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_classic" routing_key="test_routing_key_classic"

4. Maintenant, exécutez les commandes suivantes sur publish
le hello, world
message au test_exchange
. Assurez-vous de définir le bon routing_key.
# publish message for the test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_quorum payload="hello world, Quorum Queue"
# publish message for the test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_classic payload="hello world, Classic Queue"

5. Enfin, exécutez la commande suivante pour get
le hello, world
message de test_quorum
et test_classic
files d'attente.
# retrieve the message from test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum
# retrieve the message from test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic
Comme indiqué ci-dessous, vous saurez que les files d'attente fonctionnent si vous recevez le hello, world
message du test_quorum
et test_classic
files d'attente.

Activation du plugin de gestion RabbitMQ
Jusqu'à présent, vous avez réussi à travailler sur RabbitMQ via un environnement de ligne de commande. Mais peut-être préférez-vous une interface graphique pour interagir avec les serveurs et les clusters RabbitMQ. Si tel est le cas, vous devrez activer le plug-in de gestion RabbitMQ.
Le plug-in de gestion RabbitMQ fournit une interface utilisateur de gestion basée sur le Web s'exécutant sur le port par défaut 15672
et l'outil de gestion en ligne de commande [rabbitmqadmin]
Exécutez le rabbitmq-plugins
commande ci-dessous sur tous les serveurs (node01, node02 et node03) pour activer le rabbitmq_management
brancher. Cette commande active automatiquement les autres plugins nécessaires, tels que rabbitmq_management_agent
et rabbitmq_web_dispatch
.
sudo rabbitmq-plugins enable rabbitmq_management
Vous trouverez ci-dessous la sortie similaire que vous verrez sur l'écran de votre terminal.

Maintenant, ouvrez votre navigateur Web et accédez à l'adresse IP de votre serveur suivie du port 15672
(http://172.16.1.20:15672/) pour accéder à l'interface de gestion Web RabbitMQ. Port 15672
s'ouvre automatiquement lorsque vous activez le plugin de gestion RabbitMQ.
Connectez-vous à la page de connexion de l'interface utilisateur de gestion RabbitMQ avec l'utilisateur alice et le mot de passe AlicePassRabbitMQ .

Dans le tableau de bord RabbitMQ, vous verrez tous les nœuds disponibles sur le cluster RabbitMQ.
Ci-dessous, vous pouvez voir que tous les nœuds du cluster RabbitMQ fonctionnent sans aucun problème.

Vérification de la haute disponibilité de la file d'attente de quorum
Vous avez déjà vérifié que les nœuds du cluster RabbitMQ sont en cours d'exécution et que les files d'attente fonctionnent, et c'est très bien. Mais que se passe-t-il si l'un des nœuds s'arrête ou tombe en panne ? Vérifiez que la file d'attente test_quorum offre une haute disponibilité et une réplication sur tous les serveurs.
1. Sur le tableau de bord RabbitMQ, cliquez sur Files d'attente pour accéder aux files d'attente disponibles dans le cluster RabbitMQ.
Ci-dessous, vous pouvez voir le test_classic
file d'attente et test_quorum
file d'attente.

2. Ensuite, cliquez sur le test_classic file d'attente pour obtenir ses informations détaillées.
Comme vous le voyez ci-dessous, le test_classic file d'attente s'exécute sur [email protected] sans miroirs/réplication. Lorsque le nœud [email protected] est en panne, le test_classic file d'attente devient indisponible.

3. Revenez à la file d'attente menu, mais cliquez sur test_quorum file d'attente cette fois.
Ci-dessous, vous pouvez voir le test_quorum file d'attente est disponible sur [email protected] et fournit également des miroirs aux autres nœuds du cluster. Cette configuration conservera le test_quorum file d'attente en cours d'exécution même lorsque node01 est en panne.

4. Maintenant, exécutez la commande suivante pour éteindre/éteindre le node01
serveur. Avec le serveur node01 down.
# turnoff node01
sudo poweroff
5. Déplacez-vous vers le serveur node02 et exécutez la commande ci-dessous pour vérifier le RabbitMQ cluster_status
# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status
Vous verrez les nœuds en cours d'exécution actuels sur le cluster RabbitMQ sont node02 et node03 .

6. Ensuite, exécutez les commandes suivantes pour obtenir le message "hello world" du test_classic
file d'attente. Cette commande fera cinq requêtes au test_classic
file d'attente à l'aide de la boucle Bash.
# setup temporary environment variable CLASSIC
export CLASSIC="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic"
# retrieve message from `test_classic` queue 5 times using bash loop
for i in {1..5}; do $CLASSIC; done
Vous recevrez le message Non trouvé sorties, comme indiqué ci-dessous, car le serveur node01 est en panne.

7. Enfin, exécutez les commandes suivantes pour récupérer le message "hello world" du test_quorum
file d'attente.
Semblable au test de la file d'attente test_classic, cette commande effectue cinq requêtes au test_quorum
file d'attente, mais cette fois, vous recevrez le message "hello world" même le node01
est éteint. Pourquoi? Le test_quorum
file d'attente est automatiquement répliquée/mise en miroir sur les serveurs node02 ou node03.
# setup temporary environment variable QUORUM
export QUORUM="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum"
# retrieve message from `test_quorum` queue 5 times using bash loop
for i in {1..5}; do $QUORUM; done

Conclusion
Ce didacticiel visait à vous aider tout au long du processus de configuration du cluster RabbitMQ sur les systèmes Linux Debian/Ubuntu. Vous avez également appris l'administration de base du serveur RabbitMQ et comment créer des files d'attente qui prennent en charge la haute disponibilité sur RabbitMQ.
Vous avez configuré un cluster entièrement RabbitMQ à ce stade. Alors, quelle est la prochaine étape ? Peut-être apprendrez-vous à implémenter RabbitMQ dans votre application ?