Comment configurer le cluster RabbitMQ sur Ubuntu 20.04

RabbitMQ est un logiciel de courtier de messagerie gratuit, open-source et multi-protocoles écrit dans le langage de programmation Erlang. Un courtier de messages est utilisé pour stocker les messages d’une application. Lorsqu’une application envoie des données à une autre application, cette dernière publie le message sur le courtier de messages. RabbitMQ prend en charge plusieurs protocoles de messagerie et peut être facilement déployé dans une configuration distribuée. Le courtier en messages sert d’intermédiaire pour diverses applications Web et est utilisé pour réduire les charges et le temps de livraison des applications Web.

Dans ce tutoriel, nous allons configurer un cluster RabbitMQ à trois nœuds sur un serveur Ubuntu 20.04.

Conditions préalables

  • Trois serveurs exécutant Ubuntu 20.04.
  • Un mot de passe root est configuré sur chaque serveur.

Démarrage

Avant de commencer, tu dois mettre à jour tes paquets système à la dernière version. Tu peux les mettre à jour en exécutant la commande suivante sur chaque nœud :

apt-get update -y

Une fois que tous les paquets sont mis à jour, tu devras configurer le fichier /etc/hosts sur chaque nœud. Ainsi, ils pourront communiquer entre eux par nom d’hôte.

Modifie le fichier /etc/hosts sur chaque nœud avec la commande suivante :

nano /etc/hosts

Ajoute les lignes suivantes :

192.168.0.10 node1
192.168.0.11 node2
192.168.0.12 node3

Sauvegarde et ferme le fichier lorsque tu as terminé. Ensuite, tu peux passer à l’étape suivante.

Installer le serveur RabbitMQ

Ensuite, tu dois installer le paquet RabbitMQ Server sur chaque nœud. Tu peux l’installer en exécutant simplement la commande suivante :

apt-get install rabbitmq-server -y

Une fois installé, démarre le service RabbitMQ et active-le pour qu’il démarre au redémarrage du système avec la commande suivante :

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

Tu peux aussi vérifier l’état du service RabbitMQ avec la commande suivante :

systemctl status rabbitmq-server

Tu devrais obtenir la sortie suivante :

? rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-07-21 06:25:07 UTC; 19min ago
   Main PID: 2565 (beam.smp)
     Status: "Initialized"
      Tasks: 87 (limit: 2353)
     Memory: 83.5M
     CGroup: /system.slice/rabbitmq-server.service
             ??2551 /bin/sh /usr/sbin/rabbitmq-server
             ??2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1>
             ??2828 erl_child_setup 65536
             ??2921 inet_gethost 4
             ??2922 inet_gethost 4

Jul 21 06:24:58 node1 systemd[1]: Starting RabbitMQ Messaging Server...
Jul 21 06:25:07 node1 systemd[1]: rabbitmq-server.service: Supervising process 2565 which is not our child. We'll most likely not notice when >
Jul 21 06:25:07 node1 systemd[1]: Started RabbitMQ Messaging Server.

À ce stade, le serveur RabbitMQ est installé et fonctionne sur chaque nœud. Tu peux maintenant passer à l’étape suivante.

Active les plugins de gestion RabbitMQ

Le plugin de gestion RabbitMQ fournit une API basée sur HTTP qui peut être utilisée pour surveiller et gérer les nœuds et clusters RabbitMQ via un navigateur Web. Par défaut, il est exécuté sur le port TCP 15672.

Tu peux activer le plugin de gestion RabbitMQ en exécutant la commande suivante sur chaque nœud :

rabbitmq-plugins enable rabbitmq_management

Tu devrais voir la sortie suivante :

Enabling plugins on node [email protected]:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to [email protected]
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

Ensuite, redémarre le service RabbitMQ pour appliquer les modifications :

systemctl restart rabbitmq-server

Tu peux vérifier le port d’écoute avec la commande suivante :

netstat -tunelp | grep 15672

Tu devrais voir la sortie suivante :

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      109        23155      2565/beam.smp

Configuration du cluster RabbitMQ

Par défaut, le fichier /var/lib/rabbitmq/.erlang.cookie est le même sur chaque nœud. Pour configurer le cluster RabbitMQ, tu dois copier le fichier /var/lib/rabbitmq/.erlang.cookie du noeud1 aux autres noeuds.

Sur le node1, exécute la commande suivante pour copier le fichier /var/lib/rabbitmq/.erlang.cookie vers les autres noeuds.

scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/

Ensuite, tu devras configurer les nœuds 1 et 2 pour qu’ils rejoignent le cluster node1.

Tout d’abord, redémarre le service RabbitMQ et arrête l’application avec la commande suivante sur le nœud2 et le nœud3 :

systemctl restart rabbitmq-server
rabbitmqctl stop_app

Sur le node2, rejoins le cluster sur node1 en exécutant la commande suivante :

rabbitmqctl join_cluster [email protected]

Tu devrais voir le résultat suivant :

Clustering node [email protected] with [email protected]

Sur le nœud2, démarre l’application avec la commande suivante :

rabbitmqctl start_app

Tu devrais voir le résultat suivant :

Starting node [email protected] ...
 completed with 3 plugins.

Sur le nœud3, rejoins le cluster sur le nœud1 en exécutant la commande suivante :

rabbitmqctl join_cluster [email protected]

Tu devrais voir le résultat suivant :

Clustering node [email protected] with [email protected]

Sur le nœud3, démarre l’application avec la commande suivante :

rabbitmqctl start_app

Tu devrais voir le résultat suivant :

Starting node [email protected] ...
 completed with 3 plugins.

Une fois que tu as terminé avec succès, vérifie l’état du cluster en exécutant la commande suivante sur le nœud1 :

rabbitmqctl cluster_status

Tu devrais voir le résultat suivant :

Cluster status of node [email protected] ...
Basics

Cluster name: [email protected]

Disk Nodes

[email protected]
[email protected]
[email protected]

Running Nodes

[email protected]
[email protected]
[email protected]

Versions

[email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7
[email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7
[email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7

Alarms

(none)

Network Partitions

(none)

Listeners

Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API

Feature flags

Flag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled

Configurer l’utilisateur administrateur

Ensuite, tu devras créer un nouvel utilisateur administrateur pour le serveur RabbitMQ et supprimer l’utilisateur ‘invité’ par défaut.

Tu peux créer un nouvel utilisateur nommé « hitesh » et un mot de passe « password » en exécutant la commande suivante sur node1 :

rabbitmqctl add_user hitesh password

Tu devrais voir la sortie suivante :

Adding user "hitesh" ...

Ensuite, configure l’utilisateur hitesh en tant qu’administrateur avec la commande suivante :

rabbitmqctl set_user_tags hitesh administrator

Tu devrais voir le résultat suivant :

Setting tags for user "hitesh" to [administrator] ...

Ensuite, accorde à l’utilisateur hitesh la permission de modifier, écrire et lire tous les vhosts.

rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"

Tu devrais voir le résultat suivant :

Setting permissions for user "hitesh" in vhost "/" ...

Ensuite, supprime l’utilisateur invité avec la commande suivante :

rabbitmqctl delete_user guest

Tu devrais obtenir la commande suivante :

Deleting user "guest" ...

Tu peux maintenant répertorier tous les utilisateurs avec la commande suivante :

rabbitmqctl list_users

Tu devrais obtenir le résultat suivant :

Listing users ...
user	tags
hitesh	[administrator]

L’utilisateur que tu as créé sur le nœud1 sera automatiquement répliqué sur tous les nœuds du cluster.

Configuration de RabbitMQ : mise en miroir des files d’attente

Par défaut, le contenu d’une file d’attente est situé sur un seul nœud. Tu dois donc configurer le cluster ‘ha policy’ pour la mise en miroir des files d’attente et leur réplication sur tous les nœuds du cluster.

Pour ce faire, crée une politique ha nommée ‘ha-all’ pour que toutes les files d’attente du cluster RabbitMQ soient mises en miroir sur tous les nœuds du cluster.

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

Sortie :

Setting policy "ha-all" for pattern ".*" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

Ensuite, crée une politique ha nommée ‘ha-two’ pour que toutes les files d’attente dont le nom commence par ‘two’ soient mises en miroir vers les deux nœuds du cluster.

rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

Sortie :

Setting policy "ha-two" for pattern "^two\." to "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...

Ensuite, crée une politique de haute disponibilité nommée ‘ha-nodes’ qui contiendra toutes les files d’attente dont le nom commence par ‘nodes’. Nous ferons un miroir vers deux noeuds spécifiques ‘node2’ et ‘node3’ du cluster.

rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}'

Résultat :

Setting policy "ha-nodes" for pattern "^nodes\." to "{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}" with priority "0" for vhost "/" ...

Tu peux maintenant répertorier toutes les politiques configurées en exécutant la commande suivante :

rabbitmqctl list_policies;

Tu devrais voir la sortie suivante :

Listing policies for vhost "/" ...
vhost	name	pattern	apply-to	definition	priority
/	ha-all	.*	all	{"ha-mode":"all"}	0
/	ha-two	^two\.	all	{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}	0
/	ha-nodes	^nodes\.	all	{"ha-mode":"nodes","ha-params":["[email protected]","[email protected]"]}	0

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Accède au cluster RabbitMQ

Tu peux maintenant accéder à l’interface Web RabbitMQ en tapant l’adresse IP de n’importe quel nœud dans ton navigateur Web avec le port 15672 comme http://192.168.0.10:15672/. Tu devrais voir la page de connexion RabbitMQ :

Connexion RabbitMQ

Indique ton nom d’utilisateur admin, ton mot de passe et clique sur le bouton Connexion. Tu devrais voir le tableau de bord RabbitMQ dans l’écran suivant :

Tableau de bord RabbitMQ

Ensuite, clique sur le menu de l’onglet‘Admin‘, puis sur le menu‘Politiques‘. Tu devrais voir toutes les politiques de RabbitMQ ha que nous avons créées dans l’écran suivant :

Politiques RabbitMQ

Conclusion

Félicitations ! Tu as réussi à installer un cluster RabbitMQ à trois nœuds sur un serveur Ubuntu20.04. Ton cluster partage maintenant les informations de configuration, notamment la topologie et les informations de sécurité, entre tous les nœuds.

Vous aimerez aussi...