GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar el clúster RabbitMQ en Ubuntu/Debian Linux

¿Quieres reducir las cargas de trabajo y los tiempos de entrega de tus aplicaciones? Ahórrese dolores de cabeza y configure un clúster RabbitMQ para su aplicación.

En este tutorial, aprenderá cómo configurar el clúster RabbitMQ y tener un clúster RabbitMQ completamente funcional con soporte de alta disponibilidad.

¿Listo? ¡Siga leyendo y comience a reducir las cargas de trabajo!

Requisitos previos

Para seguir este tutorial, asegúrese de cumplir con los siguientes requisitos:

  • Dos o más servidores Linux en la misma red:este tutorial utiliza tres servidores Debian 11 llamados node01, node02 y node03.
  • Privilegios de root de Sudo o acceso a la cuenta de root/administrador.

Configurando un archivo de hosts

El clúster RabbitMQ funciona con el nombre de host o el dominio local. Debe asegurarse de que cada nombre de host se resuelva en la dirección IP del servidor editando el /etc/hosts archivo.

Abre el /etc/hosts archivo en todos los servidores usando su editor de texto preferido y agregue las siguientes líneas al archivo.

Recuerde que editar el archivo /etc/hosts requiere un privilegio sudo.

El formato de /etc/hosts la configuración es IP-address hostname .

Reemplace los valores a continuación con las direcciones IP y los nombres de host de sus servidores, guarde los cambios y salga del editor.

# /etc/hosts file RabbitMQ Servers
172.16.1.20     node01
172.16.1.21     node02
172.16.1.22     node03

Ahora, ejecuta el ping comando a continuación para verificar que cada nombre de host se resuelva en la dirección IP correcta del servidor. Cada -c 3 opción hace ping solicitudes tres veces, luego finaliza las solicitudes.

# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03

Si su configuración es correcta, verá que cada nombre de host se resuelve en la dirección IP correcta del servidor, como se muestra a continuación.

Instalando RabbitMQ en Todos los Servidores

Ahora que ha configurado el /etc/hosts en todos los servidores, es hora de instalar los paquetes de RabbitMQ en todos los servidores (node01, node02 y node03). Puede instalar RabbitMQ desde el repositorio de distribución oficial para la mayoría de las distribuciones de Linux.

En el momento de escribir este artículo, el repositorio de Debian y Ubuntu proporciona la última versión estable de RabbitMQ 3.8.9.

1. Ejecute el apt Comando a continuación para actualizar todos los índices de paquetes de su sistema.

sudo apt update

2. A continuación, ejecute el siguiente apt install comando para instalar RabbitMQ (rabbitmq-server ) en su sistema.

Una vez completada la instalación, el rabbitmq-server El servicio se inicia y habilita automáticamente en su sistema.

sudo apt install rabbitmq-server -y

3. Por último, ejecute el siguiente comando para verificar el rabbitmq-server estado del servicio.

sudo systemctl status rabbitmq-server

A continuación, puede ver que el servicio del servidor RabbitMQ está activo (en ejecución) y habilitado . Como resultado, los servicios se inician automáticamente en el arranque/inicio del sistema.

Además, también puede verificar la versión de RabbitMQ en su sistema usando el siguiente comando.

sudo rabbitmq-diagnostics server_version

La versión de RabbitMQ instalada es 3.8.9 , como se muestra a continuación, pero el suyo puede ser diferente.

Configuración del clúster RabbitMQ

Una vez que haya instalado RabbitMQ, es hora de configurar el clúster de RabbitMQ. El uso del clúster RabbitMQ evita la pérdida y pérdida de datos entre sus aplicaciones. El clúster RabbitMQ proporciona replicación y alta disponibilidad en todos los servidores.

RabbitMQ es una aplicación escrita en Erlang y, de forma predeterminada, proporciona una .erlang.cookie archivo en el directorio de datos de RabbitMQ (/var/lib/rabbitmq) .

Para crear un clúster de RabbitMQ, configurará una .erlang.cookie archivo en cada servidor con el mismo contenido y debe ser propiedad del rabbitmq usuario y grupo.

1. En el servidor node01, ejecute el siguiente comando para comprobar los archivos disponibles en el directorio de datos de RabbitMQ (/var/lib/rabbitmq ). El comando luego imprime el contenido del .erlang.cookie expediente.

