Resolver la sincronización de colas en pausa de RabbitMQ - Amazon MQ

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Resolver la sincronización de colas en pausa de RabbitMQ

En una implementación de clúster de Amazon MQ para RabbitMQ, los mensajes publicados en cada cola se replican en tres nodos de agente. Esta replicación, conocida como espejo, proporciona alta disponibilidad para los agentes de RabbitMQ. En una implementación de clúster, las colas constan de un nodo principal y una o más réplicas. Cada operación aplicada a una cola replicada, incluidos los mensajes en cola, se aplica primero a la cola principal y, a continuación, se replica en sus espejos.

Por ejemplo, considere una cola replicada en tres nodos: el nodo principal (main) y dos espejos (mirror-1 y mirror-2). Si todos los mensajes de esta cola replicada se propagan correctamente a todos los espejos, la cola se sincroniza. Si un nodo (mirror-1) deja de estar disponible durante un intervalo de tiempo, la cola sigue funcionando y puede continuar poniendo mensajes en cola. Sin embargo, para que la cola se sincronice, los mensajes publicados en main mientras mirror-1 no está disponible deben replicarse en mirror-1.

Para obtener más información acerca de la replicación, consulte el tema sobre Colas replicadas clásicas en el sitio web de RabbitMQ.

Mantenimiento y sincronización de colas

Durante los periodos de mantenimiento, Amazon MQ realiza todos los trabajos de mantenimiento de a un nodo por vez para garantizar que el agente permanezca operativo. Como resultado, es posible que las colas deban sincronizarse a medida que cada se vaya reanudando la operación de cada nodo. Durante la sincronización, los mensajes que deben replicarse en los espejos se cargan en la memoria del volumen correspondiente de Amazon Elastic Block Store (Amazon EBS) para procesarlos en lotes. El procesamiento de mensajes en lotes permite agilizar la sincronización de las colas.

Si las colas se mantienen cortas y los mensajes son pequeños, las colas se sincronizan correctamente y reanudan la operación según lo previsto. Sin embargo, si la cantidad de datos de un lote se acerca al límite de memoria del nodo, el nodo genera una alarma de memoria elevada y se pausa la sincronización de colas. Para confirmar el uso de memoria, puede comparar las métricas RabbitMemUsed y RabbitMqMemLimit de los nodos del agente en CloudWatch. La sincronización no se puede completar hasta que se consuman o eliminen los mensajes, o se reduzca el número de mensajes del lote.

nota

La reducción del tamaño del lote de sincronización de colas puede generar mayor número de transacciones de replicación.

Para resolver una sincronización de colas en pausa, siga los pasos que se indican en este tutorial, que muestra la aplicación de una política ha-sync-batch-size y reinicio de la sincronización de colas.

Requisitos previos

Para este tutorial, debe tener un usuario de agente de Amazon MQ para RabbitMQ con permisos de administrador. Puede utilizar el usuario administrador que generó cuando creó el agente por primera vez, u otro usuario que podría haber creado después. La siguiente tabla proporciona la etiqueta y los permisos de usuario administrador necesarios como patrones de expresiones regulares (regexp).

Etiquetas Regexp Read (Lectura) Regexp Configure (Configuración) Regexp Write (Escritura)
administrator .* .* .*

Para obtener más información acerca de cómo crear usuarios de RabbitMQ y administrar etiquetas y permisos de usuario, consulte Usuario.

Paso 1: Aplicar una política ha-sync-batch-size

Estos procedimientos se utilizan para agregar una política que se aplica a todas las colas creadas en el agente. Puede utilizar la consola web o la API de administración de RabbitMQ. Para obtener más información, consulte Complemento de administración en el sitio web de RabbitMQ.

Para aplicar una política ha-sync-batch-size a través de la consola web de RabbitMQ
  1. Inicie sesión en la consola de Amazon MQ.

  2. En el panel de navegación izquierdo, elija Brokers (Agentes).

  3. En la lista de agentes, elija el nombre del agente al que desea aplicar la nueva política.

  4. En la sección Connections (Conexiones) de la página del agente, elija la URL de la consola web de RabbitMQ. La consola web de RabbitMQ se abre en una nueva pestaña o ventana del navegador.

  5. Inicie sesión en la consola web de RabbitMQ con las credenciales del usuario administrador del agente.

  6. En la consola web de RabbitMQ, elija Admin (Administrador) en la parte superior de la página.

  7. En la página Admin (Administrador), elija Politicies (Políticas) en el panel de navegación derecho.

  8. En la página Políticies (Políticas), puede ver una lista de las Políticas de usuario actuales del agente. Debajo de las políticas de usuario, expanda Add/update a policy (Agregar/actualizar una política).

    nota

    De forma predeterminada, los clústeres de Amazon MQ para RabbitMQ se crean con una política de agente inicial con el nombre ha-all-AWS-OWNED-DO-NOT-DELETE. Amazon MQ administra esta política para garantizar que todas las colas del agente se repliquen en los tres nodos y que las colas se sincronicen automáticamente.

  9. Para crear una nueva política de agente, en Add/update a policy (Agregar/actualizar una política), haga lo siguiente:

    1. En Name (Nombre), escriba un nombre para su política, por ejemplo, batch-size-policy.

    2. En Pattern (Patrón), ingrese el patrón regexp .* para que la política coincida con todas las colas del agente.

    3. En Apply to (Aplicar a), elija Exchanges and queues (Intercambios y colas) en el menú desplegable.

    4. En Priority (Prioridad), ingrese un número entero mayor que todas las demás políticas aplicadas al vhost. Puede aplicar exactamente un conjunto de definiciones de políticas a las colas e intercambios de RabbitMQ en cualquier momento dado. RabbitMQ elige la política de coincidencia con el valor de prioridad más alto. Para obtener más información acerca de las prioridades de las políticas y cómo combinar políticas, consulte el tema sobre políticas en la documentación del servidor de RabbitMQ.

    5. En Definition (Definición), agregue los siguientes pares clave-valor:

      • ha-sync-batch-size=100. Seleccione Number (Número) en el menú desplegable.

        nota

        Es posible que deba ajustar y calibrar el valor de ha-sync-batch-size en función del número y el tamaño de los mensajes sin sincronizar de las colas.

      • ha-mode=all. Elija String (Cadena) en el menú desplegable.

        importante

        Se requiere la definición ha-mode para todas las políticas relacionadas con la alta disponibilidad. Si se omite, se produce un error de validación.

      • ha-sync-mode=automatic. Elija String (Cadena) en el menú desplegable.

        nota

        Se requiere la definición ha-sync-mode para todas las políticas personalizadas. Si se omite, Amazon MQ la agrega automáticamente.

    6. Elija Add/update policy (Agregar/actualizar política).

  10. Confirme que la nueva política aparezca en la lista de políticas de usuario.

