Présentation
RabbitMQ est un schéma de messagerie d'entreprise open source initialement basé sur la norme AMQP (Advanced Messaging Queuing Protocol), mais prend désormais en charge de nombreux autres protocoles. Léger et facile à déployer sur site ou sur le cloud, RabbitMQ est la messagerie open source la plus populaire. Pour garantir des performances optimales de RabbitMQ, il est essentiel de surveiller RabbitMQ. Cependant, il est difficile pour les organisations de trouver des outils de surveillance Clustered RabbitMQ qui offrent une visibilité complète sur leur infrastructure. Vérifiez également RabbitMQ sur Centos8 et le site de documentation rabbitmq
Que peut faire RabbitMQ ?
Fiabilité
Ainsi, RabbitMQ offre une variété de fonctionnalités pour vous permettre d'allier performances et fiabilité, notamment la persistance, l'assistance à la livraison, la confirmation de l'éditeur et la haute disponibilité.
Routage flexible
Les messages sont acheminés via les échanges avant d'arriver dans les files d'attente.
RabbitMQ propose également plusieurs types d'échange intégrés pour la logique de routage typique.
Aussi, pour un routage plus complexe, vous pouvez lier des échanges ou même écrire votre propre type d'échange en tant que plugin.
Cluster RabbitMQ
Plusieurs serveurs RabbitMQ sur un réseau local peuvent être regroupés, formant un seul courtier logique.
Fédération
Pour les serveurs qui doivent être connectés de manière plus lâche et peu fiable que ne le permet le clustering, RabbitMQ propose un modèle de fédération.
Files d'attente hautement disponibles
Ainsi, les files d'attente peuvent être mises en miroir sur plusieurs machines d'un cluster, garantissant ainsi la sécurité de vos messages, même en cas de panne matérielle.
Multi-protocole
RabbitMQ prend en charge la messagerie sur une variété de protocoles de messagerie.
De nombreux clients regroupés
Il existe également des clients RabbitMQ pour presque toutes les langues auxquelles vous pouvez penser.
Interface de gestion
RabbitMQ est livré avec une interface utilisateur de gestion facile à utiliser qui vous permet de surveiller et de contrôler chaque aspect de votre courtier de messages.
Prérequis
- L'exigence essentielle pour la configuration du cluster RabbitMQ est d'avoir un minimum de 2 nœuds avec CentOS 7 que nous utiliserons dans cet article.Ensuite, configurez leur FQDN et les paramètres réseau de base
- Au moins deux instances CentOS 7 récemment utilisées et mises à jour dans le même sous-réseau avec la mise en réseau privée activée
- RabbitMQ installé avec la console de gestion activée sur chaque serveur.
- Un utilisateur non administrateur avec des droits sudo
Installer RabbitMQ
Installez donc le référentiel Epel et le package Clustered RabbitMQ
[root@master ~]# yum install epel-release -y
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.icidc.com
* extras: mirrors.icidc.com
* updates: mirrors.icidc.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): extras/7/x86_64/primary_db | 242 kB 00:00:00
(2/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.1 MB 00:00:02
(4/4): updates/7/x86_64/primary_db | 9.6 MB 00:00:05
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================================================================
Installing:
epel-release noarch 7-11 extras 15 k
Transaction Summary
==================================================================================================================================================================================================================
Install 1 Package
Total download size: 15 k
Installed size: 24 k
Downloading packages:
warning: /var/cache/yum/x86_64/7/extras/packages/epel-release-7-11.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for epel-release-7-11.noarch.rpm is not installed
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-11.noarch 1/1
Verifying : epel-release-7-11.noarch 1/1
Installed:
epel-release.noarch 0:7-11
Complete!
[root@master ~]#
Installez également Clustered RabbitMQ et les packages requis
[root@master ~]# yum -y install rabbitmq-server erlang
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 8.4 kB 00:00:00
* base: mirrors.icidc.com
* epel: download.nus.edu.sg
* extras: mirrors.icidc.com
* updates: mirrors.icidc.com
epel | 4.7 kB 00:00:00
(1/3): epel/x86_64/group_gz | 96 kB 00:00:00
(2/3): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(3/3): epel/x86_64/primary_db | 6.9 MB 00:00:01
Resolving Dependencies
--> Running transaction check
---> Package rabbitmq-server.noarch 0:3.3.5-34.el7 will be installed
--> Processing Dependency: erlang-erts >= R12B-3 for package: rabbitmq-server-3.3.5-34.el7.noarch
--> Processing Dependency: erlang-kernel >= R12B-3 for package: rabbitmq-server-3.3.5-34.el7.noarch
--> Processing Dependency: erlang-mnesia >= R12B-3 for package: rabbitmq-server-3.3.5-34.el7.noarch
--> Processing Dependency: erlang-os_mon >= R12B-3 for package: rabbitmq-server-3.3.5-34.el7.noarch
......................
Dependencies Resolved
==================================================================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================================================================
Installing:
rabbitmq-server noarch 3.3.5-34.el7 epel 4.0 M
Installing for dependencies:
erlang-asn1 x86_64 R16B-03.18.el7 epel 758 k
erlang-compiler x86_64 R16B-03.18.el7 epel 1.0 M
erlang-crypto x86_64 R16B-03.18.el7 epel 86 k
erlang-erts x86_64 R16B-03.18.el7 epel 2.5 M
erlang-hipe x86_64 R16B-03.18.el7 epel 2.4 M
293 k
erlang-sd_notify x86_64 0.1-1.el7 epel 9.1 k
erlang-snmp x86_64 R16B-03.18.el7 epel 1.5 M
erlang-ssl x86_64 R16B-03.18.el7 epel 588 k
erlang-stdlib x86_64 R16B-03.18.el7 epel 2.2 M
erlang-syntax_tools x86_64 R16B-03.18.el7 epel 336 k
erlang-tools x86_64 R16B-03.18.el7 epel 566 k
erlang-xmerl x86_64 R16B-03.18.el7 epel 998 k
lksctp-tools x86_64 1.0.17-2.el7 base 88 k
Transaction Summary
==================================================================================================================================================================================================================
Install 1 Package (+21 Dependent packages)
Total download size: 21 M
Installed size: 36 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/epel/packages/erlang-asn1-R16B-03.18.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY ] 0.0 B/s | 624 kB --:--:-- ETA
Public key for erlang-asn1-R16B-03.18.el7.x86_64.rpm is not installed
(1/22): erlang-asn1-R16B-03.18.el7.x86_64.rpm | 758 kB 00:00:00
.......... 4/22
Verifying : erlang-compiler-R16B-03.18.el7.x86_64 5/22
Verifying : erlang-mnesia-R16B-03.18.el7.x86_64 6/22
Verifying : erlang-crypto-R16B-03.18.el7.x86_64 7/22
Verifying : erlang-hipe-R16B-03.18.el7.x86_64 8/22
Verifying : erlang-inets-R16B-03.18.el7.x86_64
Verifying : erlang-os_mon-R16B-03.18.el7.x86_64 17/22
Verifying : erlang-otp_mibs-R16B-03.18.el7.x86_64 18/22
Verifying : erlang-tools-R16B-03.18.el7.x86_64 19/22
Verifying : erlang-snmp-R16B-03.18.el7.x86_64 20/22
Verifying : erlang-syntax_tools-R16B-03.18.el7.x86_64 21/22
Verifying : erlang-asn1-R16B-03.18.el7.x86_64 22/22
Installed:
rabbitmq-server.noarch 0:3.3.5-34.el7
Dependency Installed:
erlang-asn1.x86_64 0:R16B-03.18.el7 erlang-compiler.x86_64 0:R16B-03.18.el7 erlang-crypto.x86_64 0:R16B-03.18.el7 erlang-erts.x86_64 0:R16B-03.18.el7
erlang-hipe.x86_64 0:R16B-03.18.el7 erlang-inets.x86_64 0:R16B-03.18.el7 erlang-kernel.x86_64 0:R16B-03.18.el7 erlang-mnesia.x86_64 0:R16B-03.18.el7
erlang-os_mon.x86_64 0:R16B-03.18.el7 erlang-otp_mibs.x86_64 0:R16B-03.18.el7 erlang-public_key.x86_64 0:R16B-03.18.el7 erlang-runtime_tools.x86_64 0:R16B-03.18.el7
erlang-sasl.x86_64 0:R16B-03.18.el7 erlang-sd_notify.x86_64 0:0.1-1.el7 erlang-snmp.x86_64 0:R16B-03.18.el7 erlang-ssl.x86_64 0:R16B-03.18.el7
erlang-stdlib.x86_64 0:R16B-03.18.el7 erlang-syntax_tools.x86_64 0:R16B-03.18.el7 erlang-tools.x86_64 0:R16B-03.18.el7 erlang-xmerl.x86_64 0:R16B-03.18.el7
lksctp-tools.x86_64 0:1.0.17-2.el7
Complete!
[root@master ~]#
Démarrer et activer le service
[root@master ~]# systemctl start rabbitmq-server
[root@master ~]# systemctl enable rabbitmq-server
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
Ajout d'un utilisateur pour RabbitMQ
Utilisez RabbitMQ, ajoutez d'abord l'utilisateur. Par défaut, seul l'utilisateur invité existe et il peut se connecter au seul localhost
[root@master ~]# rabbitmqctl add_user rabbit password
Creating user "rabbit" ...
...done.
[root@master ~]# rabbitmqctl list_users
Listing users ...
guest [administrator]
rabbit []
...done.
[root@master ~]#
Accorder les droits d'administrateur à l'utilisateur rabbitmq
Gaccorder des autorisations à un utilisateur pour les hôtes virtuels
[root@master ~]# rabbitmqctl set_user_tags rabbit administrator
Setting tags for user "rabbit" to [administrator] ...
...done.
[root@master ~]#
Ajouter un hôte virtuel à Clustered RabbitMQ
Utilisez RabbitMQ, ajoutez des hôtes virtuels
[root@master ~]# rabbitmqctl add_vhost /my_vhost
Creating vhost "/my_vhost" ...
...done.
[root@master ~]# rabbitmqctl list_vhosts
Listing vhosts ...
/
/my_vhost
...done.
[root@master ~]#
Installer la bibliothèque cliente AMQP
Implémente AMQP (Advanced Message Queuing Protocol) utilisé pour Clustered RabbitMQ
[root@master ~]# yum -y install python2-pika
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.rise.ph
* epel: mirror.telkomuniversity.ac.id
* extras: mirror.rise.ph
* updates: mirror.rise.ph
Resolving Dependencies
--> Running transaction check
---> Package python2-pika.noarch 0:0.10.0-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================================================================
Installing:
python2-pika noarch 0.10.0-10.el7 epel 170 k
Transaction Summary
==================================================================================================================================================================================================================
Install 1 Package
Total download size: 170 k
Installed size: 1.0 M
Downloading packages:
python2-pika-0.10.0-10.el7.noarch.rpm | 170 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python2-pika-0.10.0-10.el7.noarch 1/1
Verifying : python2-pika-0.10.0-10.el7.noarch 1/1
Installed:
python2-pika.noarch 0:0.10.0-10.el7
Complete!
[root@master ~]#
Créer un script Python pour tester la connexion
Envoi d'un message sur Python Clustered RabbitMQ
[root@master ~]# cat send_msg.py
#!/usr/bin/env python
import pika
credentials = pika.PlainCredentials('unixcop', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost',
5672,
'/my_vhost',
credentials))
channel = connection.channel()
channel.queue_declare(queue='Hello_World')
channel.basic_publish(exchange='',
routing_key='Hello_World',
body='Hello RabbitMQ World!')
print(" [x] Sent 'Hello_World'")
connection.close()
[root@master ~]#
[root@master ~]# python send_msg.py
[x] Sent 'Hello_World'
[root@master ~]#
Créer un script pour vérifier si le message a été reçu
[root@master ~]# cat receive_msg.py
#!/usr/bin/env python
import signal
import pika
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
signal.signal(signal.SIGINT, signal.SIG_DFL)
credentials = pika.PlainCredentials('unixcop', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'master.example.com',
5672,
'/my_vhost',
credentials))
channel = connection.channel()
channel.queue_declare(queue='Hello_World')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(callback,
queue='Hello_World',
no_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
[root@master ~]#
[root@master ~]# python receive_msg.py
[*] Waiting for messages. To exit press CTRL+C
[x] Received 'Hello RabbitMQ World!'
[x] Received 'Hello RabbitMQ World!'
^C
Définir le cookie erlang sur tous les nœuds pour Clustered RabbitMQ
[root@master ~]# chmod 777 /var/lib/rabbitmq/.erlang.cookie
[root@master ~]# scp -r /var/lib/rabbitmq/.erlang.cookie root@worker1:/var/lib/rabbitmq/.erlang.cookie
[root@master ~]# scp -r /var/lib/rabbitmq/.erlang.cookie root@worker2:/var/lib/rabbitmq/.erlang.cookie
[root@master ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie
[root@master ~]# chown rabbitmq /var/lib/rabbitmq/.erlang.cookie
[root@master ~]# chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie
Joindre des nœuds à Clustered RabbitMQ
[root@worker1~]# rabbitmqctl stop_app
[root@worker1 ~]# rabbitmqctl join_cluster rabbit@master
[root@worker1 ~]# rabbitmqctl start_app
#---------------------------------------------------------------------------------#
[root@worker2 ~]# rabbitmqctl stop_app
[root@worker2 ~]# rabbitmqctl join_cluster rabbit@master
[root@worker2 ~]# rabbitmqctl start_app
Installer le plug-in de gestion RabbitMQ
[root@master ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
[root@master ~]# systemctl restart rabbitmq-server
Accédez au "http://nom d'hôte ou adresse IP):15672/" d'un client, puis, le formulaire de connexion RabbitMQ est exposé, connectez-vous avec un utilisateur administrateur.
Tableau de bord avec nœuds de cluster