Resolvendo a sincronização de fila pausada do RabbitMQ - Amazon MQ

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Resolvendo a sincronização de fila pausada do RabbitMQ

Em uma implantação de cluster do Amazon MQ para RabbitMQ, as mensagens publicadas em cada fila são replicadas em três nós de agente. Esta replicação, chamada de espelhamento, fornece alta disponibilidade (HA) para agentes RabbitMQ. As filas em uma implantação de cluster consistem em uma réplica principal em um nó e um ou mais espelhos. Cada operação aplicada a uma fila espelhada, incluindo o enfileiramento de mensagens, é aplicada primeiro à fila principal e, em seguida, replicada em seus espelhos.

Por exemplo, considere uma fila espelhada replicada em três nós: o nó principal (main) e dois espelhos (mirror-1 e mirror-2). Se todas as mensagens nessa fila espelhada forem propagadas com êxito para todos os espelhos, a fila será sincronizada. Se um nó (mirror-1) se tornar indisponível por um intervalo de tempo, a fila ainda estará operacional e poderá continuar a enfileirar mensagens. No entanto, para sincronizar a fila, as mensagens publicadas no main enquanto mirror-1 estiver indisponível devem ser replicadas para mirror-1.

Para obter mais informações sobre o espelhamento, consulte Filas Espelhadas Clássicas no site RabbitMQ.

Manutenção e sincronização de filas

Durante as janelas de manutenção, o Amazon MQ executa todos os trabalhos de manutenção um nó de cada vez para garantir que o agente permaneça operacional. Como resultado, as filas podem precisar sincronizar à medida que cada nó retoma a operação. Durante a sincronização, as mensagens que precisam ser replicadas em espelhos são carregadas na memória do volume correspondente do Amazon Elastic Block Store (Amazon EBS) para serem processadas em lotes. O processamento de mensagens em lotes permite que as filas sejam sincronizadas mais rapidamente.

Se as filas forem mantidas curtas e as mensagens forem pequenas, as filas serão sincronizadas com êxito e retomarão a operação conforme esperado. No entanto, se a quantidade de dados em um lote se aproximar do limite de memória do nó, o nó gera um alarme de memória alta, pausando a sincronização de fila. Você pode confirmar o uso da memória comparando as métricas de nó do agente no CloudWatch do RabbitMemUsed e RabbitMqMemLimit. A sincronização não pode ser concluída até que as mensagens sejam consumidas ou excluídas ou o número de mensagens no lote seja reduzido.

nota

Reduzir o tamanho do lote de sincronização de fila pode resultar em um número maior de transações de replicação.

Para resolver uma sincronização de fila pausada, siga as etapas deste tutorial, que demonstra a aplicação de uma política ha-sync-batch-size e reiniciar a sincronização de filas.

Pré-requisitos

Para este tutorial, você deve ter um usuário do agente Amazon MQ para RabbitMQ com permissões de administrador. Você pode usar o usuário administrador criado quando criou o agente pela primeira vez ou outro usuário que você possa ter criado posteriormente. A tabela a seguir fornece a etiqueta de usuário administrador necessária e as permissões como padrões de expressão regular (regexp).

Etiquetas Ler regexp Configurar regexp Escrever regexp
administrator .* .* .*

Para obter mais informações sobre criar usuários RabbitMQ e gerenciar etiquetas e permissões de usuário, consulte Amazon MQ para usuários do broker RabbitMQ.

Etapa 1: Aplicar uma política ha-sync-batch-size

Os procedimentos a seguir demonstram a adição de uma política que se aplica a todas as filas criadas no agente. Você pode usar o console da Web do RabbitMQ ou a API de gerenciamento do RabbitMQ. Para obter mais informações, consulte Plugin Gerenciamento no site do RabbitMQ.