# List files and directories on /var/lib/rabbitmq
ls -lah /var/lib/rabbitmq

# Print content of the file .erlang.cookie
cat /var/lib/rabbitmq/.erlang.cookie

Copie la salida (UXPBSDKHLRMGJSOJVEAN ) a su nota porque agregará esta salida a los servidores node02 y node03 en los siguientes pasos. Tenga en cuenta que puede obtener una salida diferente del .erlang.cookie. archivo que lo que se muestra a continuación.

2. A continuación, vaya al servidor node02 y ejecute el siguiente comando para stop el rabbitmq Servicio.

sudo systemctl stop rabbitmq-server

3. Edite el /var/lib/rabbitmq/.erlang.cookie archivo en su editor de texto preferido. Reemplace el contenido original con el que anotó en el paso uno, guarde los cambios y salga del editor.

# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN

4. Ahora, ejecute el siguiente comando para iniciar el rabbitmq-server Servicio.

sudo systemctl start rabbitmq-server

5. Cambie al servidor node03 y repita los pasos (dos a cuatro) para editar el /var/lib/rabbitmq/.erlang.cookie archivo.

6. Ejecute el siguiente rabbitmqctl comandos en los servidores node02 y node03 para agregarlos al clúster RabbitMQ (node01).

# Stop RabbitMQ application
sudo rabbitmqctl stop_app

# Join the RabbitMQ node01
sudo rabbitmqctl join_cluster [email protected]

# Start the RabbitMQ application again
sudo rabbitmqctl start_app

A continuación, puede ver que el servidor node02 se está agrupando con el clúster RabbitMQ (node01), y lo mismo ocurre con el servidor node03.

7. Finalmente, ejecuta el rabbitmqctl Comando a continuación para verificar el estado del clúster RabbitMQ. Puede ejecutar esto desde cualquier servidor (node01, node02 o node03).

sudo rabbitmqctl cluster_status

Puede ver en el resultado debajo del nombre del clúster ([email protected] ) y los nodos en ejecución.

Configurar un usuario administrador para RabbitMQ

Después de configurar el clúster RabbitMQ, creará un nuevo usuario administrador para RabbitMQ y eliminará el usuario invitado predeterminado. El usuario administrador de RabbitMQ tiene permiso para configurar, leer y escribir cualquier entidad disponible en el clúster de RabbitMQ.

1. Cambie al servidor node01 y ejecute el rabbitmqctl comando a continuación para crear un nuevo usuario llamado admin con la contraseña establecida como AdminPassRabbitMQ . Puede establecer su nombre de usuario y contraseña preferidos, pero asegúrese de establecer una contraseña segura.

sudo rabbitmqctl add_user admin AdminPassRabbitMQ

2. A continuación, ejecute el siguiente comando para configurar (set_user_tags ) el nuevo usuario (admin ) como administrator para el clúster RabbitMQ.

sudo rabbitmqctl set_user_tags admin administrator

3. Ejecute el siguiente comando para set_permissions al admin usuario con lo siguiente:

  • Permite (-p / ) admin usuario para acceder a todos los hosts virtuales en el clúster de RabbitMQ.
  • Primer ".*" – Permite al usuario configurar permisos para cada entidad y vhosts.
  • Segundo ".*" – Habilita el permiso de escritura para el usuario en cada entidad y vhosts.
  • Tercero ".*" – Habilita el permiso de lectura para el usuario en cada entidad y vhosts.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

4. Ahora, ejecute el siguiente comando para eliminar (delete_user ) el usuario predeterminado (guest ) del clúster RabbitMQ.

sudo rabbitmqctl delete_user guest

5. Finalmente, ejecute el siguiente comando para listar todos los usuarios disponibles (list_users ) en el clúster RabbitMQ.

sudo rabbitmqctl list_users

A continuación, puede ver solo un usuario (admin) . También puede verificar usuarios de otros servidores (node02 y node03) y obtendrá el mismo resultado.

Creando un host virtual y un nuevo usuario administrador en RabbitMQ

Configuró su clúster RabbitMQ y creó un usuario administrador en RabbitMQ. Pero ahora, creará un host virtual (vhost) y usuarios en RabbitMQ, para que su aplicación pueda conectarse a RabbitMQ.