Para aplicar una política ha-sync-batch-size a través de la API de administración de RabbitMQ
  1. Inicie sesión en la consola de Amazon MQ.

  2. En el panel de navegación izquierdo, elija Brokers (Agentes).

  3. En la lista de agentes, elija el nombre del agente al que desea aplicar la nueva política.

  4. En la sección Connections (Conexiones) de la página del agente, anote la URL de la consola web de RabbitMQ. Este es el punto de enlace del agente que se utiliza en una solicitud HTTP.

  5. Abra un terminal nuevo o la ventana de línea de comandos que desee.

  6. Para crear una nueva política de agente, ingrese el comando curl. Este comando asume que hay una cola en el vhost / predeterminado, que está codificado como %2F.

    nota

    Reemplace username y password por sus credenciales de inicio de sesión de administrador de agente. Es posible que deba ajustar y calibrar el valor de ha-sync-batch-size (100) en función del número y el tamaño de los mensajes sin sincronizar de las colas. Reemplace el punto de enlace del agente por la URL que anotó anteriormente.

    curl -i -u username:password -H "content-type:application/json" -XPUT \ -d '{"pattern":".*", "priority":1, "definition":{"ha-sync-batch-size":100, "ha-mode":"all", "ha-sync-mode":"automatic"}}' \ https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies/%2F/batch-size-policy
  7. Para confirmar que se haya agregado la nueva política a las políticas de usuario de su agente, ingrese el comando curl para ver una lista de todas las políticas de agente.

    curl -i -u username:password https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies

Paso 2: Reiniciar la sincronización de colas

Después de aplicar una nueva política ha-sync-batch-size a su agente, reinicie la sincronización de colas.

Para reiniciar la sincronización de colas a través de la consola web de RabbitMQ
nota

Para abrir la consola web de RabbitMQ, consulte las instrucciones anteriores en el paso 1 de este tutorial.

  1. En la consola web de RabbitMQ, en la parte superior de la página, elija Queues (Colas).

  2. En la página Queues (Colas), en All queues (Todas las colas), busque la cola en pausa. En la columna Features (Características), la cola debe mostrar el nombre de la nueva política que ha creado (por ejemplo, batch-size-policy).

  3. Para reiniciar el proceso de sincronización con un tamaño de lote reducido, elija Restart sync (Reiniciar sincronización).

nota

Si la sincronización se detiene y no se completa correctamente, intente reducir el valor de ha-sync-batch-size y volver a reiniciar la sincronización de colas.

Pasos siguientes

  • Una vez que la cola se sincronice correctamente, para monitorear la cantidad de memoria que utilizan los nodos de RabbitMQ, puede consultar la métrica RabbitMQMemUsed de Amazon CloudWatch. También puede consultar la métrica RabbitMQMemLimit para monitorear el límite de memoria de un nodo. Para obtener más información, consulte Acceso a las métricas de CloudWatch para Amazon MQ y Registro y monitoreo de Amazon MQ para agentes de RabbitMQ.

  • Para evitar la sincronización de colas en pausa, recomendamos mantener las colas cortas y procesar mensajes. Para cargas de trabajo con tamaños de mensaje más grandes, también recomendamos actualizar el tipo de instancias del agente a un tamaño de instancia más grande con más memoria. Para obtener más información sobre los tipos de instancias y la edición de preferencias del agente, consulte Tipos de instancias de Amazon MQ para RabbitMQ y Edición de las preferencias del agente.

  • Cuando crea un nuevo agente de Amazon MQ para RabbitMQ, Amazon MQ aplica un conjunto de políticas y límites de anfitriones virtuales predeterminados para optimizar el rendimiento del agente. Si su agente no tiene las políticas y los límites predeterminados recomendados, le recomendamos que los cree usted mismo. Para obtener más información acerca de cómo crear políticas y límites de vhost predeterminados, consulte Valores predeterminados del agente.

  • UpdateBrokerInput: utilice esta propiedad de agente para actualizar un tipo de instancias del agente a través de la API de Amazon MQ.

  • Parámetros y políticas(Documentación del servidor de RabbitMQ): obtenga más información acerca de los parámetros y las políticas de RabbitMQ en el sitio web de RabbitMQ.

  • API HTTP de administración de RabbitMQ: obtenga más información acerca de la API de administración de RabbitMQ.