Instalar y configurar un cluster de RabbitMQ en Debian12 o Ubuntu22.x

Published:

RabbitMQ emerge como una solución de software de brokering de mensajes altamente eficiente, abrazando la naturaleza de código abierto y la compatibilidad con múltiples protocolos, todo ello forjado en el robusto lenguaje Erlang. Este broker de mensajes sirve como un repositorio centralizado para almacenar comunicaciones entre aplicaciones, facilitando la transmisión de datos de un punto a otro. Con su capacidad para soportar diversos protocolos de mensajería, RabbitMQ se implementa con facilidad en ambientes distribuidos, ofreciendo un puente vital entre diferentes aplicaciones web. Su uso se traduce en una notable optimización de cargas de trabajo y una aceleración en los tiempos de respuesta de las aplicaciones web.

En el siguiente tutorial, abordaremos el proceso para instalar un servidor de RabbitMQ compuesto para la plataforma de un servidor con Ubuntu 22 o Debian 12.

Requisitos Previos

  • Crear un usuario con permisos de sudo llamado rabbit.
  • Establecimiento de una contraseña de root en cada uno de los servidores.
  • 3 servidores iguales, idealmente con llaves cruzadas para facilitar la gestión.

IMPORTANTE: Los pasos que voy a mostrar serán del 1 al 4 en todos los nodos. Después voy a ir aclarando que se hace en el primario y los secundarios.

1- DNS

Lo primero será contar con los dns correctos, si estamos en una red corporativa será necesario agregar los dns correspondientes o solicitar el alta, si no, podemos usar el archivos hosts local. El procedimiento lo hice con el usuario rabbit: su –  rabbit

sudo nano /etc/hosts

Agregamos los nodos con sus ip correspondientes

192.168.0.100 node1
192.168.0.101 node2
192.168.0.102 node3

2- Repositorios

De la web oficial cargue los repositorios necesarios pero antes como pre-requisito es necesario contar con las siguientes herramientas en el sistema.

sudo apt-get install curl wget gnupg apt-transport-https -y 

2.1- Cargamos las llaves necesarias

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null 

2.2- Y los repositorios de Erlang

Erlang es un lenguaje de programación y se destaca por su enfoque en la tolerancia a fallos, la capacidad de realizar actualizaciones en caliente (es decir, actualizar el sistema sin detenerlo), y su modelo de concurrencia basado en actores.

Para instalar RabbitMQ, es relevante saber que Erlang es una dependencia crítica, ya que RabbitMQ está escrito en Erlang. Esto significa que para ejecutar RabbitMQ, primero debes tener Erlang instalado en tu sistema. La compatibilidad entre la versión de RabbitMQ que planeas instalar y la versión de Erlang disponible en tu sistema es un aspecto crucial para asegurar el funcionamiento óptimo del broker de mensajes.

curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null 

Mirror del repo de RabbitMQ

curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null 

2.3- Repositorio de rabbit

Agregamos un nuevo archivo en sources.list.d

sudo nano /etc/apt/sources.list.d/rabbitmq.list

Pegamos los repositorios

deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main 
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main 
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main 
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main 
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main 
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main 
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main 
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main 

2.4- Si estas usando Debian 12, vas a necesitar una librería adicional

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb 

Instalamos el paquete

sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb 

Actualizamos

sudo apt-get update

2.5- Ahora instalamos el paquete de Erlang

sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

2.6- Instalación de RabbitMQ

sudo apt-get install rabbitmq-server -y --fix-missing 

3- Iniciar los servicios y verificar estado del mismo

Iniciar servicios y verificar status

sudo systemctl start rabbitmq-server ; sudo systemctl status rabbitmq-server 

4- Habilitar la UI de administración web

sudo rabbitmq-plugins enable rabbitmq_management 

Ingresar por navegador a

http://<your_server_ip_address>:15672 

5- Crear usuario