El concepto básico de un host virtual (vhost) en RabbitMQ es similar al de Apache o bloques de servidor en NGINX. Cada host virtual tiene entidades como intercambios, colas, enlaces, permisos de usuario, autenticación, etc.

1. Ejecute el rabbitmqctl comando a continuación para crear un nuevo host virtual (add_vhost ) llamado app-qa1 .

sudo rabbitmqctl add_vhost app-qa1

2. Luego, ejecute los siguientes comandos para crear un nuevo usuario (add_user ) llamado alice con la contraseña AlicePassRabbitMQ y etiqueta al usuario como administrator . Puede configurar el nombre de usuario y la contraseña como prefiera.

# create new user alice
sudo rabbitmqctl add_user alice AlicePassRabbitMQ

# set a tag administrator for user alice
sudo rabbitmqctl set_user_tags alice administrator

3. Ejecute el siguiente comando para establecer permisos para el usuario alice para administrar vhost app-qa1 . Estos permisos permiten al usuario alice para configurar, leer y escribir todas las entidades bajo el vhost app-qa1 .

# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"

4. Finalmente, ejecute cada comando a continuación para enumerar los vhosts disponibles (list_vhosts ) en el clúster RabbitMQ y permisos (list_user_permissions ) del nuevo usuario administrador (alice ).

# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts

# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice

Creación de intercambios, colas y enlaces en RabbitMQ

Su servidor virtual y su usuario administrador están configurados, pero ¿es todo lo que necesita para que su aplicación funcione? Aún deberá crear entidades, como intercambios, colas y enlaces en RabbitMQ. Esas entidades son necesarias para que su aplicación funcione con RabbitMQ.

1. Ejecute el siguiente rabbitmqadmin comando para crear un nuevo intercambio en RabbitMQ llamado test_exchange bajo el app-qa1 vhost y el usuario alice . Puede especificar el tipo de intercambios con el type opción, que es direct para esta demostración.

# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct

2. Luego, ejecute cada comando a continuación para crear nuevas colas en RabbitMQ. En esta demostración, creará el classic predeterminado (test_classic ) y el quorum cola llamada test_quorum .

# create quorum queue with option queue_type=quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_quorum durable=true queue_type=quorum

# create default classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_classic durable=true

3. Ejecute los siguientes comandos para crear enlaces para ambos test_classic y test_quorum colas Cada enlace tiene diferentes routing_key pero aún se ejecuta en el mismo intercambio (test_exchange ).

# create binding for test_quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_quorum" routing_key="test_routing_key_quorum"

# create binding for test_classic
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_classic" routing_key="test_routing_key_classic"

4. Ahora, ejecute los siguientes comandos para publish el hello, world mensaje al test_exchange . Asegúrese de configurar el routing_key. correcto

# publish message for the test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_quorum payload="hello world, Quorum Queue"

# publish message for the test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_classic payload="hello world, Classic Queue"

5. Finalmente, ejecute el siguiente comando para get el hello, world mensaje de test_quorum y test_classic colas

# retrieve the message from test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum

# retrieve the message from test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic

Como se muestra a continuación, sabrá que las colas funcionan si recibe el hello, world mensaje del test_quorum y test_classic colas

Habilitar el complemento de administración RabbitMQ

Has logrado trabajar en RabbitMQ a través de un entorno de línea de comandos hasta ahora. Pero quizás prefiera una GUI para interactuar con los servidores y clústeres de RabbitMQ. Si es así, deberá habilitar el complemento de administración RabbitMQ.

El complemento de administración de RabbitMQ proporciona una interfaz de usuario de administración basada en web que se ejecuta en el puerto predeterminado 15672 y la herramienta de gestión de línea de comandos [rabbitmqadmin]

Ejecute el rabbitmq-plugins comando a continuación en todos los servidores (node01, node02 y node03) para habilitar el rabbitmq_management enchufar. Este comando habilita automáticamente otros complementos necesarios, como rabbitmq_management_agent y rabbitmq_web_dispatch .

sudo rabbitmq-plugins enable rabbitmq_management

A continuación se muestra el resultado similar que verá en la pantalla de su terminal.

