Introduzione
RabbitMQ è uno schema di messaggistica aziendale open source inizialmente basato sullo standard Advanced Messaging Queuing Protocol (AMQP), ma ora supporta numerosi altri protocolli. Leggero e facile da distribuire on-premise o sul cloud, RabbitMQ è la messaggistica open source più popolare. Per garantire prestazioni ottimali di RabbitMQ, è fondamentale per il monitoraggio di RabbitMQ. Tuttavia, per le organizzazioni è difficile trovare strumenti di monitoraggio Clustered RabbitMQ che forniscano una visibilità completa nella loro infrastruttura. Inoltre, controlla RabbitMQ su Centos8 e la documentazione del sito rabbitmq
Cosa può fare RabbitMQ?
Affidabilità
Quindi RabbitMQ offre una varietà di funzionalità che ti consentono di scambiare prestazioni e affidabilità, tra cui persistenza, supporto per la consegna, conferme dell'editore e disponibilità elevata.
Percorsi flessibili
I messaggi vengono instradati attraverso gli scambi prima di arrivare alle code.
Inoltre RabbitMQ dispone di diversi tipi di scambio integrati per la tipica logica di routing.
Inoltre, per instradamenti più complessi, puoi associare gli scambi o persino scrivere il tuo tipo di scambio come plug-in.
Raccogli RabbitMQ
Diversi server RabbitMQ su una rete locale possono essere raggruppati insieme, formando un unico broker logico.
Federazione
Per i server che devono essere connessi in modo più lasco e inaffidabile rispetto a quanto consentito dal clustering, RabbitMQ offre un modello di federazione.
Code ad alta disponibilità
In questo modo è possibile eseguire il mirroring delle code su più macchine in un cluster, assicurando che anche in caso di guasto dell'hardware i tuoi messaggi siano al sicuro.
Multiprotocollo
RabbitMQ supporta la messaggistica su una varietà di protocolli di messaggistica.
Molti clienti raggruppati
Inoltre ci sono client RabbitMQ per quasi tutte le lingue che ti vengono in mente.
Interfaccia utente di gestione
RabbitMQ viene fornito con un'interfaccia utente di gestione facile da usare che ti consente di monitorare e controllare ogni aspetto del tuo broker di messaggi.
Prerequisiti
- Il requisito essenziale per la configurazione di RabbitMQ Cluster è avere un minimo di 2 nodi con CentOS 7 che useremo in questo articolo. Quindi, configura il loro FQDN e le impostazioni di rete di base
- Almeno due istanze CentOS 7 appena utilizzate e aggiornate nella stessa sottorete con rete privata abilitata
- RabbitMQ installato con la console di gestione abilitata su ciascun server.
- Un utente non amministratore con diritti sudo
Installazione di RabbitMQ
Quindi installa il repository Epel e il pacchetto 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 ~]#
Installa anche Clustered RabbitMQ e i pacchetti richiesti
[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 ~]#
Avvia e abilita il servizio
[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.
Aggiunta utente per RabbitMQ
Usa RabbitMQ, aggiungi prima l'utente. Per impostazione predefinita, esiste solo l'utente ospite e può connettere l'unico host locale
[root@master ~]# rabbitmqctl add_user rabbit password
Creating user "rabbit" ...
...done.
[root@master ~]# rabbitmqctl list_users
Listing users ...
guest [administrator]
rabbit []
...done.
[root@master ~]#
Concedi i diritti di amministratore all'utente rabbitmq
Concedi i permessi a un utente per gli host virtuali
[root@master ~]# rabbitmqctl set_user_tags rabbit administrator
Setting tags for user "rabbit" to [administrator] ...
...done.
[root@master ~]#
Aggiungi virtualhost a RabbitMQ in cluster
Usa RabbitMQ, aggiungi virtualhost
[root@master ~]# rabbitmqctl add_vhost /my_vhost
Creating vhost "/my_vhost" ...
...done.
[root@master ~]# rabbitmqctl list_vhosts
Listing vhosts ...
/
/my_vhost
...done.
[root@master ~]#
Installa la libreria client AMQP
Implementa AMQP (Advanced Message Queuing Protocol) utilizzato per 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 ~]#
Crea script Python per testare la connessione
Invio di un messaggio su 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 ~]#
Crea uno script per verificare se il messaggio è stato ricevuto
[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
Imposta il cookie erlang su tutti i nodi per 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
Unisciti ai nodi in 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
Installa il plug-in di gestione 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
Accesso a "http://nome host o indirizzo IP):15672/" di un client, quindi viene visualizzato il modulo di accesso RabbitMQ, accedere con un utente amministratore.
Dashboard con nodi del cluster