RabbitMQ es un software de intermediario de mensajería gratuito, de código abierto y multiprotocolo escrito en el lenguaje de programación Erlang. Un intermediario de mensajes se utiliza para almacenar mensajes para una aplicación. Cuando una aplicación envía datos a otra aplicación, la aplicación publica el mensaje en el intermediario de mensajes. RabbitMQ admite múltiples protocolos de mensajería y se puede implementar fácilmente en configuraciones distribuidas. El intermediario de mensajes actúa como intermediario para varias aplicaciones web y se utiliza para reducir las cargas y el tiempo de entrega de la aplicación web.
En este tutorial, configuraremos un clúster RabbitMQ de tres nodos en el servidor Ubuntu 20.04.
Requisitos
- Tres servidores con Ubuntu 20.04.
- Se configura una contraseña raíz en cada servidor.
Cómo empezar
Antes de comenzar, deberá actualizar los paquetes de su sistema a la última versión. Puede actualizarlos ejecutando el siguiente comando en cada nodo:
apt-get update -y
Una vez que se actualicen todos los paquetes, deberá configurar el archivo /etc/hosts en cada nodo. Para que puedan comunicarse entre sí por nombre de host.
Edite el archivo /etc/hosts en cada nodo con el siguiente comando:
nano /etc/hosts
Agregue las siguientes líneas:
192.168.0.10 node1 192.168.0.11 node2 192.168.0.12 node3
Guarde y cierre el archivo cuando haya terminado. A continuación, puede continuar con el siguiente paso.
Instalar servidor RabbitMQ
A continuación, deberá instalar el paquete del servidor RabbitMQ en cada nodo. Puede instalarlo simplemente ejecutando el siguiente comando:
apt-get install rabbitmq-server -y
Una vez instalado, inicie el servicio RabbitMQ y habilítelo para que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
También puede verificar el estado del servicio RabbitMQ con el siguiente comando:
systemctl status rabbitmq-server
Deberías obtener el siguiente resultado:
? rabbitmq-server.service - RabbitMQ Messaging Server Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-07-21 06:25:07 UTC; 19min ago Main PID: 2565 (beam.smp) Status: "Initialized" Tasks: 87 (limit: 2353) Memory: 83.5M CGroup: /system.slice/rabbitmq-server.service ??2551 /bin/sh /usr/sbin/rabbitmq-server ??2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1> ??2828 erl_child_setup 65536 ??2921 inet_gethost 4 ??2922 inet_gethost 4 Jul 21 06:24:58 node1 systemd[1]: Starting RabbitMQ Messaging Server... Jul 21 06:25:07 node1 systemd[1]: rabbitmq-server.service: Supervising process 2565 which is not our child. We'll most likely not notice when > Jul 21 06:25:07 node1 systemd[1]: Started RabbitMQ Messaging Server.
En este punto, el servidor RabbitMQ está instalado y ejecutándose en cada nodo. Ahora puede continuar con el siguiente paso.
Habilitar los complementos de administración de RabbitMQ
El complemento de administración de RabbitMQ proporciona una API basada en HTTP que se puede usar para monitorear y administrar nodos y clústeres de RabbitMQ a través de un navegador web. Por defecto, se ejecuta en el puerto TCP 15672.
Puede habilitar el complemento de administración de RabbitMQ ejecutando el siguiente comando en cada nodo:
rabbitmq-plugins enable rabbitmq_management
Debería ver el siguiente resultado:
Enabling plugins on node [email protected]: rabbitmq_management The following plugins have been configured: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to [email protected] The following plugins have been enabled: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch started 3 plugins.
A continuación, reinicie el servicio RabbitMQ para aplicar los cambios:
systemctl restart rabbitmq-server
Puede verificar el puerto de escucha con el siguiente comando:
netstat -tunelp | grep 15672
Debería ver el siguiente resultado:
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 109 23155 2565/beam.smp
Configurar el clúster de RabbitMQ
De forma predeterminada, el archivo /var/lib/rabbitmq/.erlang.cookie es el mismo en cada nodo. Para configurar el clúster RabbitMQ, deberá copiar el archivo /var/lib/rabbitmq/.erlang.cookie del nodo1 a otros nodos.
En el nodo 1, ejecute el siguiente comando para copiar el archivo /var/lib/rabbitmq/.erlang.cookie a los otros nodos.
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
A continuación, deberá configurar el nodo 1 y el nodo 2 para unirse al nodo 1 del clúster.
Primero, reinicie el servicio RabbitMQ y detenga la aplicación con el siguiente comando tanto en el nodo 2 como en el nodo 3:
systemctl restart rabbitmq-server
rabbitmqctl stop_app
En el nodo2, únase al clúster en el nodo1 ejecutando el siguiente comando:
rabbitmqctl join_cluster [email protected]
Debería ver el siguiente resultado:
Clustering node [email protected] with [email protected]
En el nodo2, inicie la aplicación con el siguiente comando:
rabbitmqctl start_app
Debería ver el siguiente resultado:
Starting node [email protected] ... completed with 3 plugins.
En el nodo 3, únase al clúster en el nodo 1 ejecutando el siguiente comando:
rabbitmqctl join_cluster [email protected]
Debería ver el siguiente resultado:
Clustering node [email protected] with [email protected]
En el nodo 3, inicie la aplicación con el siguiente comando:
rabbitmqctl start_app
Debería ver el siguiente resultado:
Starting node [email protected] ... completed with 3 plugins.
Una vez que haya terminado con éxito, verifique el estado del clúster ejecutando el siguiente comando en el nodo 1:
rabbitmqctl cluster_status
Debería ver el siguiente resultado:
Cluster status of node [email protected] ... Basics Cluster name: [email protected] Disk Nodes [email protected] [email protected] [email protected] Running Nodes [email protected] [email protected] [email protected] Versions [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 Alarms (none) Network Partitions (none) Listeners Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API Feature flags Flag: drop_unroutable_metric, state: disabled Flag: empty_basic_get_metric, state: disabled Flag: implicit_default_bindings, state: enabled Flag: quorum_queue, state: enabled Flag: virtual_host_metadata, state: enabled
Configurar usuario administrador
A continuación, deberá crear un nuevo usuario administrador para el servidor RabbitMQ y eliminar el usuario "invitado" predeterminado.
Puede crear un nuevo usuario llamado "hitesh" y una contraseña "contraseña" ejecutando el siguiente comando en el nodo1:
rabbitmqctl add_user hitesh password
Debería ver el siguiente resultado:
Adding user "hitesh" ...
A continuación, configure el usuario hitesh como administrador con el siguiente comando:
rabbitmqctl set_user_tags hitesh administrator
Debería ver el siguiente resultado:
Setting tags for user "hitesh" to [administrator] ...
A continuación, otorgue al usuario hitesh permiso para modificar, escribir y leer todos los hosts virtuales.
rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"
Debería ver el siguiente resultado:
Setting permissions for user "hitesh" in vhost "/" ...
A continuación, elimine el usuario invitado con el siguiente comando:
rabbitmqctl delete_user guest
Debería obtener el siguiente comando:
Deleting user "guest" ...
Ahora puede enumerar todos los usuarios con el siguiente comando:
rabbitmqctl list_users
Deberías obtener el siguiente resultado:
Listing users ... user tags hitesh [administrator]
Su usuario que ha creado en el nodo 1 se replicará automáticamente en todos los nodos del clúster.
Duplicación de cola de configuración de RabbitMQ
De forma predeterminada, el contenido de una cola se encuentra en un solo nodo. Por lo tanto, deberá configurar el clúster de 'política ha' para la duplicación de colas y la replicación en todos los nodos del clúster.
Para hacerlo, cree una política ha llamada 'ha-all' que todas las colas en el clúster de RabbitMQ reflejarán en todos los nodos del clúster.
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
Salida:
Setting policy "ha-all" for pattern ".*" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
A continuación, cree una política ha llamada 'ha-dos' en la que todos los nombres de cola comiencen con 'dos'. se reflejará en los dos nodos del clúster.
rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
Salida:
Setting policy "ha-two" for pattern "^two\." to "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...
A continuación, cree una política de alta disponibilidad llamada 'ha-nodes' que contendrá todas las colas cuyo nombre comience con 'nodes'. Reflejaremos dos nodos específicos 'nodo2' y 'nodo3' en el clúster.
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}'
Salida:
Setting policy "ha-nodes" for pattern "^nodes\." to "{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}" with priority "0" for vhost "/" ...
Ahora puede enumerar todas las políticas configuradas ejecutando el siguiente comando:
rabbitmqctl list_policies;
Debería ver el siguiente resultado:
Listing policies for vhost "/" ... vhost name pattern apply-to definition priority / ha-all .* all {"ha-mode":"all"} 0 / ha-two ^two\. all {"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"} 0 / ha-nodes ^nodes\. all {"ha-mode":"nodes","ha-params":["[email protected]","[email protected]"]} 0
Una vez que haya terminado, puede continuar con el siguiente paso.
Acceder al clúster de RabbitMQ
Ahora puede acceder a la interfaz web de RabbitMQ escribiendo la dirección IP de cualquier nodo en su navegador web con el puerto 15672 como http://192.168.0.10:15672/. Debería ver la página de inicio de sesión de RabbitMQ:
Proporcione su nombre de usuario y contraseña de administrador y haga clic en Iniciar sesión botón. Debería ver el panel de RabbitMQ en la siguiente pantalla:
A continuación, haga clic en 'Administrador ' y haga clic en el menú 'Políticas 'menú. Debería ver todas las políticas RabbitMQ ha que hemos creado en la siguiente pantalla:
Conclusión
¡Felicidades! Ha configurado correctamente el clúster RabbitMQ de tres nodos en el servidor Ubuntu20.04. Su clúster ahora comparte información de configuración, incluida la topología y la información de seguridad en todos los nodos.