Cómo configurar el clúster RabbitMQ en Ubuntu 18.04 LTS
RabbitMQ es un software de código abierto de intermediación de mensajes que originalmente implementaba el protocolo AMQP (Advanced Message Queuing Protocol), y aunque se ha desarrollado y ampliado para soportar otros protocolos como STOMP (Streaming Text Oriented Messaging Protocol), y MQTT (Message Queuing Telemetry Transport).
Un software de cola de mensajes / corredor de mensajes se utiliza para enviar y recibir mensajes entre sistemas distribuidos, aplicaciones y servicios. RabbitMQ está escrito en el lenguaje de programación Erlang, y ofrece soporte para interfaces de cliente y bibliotecas para los principales lenguajes de programación, como Python, NodeJS, Java, PHP, etc.
En este tutorial, te mostraré cómo configurar un clúster de RabbitMQ en un servidor Ubuntu 18.04. Instalaré un clúster de RabbitMQ utilizando tres servidores Ubuntu, habilitaré la gestión de RabbitMQ y configuraré la política de HA para todos los nodos.
Requisitos previos
- 3 o más servidores Ubuntu 18.04
- 10.0.15.21 hakase-ubuntu01
- 10.0.15.22 hakase-ubuntu02
- 10.0.15.23 hakase-ubuntu03
- Privilegios de root
¿Qué vamos a hacer?
- Configurar el archivo de hosts
- Instalar el servidor RabbitMQ
- Habilitar los plugins de gestión
- Configurar el Firewall UFW
- Configurar el Cluster RabbitMQ
- Configurar un nuevo usuario administrador
- Configurar RabbitMQ Queue Mirroring
- Probar
Paso 1 – Configurar el archivo Hosts
En este paso, editaremos el archivo ‘/etc/hosts’ en todos los servidores y mapearemos cada dirección IP del servidor como un nombre de host.
Edita el archivo ‘/etc/hosts’ con el editor vim.
sudo vim /etc/hosts
Ahora pega allí la siguiente configuración.
10.0.15.21 hakase-ubuntu01 10.0.15.22 hakase-ubuntu02 10.0.15.23 hakase-ubuntu03
Guarda y sal.
Paso 2 – Instalar el servidor RabbitMQ
Antes de instalar el servidor RabbitMQ, asegúrate de que todos los repositorios están actualizados.
Ejecuta el siguiente comando.
sudo apt update
sudo apt upgrade
Ahora instala los paquetes del servidor RabbitMQ desde el repositorio de Ubuntu utilizando el siguiente comando apt.
sudo apt install rabbitmq-server -y
Y una vez completada la instalación, inicia el servicio RabbitMQ y habilítalo para que se inicie siempre al arrancar el sistema.
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
El servidor RabbitMQ ha sido instalado en Ubuntu 18.04.
Paso 3 – Habilitar los plugins de gestión de RabbitMQ
En este paso, habilitaremos los plugins de gestión de RabbitMQ. Es una interfaz que te permite monitorizar y manejar el servidor RabbitMQ desde el navegador web, que se ejecuta en el puerto TCP por defecto ‘15672’.
Habilita los plugins de gestión de RabbitMQ ejecutando el siguiente comando.
sudo rabbitmq-plugins enable rabbitmq_management
Asegúrate de que no hay ningún error, y luego reinicia el servicio RabbitMQ.
sudo systemctl restart rabbitmq-server
Los plugins de gestión de RabbitMQ han sido habilitados.
Paso 4 – Configurar el cortafuegos UFW
En este tutorial, habilitaremos el cortafuegos UFW de Ubuntu. Necesitamos abrir algunos puertos que serán utilizados por el servidor RabbitMQ.
Añade el servicio ssh al cortafuegos UFW y habilita el servicio de cortafuegos.
sudo ufw allow ssh
sudo ufw enable
Ahora añade los nuevos puertos tcp de RabbitMQ ‘5672,15672,4369,25672’.
sudo ufw allow 5672,15672,4369,25672/tcp
A continuación, comprueba la lista de puertos del cortafuegos UFW.
sudo ufw status
La configuración del cortafuegos UFW de Ubuntu se ha completado, y estamos listos para configurar el Cluster RabbitMQ.
Paso 5 – Configurar el Cluster RabbitMQ
Para configurar el cluster RabbitMQ, necesitamos asegurarnos de que el archivo ‘.erlang.cookie’ es el mismo en todos los nodos. Copiaremos el archivo ‘.erlang.cookie’ en el directorio ‘/var/lib/rabbitmq’ de ‘hakase-ubuntu01’ al otro nodo ‘hakase-ubuntu02’ y ‘hakase-ubuntu03’.
Copia el archivo ‘.erlang.cookie’ utilizando los comandos scp desde el ‘hakase-ubuntu01’.
scp /var/lib/rabbitmq/.erlang.cookie root@hakase-ubuntu02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@hakase-ubuntu03:/var/lib/rabbitmq/
Asegúrate de que no hay ningún error en ambos servidores.
A continuación, tenemos que configurar ‘hakase-ubuntu02’ y ‘hakase-ubuntu03’ para que se unan al clúster ‘hakase-ubuntu01’.
Nota:
- Ejecuta los siguientes comandos en los servidores ‘hakase-ubuntu02’ y ‘hakase-ubuntu03’.
Reinicia el servicio RabbitMQ y detén la aplicación.
sudo systemctl restart rabbitmq-server
sudo rabbitmqctl stop_app
Ahora deja que el servidor RabbitMQ de ambos nodos se una al cluster en ‘hakase-ubuntu01’, y luego inicia la app.
sudo rabbitmqctl join_cluster rabbit@hakase-ubuntu01
sudo rabbitmqctl start_app
Cuando esté completa, comprueba el estado del cluster RabbitMQ.
sudo rabbitmqctl cluster_status
Y obtendrás los resultados que se muestran a continuación
El Cluster RabbitMQ ha sido creado, con hakase-ubuntu01, hakase-ubuntu02, y hakase-ubuntu03 como miembros.
Paso 6 – Configurar un nuevo usuario administrador
En este tutorial, crearemos un nuevo usuario administrador para nuestro servidor RabbitMQ y eliminaremos el usuario «invitado» por defecto. Crearemos un nuevo usuario desde ‘hakase-ubuntu01’, y se replicará automáticamente a todos los nodos del cluster.
Añade un nuevo usuario llamado ‘hakase’ con la contraseña ‘aqwe123@’.
sudo rabbitmqctl add_user hakase aqwe123@
Configura el usuario ‘hakase’ como administrador.
sudo rabbitmqctl set_user_tags hakase administrator
Y concede al usuario ‘hakase’ permiso para modificar, escribir y leer todos los vhosts.
sudo rabbitmqctl set_permissions -p / hakase ".*" ".*" ".*"
Ahora elimina el usuario «invitado» por defecto.
sudo rabbitmqctl delete_user guest
Y comprueba todos los usuarios disponibles.
sudo rabbitmqctl list_users
Y obtendrás el resultado que se muestra a continuación.
Se ha creado un nuevo usuario administrador de RabbitMQ, y se ha eliminado el usuario «invitado» por defecto.
Paso 7 – Configuración de RabbitMQ para la duplicación de colas
Por defecto, el contenido de una cola dentro de un cluster RabbitMQ se encuentra en un único nodo (el nodo en el que se declaró la cola).
Esta configuración es imprescindible, tenemos que configurar el cluster «ha policy» para la réplica de colas y la replicación a todos los nodos del cluster. Si el nodo que aloja el maestro de la cola falla, la réplica más antigua será promovida al nuevo maestro siempre que esté sincronizada, depende de las políticas ‘ha-mode’ y ‘ha-params’.
A continuación, algunos ejemplos sobre las políticas ha de RabbitMQ.
Establece una política ha llamada ‘ha-all’ que reflejará todas las colas del cluster RabbitMQ en todos los nodos del cluster.
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
Establece una política ha llamada «ha-dos» en la que todas las colas que empiecen por «dos» se reflejarán en los dos nodos del clúster.
sudo rabbitmqctl set_policy ha-two "^two\." \
'{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
Configura una política de alta disponibilidad llamada ‘ha-nodes’ que contendrá todas las colas cuyo nombre empiece por ‘nodes’. Haremos una réplica en dos nodos específicos ‘hakase-ubuntu02’ y ‘hakase-ubuntu03’ del clúster.
sudo rabbitmqctl set_policy ha-nodes "^nodes\." \
'{"ha-mode":"nodes","ha-params":["rabbit@hakase-ubuntu02", "rabbit@hakase-ubuntu03"]}'
RabbitMQ lista las políticas ha.
sudo rabbitmqctl list_policies;
RabbitMQ elimina una política ha específica.
sudo rabbitmqctl clear_policy ha-two
Paso 8 – Prueba
Abre tu navegador web y escribe la dirección IP del nodo con el puerto ‘15672’.
Escribe el nombre de usuario ‘hakase’ con la contraseña ‘aqwe123@’.
Y obtendrás el panel de administración de RabbitMQ como se muestra a continuación.
El estado de todos los nodos del clúster está en funcionamiento.
Ahora haz clic en el menú de la pestaña «Admin», y haz clic en el menú «Usuarios» en el lateral.
Y aparecerá el usuario hakase en la lista.
Ahora haz clic en el menú de la pestaña «Admin», y haz clic en el menú «Políticas» en el lateral.
Y obtendrás todas las políticas de RabbitMQ ha que hemos creado.
La instalación y configuración del Cluster RabbitMQ en servidores Ubuntu 18.04 se ha completado con éxito.