Para aplicar uma política ha-sync-batch-size usando o console da Web RabbitMQ
  1. Faça login no console do Amazon MQ.

  2. No painel de navegação à esquerda, escolha Agentes.

  3. Na lista de agentes, escolha o nome do agente ao qual você deseja aplicar a nova política.

  4. Na página do agente, na seção Conexões, escolha a URL RabbitMQ web console (Console da Web RabbitMQ). O console da Web do RabbitMQ é aberto em uma nova guia ou janela do navegador.

  5. Faça login no console da Web do RabbitMQ com as credenciais de login de administrador do agente.

  6. No console da Web do RabbitMQ, na parte superior da página, escolha Admin.

  7. Na página Admin, no painel de navegação da direita, selecione Policies (Políticas).

  8. Na página Policies (Políticas), você pode ver uma lista das User policies (Políticas de usuário) atuais do agente. Abaixo das User policies (Políticas de usuário), expanda Add/update a policy (Adicionar/atualizar uma política).

    nota

    Por padrão, os clusters Amazon MQ para RabbitMQ são criados com uma política de agente inicial chamada ha-all-AWS-OWNED-DO-NOT-DELETE. O Amazon MQ gerencia essa política para garantir que cada fila no agente seja replicada para todos os três nós e que as filas sejam sincronizadas automaticamente.

  9. Para criar uma política de agente, em Add/update a policy (Adicionar/atualizar uma política), faça o seguinte:

    1. Em Nome, insira um nome para a sua política, por exemplo batch-size-policy.

    2. Para Pattern (Padrão), insira o padrão de expressão regular .* para que a política corresponda a todas as filas no agente.

    3. Para Apply to (Aplicar em), escolha Exchanges and queues (Trocas e filas) na lista suspensa.

    4. Para Priority (Prioridade), insira um número inteiro maior que todas as outras políticas aplicadas ao vhost. Você pode aplicar exatamente um conjunto de definições de política a filas e trocas RabbitMQ a qualquer momento. O RabbitMQ escolhe a política correspondente com o valor de prioridade mais alto. Para obter mais informações sobre prioridades de política e como combinar políticas, consulte Policies (Políticas) na Documentação do Servidor RabbitMQ.

    5. Para Definition (Definição), adicione os seguintes pares de chave-valor:

      • ha-sync-batch-size=100. Selecione Number (Número) na lista suspensa.

        nota

        Talvez seja necessário ajustar e calibrar o valor de ha-sync-batch-size com base no número e tamanho das mensagens não sincronizadas nas filas.

      • ha-mode=all. Selecione String (String) na lista suspensa.

        Importante

        A definição ha-mode é necessária para todas as políticas relacionadas a HA. Omitir isso resulta em uma falha de validação.

      • ha-sync-mode=automatic. Selecione String (String) na lista suspensa.

        nota

        A definição ha-sync-mode é necessária para todas as políticas personalizadas. Se isso for omitido, o Amazon MQ anexará automaticamente a definição.

    6. Escolha Add/update policy (Adicionar/atualizar política).

  10. Confirme se a nova política aparece na lista de User policies (Políticas de usuário).

Para aplicar uma política ha-sync-batch-size usando a API de gerenciamento RabbitMQ
  1. Faça login no console do Amazon MQ.

  2. No painel de navegação à esquerda, escolha Agentes.

  3. Na lista de agentes, escolha o nome do agente ao qual você deseja aplicar a nova política.

  4. Na página do agente, na seção Connections (Conexões), anote a URL do RabbitMQ web console (Console da Web RabbitMQ). Este é o endpoint do agente que você usa em uma solicitação HTTP.

  5. Abra uma nova janela de terminal ou linha de comando de sua escolha.

  6. Para criar uma nova política de agente, insira o comando curl a seguir. Este comando assume uma fila no vhost / padrão, que é codificada como %2F.

    nota

    Substitua o nome de usuário e a senha pelas suas credenciais de login de administrador do agente. Talvez seja necessário ajustar e calibrar o valor de ha-sync-batch-size (100) com base no número e tamanho das mensagens não sincronizadas nas filas. Substitua o endpoint do agente com a URL que você anotou 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 se a nova política foi adicionada às políticas de usuário do seu agente, insira o seguinte comando curl para listar todas as políticas de agente.

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

Etapa 2: Reiniciar a sincronização de filas

Depois de aplicar uma nova política ha-sync-batch-size para seu agente, reinicie a sincronização de fila.

Para reiniciar a sincronização de filas usando o console da Web RabbitMQ
nota

Para abrir o console da Web RabbitMQ, consulte as instruções anteriores na Etapa 1 deste tutorial.

  1. No console da Web do RabbitMQ, na parte superior da página, escolha Queues (Filas).

  2. Na página Filas, em Todas as filas, localize sua fila pausada. Na coluna Recursos, sua fila deve listar o nome da nova política que você criou (por exemplo, batch-size-policy).

  3. Para reiniciar o processo de sincronização com um tamanho de lote reduzido, escolha Restart sync (Reiniciar sincronização).

nota

Se a sincronização for interrompida e não for concluída com êxito, tente reduzir o valor ha-sync-batch-size e reiniciar a sincronização de fila novamente.

Próximas etapas

  • Depois que a fila for sincronizada com êxito, você poderá monitorar a quantidade de memória que seus nós RabbitMQ usam visualizando a métrica RabbitMQMemUsed do Amazon CloudWatch. Você também pode visualizar a métrica RabbitMQMemLimit para monitorar o limite de memória de um nó. Para obter mais informações, consulte Acessando CloudWatch métricas para o Amazon MQ e CloudWatch Métricas disponíveis para Amazon MQ para corretores RabbitMQ.

  • Para evitar pausar a sincronização de filas, recomendamos manter as filas curtas e processar as mensagens. Para workloads com tamanhos de mensagem maiores, também recomendamos atualizar o tipo de instância do agente para um tamanho de instância maior com mais memória. Para obter mais informações sobre os tipos de instância do agente e as preferências de edição do agente, consulte Amazon MQ para tipos de instância RabbitMQ e Editar as preferências de agente.

  • Quando você cria um novo Amazon MQ para o agente RabbitMQ, o Amazon MQ aplica um conjunto de políticas padrão e limites de host virtual para otimizar a performance do agente. Se o seu agente não tiver as políticas e limites padrão recomendados, recomendamos criá-las você mesmo. Para obter mais informações sobre como criar políticas padrão e limites vhost, consulte Padrões de agentes do Amazon MQ for RabbitMQ.