Ahora, abra su navegador web y navegue hasta la dirección IP de su servidor seguido del puerto 15672 (http://172.16.1.20:15672/) para acceder a la interfaz de administración basada en web de RabbitMQ. Puerto 15672 se abre automáticamente cuando habilita el complemento de administración RabbitMQ.

Inicie sesión en la página de inicio de sesión de la interfaz de usuario de administración de RabbitMQ con el usuario alice y contraseña AlicePassRabbitMQ .

En el panel de control de RabbitMQ, verá todos los nodos disponibles en el clúster de RabbitMQ.

A continuación, puede ver que todos los nodos del clúster RabbitMQ se ejecutan sin problemas.

Verificación de la alta disponibilidad de la cola de quórum

Anteriormente verificó que los nodos en el clúster de RabbitMQ se están ejecutando y las colas están funcionando, y eso es excelente. Pero, ¿y si uno de los nodos se apaga o falla? Verifique que la cola test_quorum proporcione alta disponibilidad y replicación entre servidores.

1. En el panel de control de RabbitMQ, haga clic en Colas pestaña para acceder a las colas disponibles en el clúster de RabbitMQ.

A continuación, puede ver el test_classic cola y test_quorum cola.

2. A continuación, haga clic en test_classic cola para obtener su información detallada.

Como puede ver a continuación, el test_classic la cola se está ejecutando en [email protected] sin espejos/réplica. Cuando el nodo [email protected] está caído, el test_classic la cola deja de estar disponible.

3. Vuelve a la Cola menú, pero haga clic en test_quorum cola esta vez.

A continuación, puede ver el test_quorum la cola está disponible en [email protected] y también proporciona espejos a otros nodos en el clúster. Esta configuración mantendrá el test_quorum la cola se ejecuta incluso cuando el nodo 01 está inactivo.

4. Ahora, ejecute el siguiente comando para apagar/apagar el node01 servidor. Con el servidor node01 caído .

# turnoff node01
sudo poweroff

5. Muévase al servidor node02 y ejecute el siguiente comando para verificar RabbitMQ cluster_status

# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status

Verá los nodos en ejecución actuales en el clúster de RabbitMQ hay node02 y nodo03 .

6. A continuación, ejecute los siguientes comandos para obtener el mensaje "hola mundo" del test_classic cola. Este comando hará cinco solicitudes al test_classic cola usando el bucle Bash.

# setup temporary environment variable CLASSIC
export CLASSIC="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic"

# retrieve message from `test_classic` queue 5 times using bash loop
for i in {1..5}; do $CLASSIC; done

Recibirá el mensaje No encontrado salidas, como se muestra a continuación, porque el servidor node01 está inactivo.

7. Finalmente, ejecute los siguientes comandos para recuperar el mensaje "hola mundo" del test_quorum cola.

Similar a probar la cola test_classic, este comando realiza cinco solicitudes al test_quorum cola, pero esta vez, obtendrá el mensaje "hola mundo" incluso el node01 esta abajo. ¿Por qué? El test_quorum la cola se replica/refleja automáticamente en los servidores node02 o node03.

# setup temporary environment variable QUORUM
export QUORUM="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum"

# retrieve message from `test_quorum` queue 5 times using bash loop
for i in {1..5}; do $QUORUM; done

Conclusión

Este tutorial tiene como objetivo ayudarlo a través del proceso de configuración del clúster RabbitMQ en los sistemas Debian/Ubuntu Linux. También aprendió la administración básica del servidor RabbitMQ y cómo crear colas que admiten alta disponibilidad en RabbitMQ.

Ha configurado un clúster completamente RabbitMQ en este punto. ¿Qué es lo siguiente? ¿Quizás aprender a implementar RabbitMQ en su aplicación?


Linux
  1. Cómo configurar un servidor LAMP de Ubuntu/Debian

  2. Linux:¿cómo configurar la afinidad del procesador de un proceso en Linux?

  3. Cómo configurar MySQL Cluster en Ubuntu

  4. ¿Cómo establecer el nombre de un hilo en Linux pthreads?

  5. Cómo configurar la dirección IP desde C en Linux

Cómo establecer o cambiar el nombre de host en Debian Linux

Cómo instalar el cargador IonCube en Ubuntu Linux

Cómo configurar PowerDNS en Ubuntu Linux

Cómo configurar el cortafuegos UFW en Linux

Cómo cambiar el nombre de host en Debian Linux

Cómo conectarse a WiFi desde la terminal en Ubuntu Linux