Ya podemos crear un usuario en el primer nodo. Crearé el usuario admin, con la contraseña TU_PASSWORD, tendrá los tags de admin y los permisos totales. Después veremos como crear más usuarios

sudo rabbitmqctl add_user "admin" "TU_PASSWORD" 
sudo rabbitmqctl set_user_tags "admin" administrator 
sudo rabbitmqctl set_permissions admin ".*" ".*" ".*" 

5.1- Cambiar la pass

En el caso de necesitar cambiar la pass hacemos.

sudo rabbitmqctl change_password admin NuevaContraseña 

6- Si nos va a aparecer un mensaje, opcional de momento.

⚠ All stable feature flags must be enabled after completing an upgrade.  

Lo solucionamos habilitando todos los flags necesarios o podemos habilitar todos

sudo rabbitmqctl enable_feature_flag all 

7- Creación del Cluster

7.1- En el nodo principal copiamos el valor del archivo .erlang.cookie, que es un ID único.

cat /var/lib/rabbitmq/.erlang.cookie 

7.2- Y lo pegamos en los nodos 2 y 3, en la misma ubicación y archivo. Reemplazamos el existente por el del nodo1.

7.3- Importante Reiniciar los servicios al reemplazar el ID.

sudo systemctl restart rabbitmq-server.service 

7.4- Y lo unimos los nodos 2 y 3 al nodo1, siguiendo estos pasos.

7.4.1- Primero detenemos la app

sudo rabbitmqctl stop_app

7.4.12 – Hacemos un reset de MQ

sudo rabbitmqctl reset

7.4.3 – Unimos el nodo2 y 3 al primario

sudo rabbitmqctl join_cluster rabbit@node1

7.4.5 – Levantamos la app de nuevo

sudo rabbitmqctl start_app 

7.4.6 – Verificamos el estado del cluster

sudo rabbitmqctl cluster_status 

7.5- Configurar HA policy de Rabbit

sudo rabbitmqctl set_policy ha-all "." '{"ha-mode":"all"}' 

Esto permitirá que replique la configuración entro los nodos.

7.6- Listar las politicas.

sudo rabbitmqctl list_policies 

7.7- Eliminar una policy



sudo rabbitmqctl clear_policy <policyname>

8- Crear un Host Virtual en RabbitMQ

Un host virtual, o vhost, en RabbitMQ actúa como un namespace separado para las colas, intercambios y enlaces, proporcionando una capa de aislamiento dentro del servidor. Para crear un nuevo vhost llamado test1:

sudo rabbitmqctl add_vhost test1

8.1- Crear un usuario nksistemas y darle permisos de admin

A continuación, vamos a crear un usuario que tendrá los privilegios de administrador en nuestro sistema RabbitMQ. Usaremos nksistemas como nuestro ejemplo de usuario, con una contraseña segura.

  1. Crear el Usuario:
sudo rabbitmqctl add_user nksistemas TU_PASSWORD
  1. Asignar Rol de Administrador al Usuario:
sudo rabbitmqctl set_user_tags nksistemas administrator

Este paso etiqueta al usuario nksistemas como administrador, otorgándole permisos para gestionar el servidor RabbitMQ.

8.2- Establecer Permisos en el VHost

Para que el usuario nksistemas pueda administrar el vhost test1, necesitamos asignarle permisos específicos.

sudo rabbitmqctl set_permissions -p test1 nksistemas ".*" ".*" ".*"

Este comando concede al usuario nksistemas permisos para configurar, leer y escribir todas las entidades dentro del vhost test1.

8.3- Verificar la Configuración

Finalmente, es una buena práctica verificar que los vhosts y los permisos del usuario se hayan configurado correctamente.

  • Listar los VHosts:
sudo rabbitmqctl list_vhosts
  • Verificar Permisos del Usuario:
sudo rabbitmqctl list_user_permissions nksistemas

Este paso confirma que el usuario nksistemas tiene los permisos adecuados asignados en el vhost test1.

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles