Cómo configurar un clúster RabbitMQ en CentOS 7
RabbitMQ es un software de colas de mensajes de código abierto que originalmente implementa 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).
RabbitMQ es el software de cola de mensajes que ofrece soporte para enviar y recibir mensajes entre sistemas distribuidos, aplicaciones y servicios. Está escrito con el lenguaje de programación Erlang y admite interfaces de cliente y bibliotecas para los principales lenguajes de programación, como Python, NodeJS, Java, PHP, etc.
En este tutorial, te mostraré paso a paso cómo configurar el Clúster RabbitMQ en un Servidor CentOS 7. Configuraremos el Cluster RabbitMQ utilizando tres servidores CentOS, habilitaremos la Gestión de RabbitMQ, y configuraremos la política de HA para todos los nodos.
Requisitos previos
- 3 o más Servidores CentOS 7
- 10.0.15.21 nodo01
- 10.0.15.22 nodo02
- 10.0.15.23 nodo03
- Privilegios de root
¿Qué vamos a hacer?
- Configurar el Archivo Hosts
- Instalar el Servidor RabbitMQ
- Habilitar los plugins de gestión de RabbitMQ
- Configurar Firewalld
- Configurar el Cluster RabbitMQ
- Configurar un nuevo usuario administrador
- Configurar la réplica de colas de RabbitMQ
- 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’ utilizando el editor vim.
sudo vim /etc/hosts
Ahora pega allí la siguiente configuración.
10.0.15.21 node01 10.0.15.22 node02 10.0.15.23 node03
Guarda y sal.
Paso 2 – Instalar el Servidor RabbitMQ
En este paso, instalaremos los paquetes del Servidor RabbitMQ desde el repositorio EPEL (Extra Packages for Enterprise Linux).
Añade el repositorio EPEL al sistema CentOS 7.
sudo yum -y install epel-release
Ahora instala RabbitMQ Server en todos los nodos ‘node01’, ‘node02’ y ‘node03’ utilizando el comando yum que aparece a continuación.
sudo yum -y install rabbitmq-server
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 todos los nodos del cluster CentOS 7.
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, ejecutándose 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 se produce ningún error y, a continuación, reinicia el servicio RabbitMQ.
sudo systemctl restart rabbitmq-server
Y la gestión de RabbitMQ ha sido habilitada.
Paso 4 – Configurar CentOS Firewalld
En este tutorial, habilitaremos el servicio firewalld de CentOS, por lo que necesitamos abrir el puerto que utiliza el servidor RabbitMQ.
Abriremos el puerto que utiliza el servidor RabbitMQ ‘5672’, el puerto para la gestión de RabbitMQ ‘15672’, y los puertos para el cluster RabbitMQ ‘4369, 25672’.
Ejecuta los siguientes comandos firewalld.
sudo firewall-cmd --add-port=15672/tcp --permanent sudo firewall-cmd --add-port=5672/tcp --permanent sudo firewall-cmd --add-port={4369/tcp,25672/tcp} --permanent
Ahora recarga firewalld y comprueba todos los puertos abiertos de la lista.
sudo firewall-cmd --reload sudo firewall-cmd --list-all
La configuración de firewalld en CentOS se ha completado, y estamos listos para configurar el Cluster RabbitMQ.
Paso 5 – Configurar el Cluster RabbitMQ
Para configurar el clúster 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’ del ‘nodo01’ a los otros nodos ‘nodo02’ y ‘nodo03’.
Copia el archivo ‘.erlang.cookie’ utilizando comandos scp desde el ‘nodo01’.
scp /var/lib/rabbitmq/.erlang.cookie root@node02:/var/lib/rabbitmq/ scp /var/lib/rabbitmq/.erlang.cookie root@node03:/var/lib/rabbitmq/
Asegúrate de que no se produce ningún error en ambos servidores.
A continuación, tenemos que configurar el ‘nodo02’ y el ‘nodo03’ para que se unan al cluster ‘nodo01’.
Ejecuta todos los comandos siguientes en los servidores ‘node02’ y ‘node03’.
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 clúster del ‘nodo01’, y luego inicia la app.
sudo rabbitmqctl join_cluster rabbit@node01 sudo rabbitmqctl start_app
Cuando se haya completado, comprueba el estado del clúster RabbitMQ.
sudo rabbitmqctl cluster_status
Y obtendrás los resultados que se muestran a continuación.
En el ‘nodo02’.
En el ‘nodo03’.
El Cluster RabbitMQ ha sido creado, con node01, node02, y node03 como miembros.
Paso 6 – Crear un Nuevo Usuario Administrador
En este tutorial, crearemos un nuevo usuario administrador para nuestro servidor RabbitMQ y borraremos el usuario «invitado» por defecto. Crearemos un nuevo usuario desde ‘nodo01’, 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 RabbitMQ, y se ha eliminado el usuario «invitado» por defecto.
Paso 7 – Configuración de RabbitMQ Queue Mirroring
Esta configuración es imprescindible, necesitamos 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 la cola maestra falla, la réplica más antigua será promovida a la nueva maestra siempre que esté sincronizada, depende de las políticas ‘ha-mode’ y ‘ha-params’.
A continuación se muestran algunos ejemplos sobre las políticas ha de RabbitMQ.
Establece una política ha llamada ‘ha-all’ que reflejará todas las colas del clúster RabbitMQ a todos los nodos del clúster.
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
Establece una política ha llamada «ha-dos» que refleje todas las colas cuyo nombre empiece por «dos» en los dos nodos del clúster.
sudo rabbitmqctl set_policy ha-two "^two\." \ '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
Establece una política ha llamada «ha-nodos» cuyos nombres de cola empiecen por «nodos» y se reflejarán en dos nodos específicos «nodo02» y «nodo03» del clúster.
sudo rabbitmqctl set_policy ha-nodes "^nodes\." \ '{"ha-mode":"nodes","ha-params":["rabbit@node02", "rabbit@node03"]}'
Ahora comprueba todas las políticas disponibles utilizando el comando siguiente.
sudo rabbitmqctl list_policies;
Y si quieres eliminar la política, utiliza el siguiente comando.
sudo rabbitmqctl clear_policy ha-two
Paso 8 – Pruebas
Abre tu navegador web y escribe la dirección IP del nodo con puerto ‘15672’.
http://10.0.15.21: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.
Todos los nodos del clúster están funcionando.
Ahora haz clic en el menú de la pestaña «Admin», y haz clic en el menú «Usuarios» del lateral.
Aparecerá el usuario hakase en la lista.
Ahora haz clic en la pestaña «Admin» y en el menú lateral «Políticas».
Y obtendrás todas las políticas de RabbitMQ ha que hemos creado.
La instalación y configuración del Cluster RabbitMQ en el servidor CentOS 7 se ha completado con éxito.