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.
- Crear el Usuario:
sudo rabbitmqctl add_user nksistemas TU_PASSWORD
- 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.






