Débutons et formons nous à Rabbitmq

Print Friendly, PDF & Email

Et voici le retour du lapin, Rabbitmq est un des moteurs de message queue les plus connus du marché. Gratuit bien sûr et opensource, cette technologie de plus en plus flexible permet de traiter différentes architectures. Dans cette nouvelle suite de tutorials, je vous propose de débuter rabbitmq.

Depuis plusieurs années, avec l’émergence des microservices et la modernisation des archiectures (event queuing, intégration de l’asynchrone…), les bus de messages ou queues de messages jouent un rôle fondamental. Par ailleurs avec l’arrivée de technologies facilitant le scaling (kubernetes, conteneurisation, compute dans le cloud etc), leur intégration devient comme une évidence. Ajouter des consommateurs de messages (consumers) par cette méthode n’est plus un problème grâce aux méthodes de first in first out.

Un des atouts de Rabbitmq c’est la facilité d’installation. Alors que le mode de haute disponibilité c’est accrue récemment avec notamment l’arrivée des quorum queues, Rabbitmq est une solution légère et très configurable. Kafka n’est pas aussi facile d’approche de ce côté, même si récemment la suppression d’un cluster zookeeper spécifique a donné un bon coup de pouce.

Rabbitmq apporte également différents modes de management comme l’interface graphique, son API ou encore la ligne de commande. Bref de sérieux atouts pour toutes les sysadmin, devops ou SRE en charge de gérer ce type de cluster.

Comment installer Rabbitmq ?

L’installation est très simple. Dans notre cas, nous le ferons sur une debian 11.2 en bullseye. Mais vous pouvez installer ce produit sur de nombreux OS (windows, MacOS) et autres distributions (redhat, ubuntu…).

Alors il faut savoir que Rabbitmq est développé sur un langage un peu moins courant : le Erlang. Eh oui c’est ainsi mais ce n’est pas pour autant que le produit n’est pas actif et qu’il est difficile à installer.

Donc premier pas, installons le dépôt APT pour erlang :

curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian bullseye main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

Ensuite même opération pour installer le dépôt apt pour rabbitmq :

curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian bullseye main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

Derrière bien sûr nous allons enchainer avec une petite mise à jour de notre cache APT et l’installation d’un meta package pour erlang ainsi que rabbitmq-server.

sudo apt update
sudo apt install -y erlang-nox rabbitmq-server
dpkg -l | grep rabbitmq

Une autre méthode encore plus rapide est de directement télécharger le fichier .deb qui va faire sa petite installation trankilou :

sudo apt install erlang-nox
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.13/rabbitmq-server_3.9.13-1_all.deb
sudo dpkg -i rabbitmq-server_3.9.13-1_all.deb

Ensuite on peu jeter un oeil à notre installation et vérifier que tout est bon.

sudo rabbitmq-diagnostics ping
sudo rabbitmq-diagnostics status
sudo rabbitmq-diagnostics cluster_status
sudo rabbitmq-diagnostics environment

Enfin nous allons procéder à l’installation du plugin de management qui va nous permettre de bénéficier de l’interface graphique :

rabbitmq-plugins enable rabbitmq_management

Je vous propose maintenant de faire la même chose pour diposer de 3 serveurs rabbitmq au total car nous allons mettre en place notre cluster. Déroulez la même procédure y compris l’activation du plugin.

Installation du cluster rabbitmq

Bien maintenan on va installer notre premier cluster rabbitmq. Alors comme on débute on commence à se dire que c’est pas gagné et que l’on est partie pour une longue série de commandes dans la CLI.

Pas tout à fait car c’est extrêmement simple d’installer le cluster.

Première chose sur tous les noeuds du cluster nous allons permettre une écoute sur toutes les interfaces (vous pouvez restreindre bien sûr).

echo "YOATBIGKDHUSBLUSTOAW" | sudo tee /var/lib/rabbitmq/.erlang.cookie
echo "listeners.tcp.1 = 0.0.0.0:5672" | sudo tee -a /etc/rabbitmq/rabbitmq.conf
echo "management.tcp.port = 15672" | sudo tee -a /etc/rabbitmq/rabbitmq.conf
systemctl restart rabbitmq-server

Notons que le port 15672 est le port de l’interface de management donc l’interface graphique.

Dans la première ligne nous avons définit le erlang cookie, c’est une sorte de token qui va permettre à tout nos noeuds de cluster de se vérifier et s’accepter.

Donc on applique tout cela sur chacune des machines.

Alors on peut ensuite préparer un utilisateur (xavki/password) et mettre en place quelques éléments relatifs à nos accès au cluster (on pourrait aussi le faire après la finalisation du cluster peu importe).

rabbitmqctl add_user xavki password

Par sécurité on peut aussi faire un

rabbitmqctl del_user guest

C’est un utilisateur par défaut c’est jamais terrible de les garder niveau sécurité ;).

Ajoutons des droits à notre utilisateur xavki :

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

et encore le statut d’adminitrateur via un tag :

rabbitmqctl set_user_tags xavki administrator

Bon ben on en finit avec la création de notre cluster en demandant aux serveurs 2 et 3 de rejoindre notre leader ou premier noeud, la vérification se faisant sur le erlang cookie :

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rmq1
rabbitmqctl start_app

Et enfin on peut vérifier les membres de notre cluster :

rabbitmqctl cluster_status --formatter=json | jq -r .running_nodes[]

Alors ce n’était pas compliqué.

Allez dans un prochain article, on s’amusera à mettre tout cela en place avec un bon Vagrantfile et un petit srcipt bash d’installation 🙂