Clustering RabbitMQ sur CentOS 7

RabbitMQ est un courtier de messages open source qui prend en charge AMQP, STOMP et d'autres technologies de communication. Il est largement utilisé dans les applications d'entreprise et les architectures de micro-services modernes où il agit comme un canal de message asynchrone entre différents micro-services. Ce guide décrira comment vous pouvez regrouper RabbitMQ sur plusieurs serveurs CentOS 7 pour former un courtier de messages à haute disponibilité. Dans ce didacticiel, un serveur agira comme serveur maître et les autres serveurs agiront comme serveurs miroir au cas où le serveur maître deviendrait indisponible.

Conditions préalables

Configurer le pare-feu

Le pare-feu CentOS, ( firewalld), n'autorise aucun trafic entrant par défaut. Pour rendre RabbitMQ disponible pour d'autres systèmes à l'intérieur et à l'extérieur du réseau, et pour nous permettre d'accéder à la console de gestion, nous devons d'abord ouvrir certains ports.

La console de gestion de l'interface Web de RabbitMQ écoute par défaut sur le port 15672. Nous souhaitons rendre la console de gestion accessible au public afin de pouvoir y accéder depuis notre ordinateur. Nous allons donc demander firewalldd'ouvrir définitivement le port 15672dans la zone publique (qui est la zone par défaut et active sur une instance Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Les nœuds RabbitMQ doivent pouvoir communiquer entre eux. Nous aimerions ouvrir les ports nécessaires, mais uniquement sur le réseau interne. Nous ne voulons pas que quiconque sur Internet puisse administrer ou contacter directement nos serveurs. Les commandes suivantes supposent que nos serveurs sont sur le 192.168.0.100/24sous - réseau.

Le premier service est le epmdservice de découverte d'homologue qui écoute par défaut sur le port 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Pour les communications entre nœuds et CLI, RabbitMQ doit pouvoir communiquer sur le port 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

Les outils CLI communiquent sur la plage de ports 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Si vos applications ont besoin du protocole AMQP, vous devrez également ouvrir les ports 5671et 5672. Si vous devez pouvoir communiquer via un autre protocole, vous pouvez trouver les informations nécessaires sur les exigences de mise en réseau de RabbitMQ sur la documentation officielle de RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Maintenant qu'il firewalldest configuré, nous devons lui demander de recharger la configuration.

sudo firewall-cmd --reload

Répétez les étapes de cette section sur tous les serveurs.

Installer rabbitmqadmin

Le plugin de gestion est livré avec un outil Python appelé rabbitmqadminqui peut être facilement installé sur le système une fois le plugin de gestion activé.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Configurer DNS

Vous devez utiliser les noms d'hôte du serveur pour identifier les serveurs lors du clustering. Par défaut, aucun enregistrement DNS n'est attribué aux serveurs et la connexion échoue. Pour surmonter rapidement cela, ajoutez le nom d'hôte maître et miroir au /etc/hostsfichier à l'aide de votre éditeur préféré.

Par exemple, le fichier d'hôtes de votre maître peut ressembler à ceci. Remarquez les deux derniers enregistrements, qui permettent aux serveurs de s'identifier par leur nom d'hôte. Assurez-vous de changer les adresses IP pour les vôtres.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Cluster les nœuds

Une condition préalable à l'importation pour permettre aux nœuds de se rejoindre est que le cookie Erlang de tous les nœuds est identique. Par défaut, chaque nœud se verra attribuer un cookie Erlang unique, vous devez donc le reconfigurer sur tous les nœuds.

La commande suivante définira le cookie Erlang sur " WE<3COOKIES", mais n'hésitez pas à le modifier à votre guise. Faites cela sur tous les serveurs.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Redémarrez RabbitMQ sur tous les serveurs pour vous assurer que le cookie Erlang est correctement rechargé.

sudo systemctl restart rabbitmq-server.service

Exécutez les commandes suivantes sur tous les serveurs sauf sur le serveur maître. Cela permettra aux nœuds de rejoindre le serveur maître et de former un cluster.

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Vérifiez que les nœuds ont rejoint le cluster en exécutant la commande suivante.

sudo rabbitmqctl cluster_status

Tous vos nœuds apparaîtront dans la section nodeset running_nodesde la sortie. Désormais, vous n'avez plus besoin de répéter les étapes sur chaque serveur, la configuration sera automatiquement mise en miroir sur les autres nœuds.

Créer une politique de haute disponibilité

Maintenant que nous avons un cluster de nœuds RabbitMQ, nous pouvons l'utiliser pour créer des files d'attente et des échanges à haute disponibilité en configurant une nouvelle stratégie. Cette stratégie peut être ajoutée via la console de gestion RabbitMQ ou à l'aide de l'interface de ligne de commande.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

La liste suivante explique ce que signifie chaque partie de la commande.

  • -p "/": Utilisez cette stratégie sur le "/"vhost (la valeur par défaut après l'installation)
  • --priority 1: L'ordre dans lequel appliquer les politiques
  • --apply-to "all": Peut être "queues", "exchanges"ou"all"
  • ha: Le nom que nous donnons à notre politique
  • ".*": Expression régulière utilisée pour décider à quelles files d'attente ou échanges cette politique est appliquée. ".*"correspondra à tout
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Représentation JSON de la stratégie. Ce document décrit ce que nous voulons - exactement 2 nœuds sur lesquels les données sont automatiquement synchronisées

En bref, cette politique garantira que nous aurons toujours 2 copies des données dans une file d'attente ou un échange tant que nous aurons au moins 2 nœuds opérationnels. Si vous avez plus de nœuds, vous pouvez augmenter la valeur de ha-params. Un quorum, ( N/2 + 1), de nœuds est conseillé. Avoir plus de copies de vos données entraînerait une augmentation de l'utilisation du disque, des E / S et du net, ce qui pourrait entraîner une dégradation des performances.

Si vous souhaitez mettre en miroir les données sur tous les nœuds du cluster, vous pouvez utiliser le document JSON suivant.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Si vous souhaitez mettre en miroir les données uniquement sur des nœuds spécifiques (par exemple: node-1et node-2), vous pouvez utiliser ce qui suit.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Vous pouvez modifier l'expression régulière pour affecter différentes stratégies à différentes files d'attente. Disons que nous avons les trois nœuds suivants:

  • lapin @ maître
  • lapin @ client-ha
  • lapin @ produit-ha

Nous pouvons ensuite créer deux stratégies qui entraîneront la mise en miroir du rabbit@client-hanœud du nom des files d'attente commençant par "client" et la mise en miroir du nœud de toutes les files d'attente dont le nom commence par "produit" rabbit@product-ha.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

Une petite remarque ici: les files d'attente exclusives ne sont jamais mises en miroir ou durables dans RabbitMQ, même si cette stratégie correspondrait à ces files d'attente. Les files d'attente exclusives sont automatiquement détruites une fois qu'un client se déconnecte et, en tant que tel, il serait inutile de le répliquer sur un autre serveur. Si le serveur venait à tomber en panne, le client s'en déconnecterait et la file d'attente serait automatiquement détruite. Les instances en miroir seraient également détruites.

Test de la configuration

Afin de tester la configuration en cluster, nous pouvons créer une nouvelle file d'attente à l'aide de l'interface de ligne de commande via la console de gestion.

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Cela créera une file d'attente durable sur le /vhost par défaut avec le nom my-ha-queue.

Exécutez la commande suivante et vérifiez dans la sortie que la file d'attente a notre stratégie «ha» affectée et a des pid sur le maître et sur un nœud miroir.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Nous pouvons maintenant publier un message dans la file d'attente à partir du nœud maître et arrêter RabbitMQ sur le nœud maître.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

Maintenant, récupérez-le en vous connectant au nœud miroir.

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Enfin, nous pouvons redémarrer notre nœud maître.

sudo systemctl start rabbitmq-server.service

Supprimer l'utilisateur invité

Comme mentionné précédemment, RabbitMQ crée automatiquement un utilisateur invité avec un mot de passe invité par défaut. Ce serait une mauvaise pratique de laisser cet utilisateur par défaut sur un système exposé publiquement.

sudo rabbitmqctl delete_user guest


Leave a Comment

Comment installer MODX Revolution sur un VPS CentOS 7 LAMP

Comment installer MODX Revolution sur un VPS CentOS 7 LAMP

Vous utilisez un système différent? MODX Revolution est un système de gestion de contenu (CMS) de niveau entreprise rapide, flexible, évolutif, gratuit et open source écrit i

Configurez votre propre réseau privé avec OpenVPN

Configurez votre propre réseau privé avec OpenVPN

Vultr vous offre une connectivité réseau privée impressionnante pour les serveurs fonctionnant au même endroit. Mais parfois, vous voulez deux serveurs dans des pays différents

Comment installer et configurer CyberPanel sur votre serveur CentOS 7

Comment installer et configurer CyberPanel sur votre serveur CentOS 7

Vous utilisez un système différent? Introduction CyberPanel est lun des premiers panneaux de contrôle du marché à la fois open source et utilisant OpenLiteSpeed. Quest-ce que

Installer eSpeak sur CentOS 7

Installer eSpeak sur CentOS 7

Vous utilisez un système différent? ESpeak peut générer des fichiers audio de synthèse vocale (TTS). Ceux-ci peuvent être utiles pour de nombreuses raisons, telles que la création de votre propre Turin

Comment installer Thelia 2.3 sur CentOS 7

Comment installer Thelia 2.3 sur CentOS 7

Vous utilisez un système différent? Thelia est un outil open source pour la création de sites Web de commerce électronique et la gestion de contenu en ligne, écrit en PHP. Code source Thelia i

Comment déployer Google BBR sur CentOS 7

Comment déployer Google BBR sur CentOS 7

BBR (Bottleneck Bandwidth and RTT) est un nouvel algorithme de contrôle de congestion qui est contribué à la pile TCP du noyau Linux par Google. Avec BBR en place,

Comment installer YOURLS sur CentOS 7

Comment installer YOURLS sur CentOS 7

YOURLS (Your Own URL Shortener) est une application open source de raccourcissement dURL et danalyse de données. Dans cet article, nous couvrirons le processus dinstallation

Configurer Nginx-RTMP sur CentOS 7

Configurer Nginx-RTMP sur CentOS 7

Vous utilisez un système différent? RTMP est idéal pour diffuser du contenu en direct. Lorsque RTMP est associé à FFmpeg, les flux peuvent être convertis en différentes qualités. Vultr i

Comment installer LimeSurvey sur CentOS 7

Comment installer LimeSurvey sur CentOS 7

LimeSurvey est un outil de sondage en ligne gratuit et open source qui est largement utilisé pour publier des sondages en ligne et recueillir des commentaires sur les sondages. Dans cet article, je vais

Installer Java SE sur CentOS

Installer Java SE sur CentOS

Introduction Java est une plate-forme logicielle populaire qui vous permet de développer et dexécuter des applications et des applets Java dans divers environnements matériels. Il y a

Comment installer Vanilla Forum sur CentOS 7

Comment installer Vanilla Forum sur CentOS 7

Vous utilisez un système différent? Le forum Vanilla est une application de forum open source écrite en PHP. Il est entièrement personnalisable, facile à utiliser et prend en charge externa

Installation de Netdata sur CentOS 7

Installation de Netdata sur CentOS 7

Vous utilisez un système différent? Netdata est une étoile montante dans le domaine de la surveillance des métriques système en temps réel. Par rapport à dautres outils du même type, Netdata:

Comment installer le serveur Just Cause 2 (JC2-MP) sur CentOS 7

Comment installer le serveur Just Cause 2 (JC2-MP) sur CentOS 7

Dans ce didacticiel, découvrez comment configurer un serveur multijoueur Just Cause 2. Prérequis Veuillez vous assurer que le système est entièrement mis à jour avant de commencer

Comment installer Starbound Server sur CentOS 7

Comment installer Starbound Server sur CentOS 7

Vous utilisez un système différent? Dans ce tutoriel, je vais vous expliquer comment configurer un serveur Starbound sur CentOS 7. Prérequis Vous devez posséder ce jeu sur vous

Installation et configuration de ZNC sur CentOS 7

Installation et configuration de ZNC sur CentOS 7

ZNC est un videur IRC gratuit et open-source qui reste connecté en permanence à un réseau afin que les clients puissent recevoir des messages envoyés lorsquils sont hors ligne. Thi

Comment installer Django sur CentOS 7

Comment installer Django sur CentOS 7

Django est un framework Python populaire pour lécriture dapplications Web. Avec Django, vous pouvez créer des applications plus rapidement, sans réinventer la roue. Si tu veux

Comment configurer ionCube Loader sur CentOS 7

Comment configurer ionCube Loader sur CentOS 7

ionCube Loader est une extension PHP qui permet à un serveur Web dexécuter des fichiers PHP qui ont été encodés à laide dionCube Encoder et qui est requis pour exécuter e

Comment installer Reader Self 3.5 RSS Reader sur un VPS CentOS 7 LAMP

Comment installer Reader Self 3.5 RSS Reader sur un VPS CentOS 7 LAMP

Vous utilisez un système différent? Reader Self 3.5 est un lecteur RSS auto-hébergé simple et flexible, gratuit et open source et une alternative à Google Reader. Reader Sel

Comment installer PufferPanel (Panneau de configuration Minecraft gratuit) sur CentOS 7

Comment installer PufferPanel (Panneau de configuration Minecraft gratuit) sur CentOS 7

Introduction Dans ce tutoriel, installez bien PufferPanel sur notre Vultr VPS. PufferPanel est un panneau de contrôle open source et gratuit pour vous gérer

Comment installer BoltWire CMS sur CentOS 7

Comment installer BoltWire CMS sur CentOS 7

Vous utilisez un système différent? Introduction BoltWire est un système de gestion de contenu gratuit et léger écrit en PHP. Comparé à la plupart des autres gestionnaires de contenu

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

Les attaques de ransomware sont en augmentation, mais l'IA peut-elle aider à lutter contre le dernier virus informatique ? L'IA est-elle la réponse ? Lisez ici, sachez que l'IA est un boone ou un fléau

ReactOS : est-ce lavenir de Windows ?

ReactOS : est-ce lavenir de Windows ?

ReactOS, un système d'exploitation open source et gratuit est ici avec la dernière version. Cela peut-il suffire aux besoins des utilisateurs de Windows modernes et faire tomber Microsoft ? Découvrons-en plus sur cet ancien style, mais une expérience de système d'exploitation plus récente.

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Whatsapp a finalement lancé l'application de bureau pour les utilisateurs Mac et Windows. Vous pouvez désormais accéder facilement à Whatsapp depuis Windows ou Mac. Disponible pour Windows 8+ et Mac OS 10.9+

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Lisez ceci pour savoir comment l'intelligence artificielle devient populaire parmi les petites entreprises et comment elle augmente les probabilités de les faire grandir et de donner à leurs concurrents un avantage.

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

Récemment, Apple a publié macOS Catalina 10.15.4, une mise à jour supplémentaire pour résoudre les problèmes, mais il semble que la mise à jour cause davantage de problèmes, ce qui entraîne le bridage des machines mac. Lisez cet article pour en savoir plus

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux d'extraction de données de Big Data

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Notre ordinateur stocke toutes les données d'une manière organisée connue sous le nom de système de fichiers de journalisation. C'est une méthode efficace qui permet à l'ordinateur de rechercher et d'afficher des fichiers dès que vous appuyez sur la recherche.https://wethegeek.com/?p=94116&preview=true

Singularité technologique : un futur lointain de la civilisation humaine ?

Singularité technologique : un futur lointain de la civilisation humaine ?

Alors que la science évolue à un rythme rapide, prenant le pas sur une grande partie de nos efforts, les risques de nous soumettre à une Singularité inexplicable augmentent également. Lisez, ce que la singularité pourrait signifier pour nous.

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques d'analyse des mégadonnées : partie 1

Limpact de lintelligence artificielle dans les soins de santé 2021

Limpact de lintelligence artificielle dans les soins de santé 2021

L'IA dans le domaine de la santé a fait de grands progrès au cours des dernières décennies. Ainsi, l'avenir de l'IA dans les soins de santé continue de croître de jour en jour.