GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer le cluster RabbitMQ sur Ubuntu/Debian Linux

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 ?


Linux
  1. Comment configurer un serveur Ubuntu/Debian LAMP

  2. Linux - Comment définir l'affinité du processeur d'un processus sous Linux ?

  3. Comment désactiver Ipv6 sur Ubuntu, Linux Mint, Debian

  4. Comment configurer MySQL Cluster sur Ubuntu

  5. Comment définir l'interface réseau préférée sous Linux

Comment définir ou modifier le nom d'hôte dans Debian Linux

Comment installer le chargeur IonCube sur Ubuntu Linux

Comment configurer PowerDNS sur Ubuntu Linux

Comment configurer le pare-feu UFW sous Linux

Comment changer le nom d'hôte sur Debian Linux

Comment se connecter au WiFi depuis le terminal dans Ubuntu Linux