Résolution de la synchronisation de la file d'attente mise en pause RabbitMQ - Amazon MQ

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résolution de la synchronisation de la file d'attente mise en pause RabbitMQ

Dans un déploiement en cluster Amazon MQ for RabbitMQ, les messages publiés dans chaque file d'attente sont répliqués sur trois nœuds d'agent. Cette réplication, appelée mise en miroir, fournit une haute disponibilité (HA) pour les agents RabbitMQ. Les files d'attente d'un déploiement en cluster se composent d'un réplica principal sur un nœud et un ou plusieurs miroirs. Chaque opération appliquée à une file d'attente mise en miroir, y compris les messages de mise en file d'attente, est d'abord appliquée à la file d'attente principale, puis répliquée sur ses miroirs.

Par exemple, considérez une file d'attente en miroir répliquée sur trois nœuds : le nœud principal (main) et deux miroirs (mirror-1 et mirror-2). Si tous les messages de cette file d'attente en miroir sont propagés avec succès à tous les miroirs, la file d'attente est synchronisée. Si un nœud (mirror-1) devient indisponible pendant un intervalle de temps, la file d'attente est toujours opérationnelle et peut continuer à mettre en file d'attente des messages. Toutefois, pour que la file d'attente se synchronise, les messages publiés dans main tandis que mirror-1 n'est pas disponible doivent être répliqués dans mirror-1.

Pour plus d'informations sur la mise en miroir, consultez Files d'attente mises en miroir classiques sur le site web RabbitMQ.

Maintenance et synchronisation des files d'attente

Lors de fenêtres de maintenance, Amazon MQ effectue tous les travaux de maintenance un nœud à la fois pour s'assurer que l'agent reste opérationnel. Par conséquent, les files d'attente peuvent devoir se synchroniser à mesure que chaque nœud reprend l'opération. Pendant la synchronisation, les messages qui doivent être répliqués en miroirs sont chargés en mémoire à partir du volume Amazon Elastic Block Store (Amazon EBS) correspondant à traiter par lots. Le traitement des messages par lots permet aux files d'attente de se synchroniser plus rapidement.

Si les files d'attente sont courtes et que les messages sont petits, les files d'attente se synchronisent et reprennent le fonctionnement comme prévu. Toutefois, si la quantité de données dans un lot approche de la limite de mémoire du nœud, le nœud déclenche une alarme de mémoire élevée, mettant en pause la synchronisation de la file d'attente. Vous pouvez confirmer l'utilisation de la mémoire en comparant les métriques de nœud d'agent dans CloudWatch RabbitMemUsed et RabbitMqMemLimit. La synchronisation ne peut pas se terminer tant que les messages ne sont pas consommés ou supprimés, ou que le nombre de messages dans le lot est réduit.

Note

La réduction de la taille du lot de synchronisation des files d'attente peut entraîner un plus grand nombre de transactions de réplication.

Pour résoudre une synchronisation de file d'attente mise en pause, suivez les étapes de ce didacticiel, qui illustre l'application d'une politique ha-sync-batch-size et le redémarrage de la synchronisation de la file d'attente.

Prérequis

Pour ce didacticiel, vous devez disposer d'un utilisateur d'agent Amazon MQ for RabbitMQ avec les autorisations d'administrateur. Vous pouvez utiliser l'utilisateur administrateur créé lors de la création de l'agent pour la première fois, ou un autre utilisateur que vous avez créé par la suite. Le tableau suivant fournit la balise utilisateur administrateur et les autorisations nécessaires en tant que modèles d'expression régulière (regexp).

Étiquettes Lire regexp Configurer regexp Regexp en écriture
administrator .* .* .*

Pour plus d'informations sur la création d'utilisateurs RabbitMQ et la gestion de balises et autorisations utilisateur, consultez Amazon MQ pour les utilisateurs du broker RabbitMQ.

Étape 1 : Appliquer une politique ha-sync-batch-size

Les procédures suivantes illustrent l'ajout d'une politique qui s'applique à toutes les files d'attente créées sur l'agent. Vous pouvez utiliser la console web RabbitMQ ou l'API de gestion RabbitMQ. Pour plus d'informations, consultez Plugin de gestion sur le site web RabbitMQ.

Pour appliquer une politique ha-sync-batch-size à l'aide de la console web RabbitMQ
  1. Connectez-vous à la console Amazon MQ.

  2. Dans le panneau de navigation de gauche, choisissez Brokers (Agents).

  3. Dans la liste des agents, choisissez le nom de l'agent auquel vous souhaitez appliquer la nouvelle politique.

  4. Sur la page de l'agent, dans la section Connection (Connexions), choisissez l'URL RabbitMQ web console (Console web RabbitMQ). La console web RabbitMQ s'ouvre dans un nouvel onglet ou une nouvelle fenêtre du navigateur.

  5. Connectez-vous à la console Web RabbitMQ à l'aide de vos informations d’identification de connexion d'administrateur d'agent.

  6. Dans la console web RabbitMQ, en haut de la page, choisissez Admin (Administrateur).

  7. Dans la page Admin (Administrateur), dans le volet de navigation droit, choisissez Policies (Politiques).

  8. Dans la page Policies (Politiques), vous pouvez consulter la liste actuelle User policies (Politiques utilisateur) de l'agent. Sous User policies (Politiques utilisateur), développez Add/update a policy (Ajouter ou mettre à jour une politique).

    Note

    Par défaut, les clusters Amazon MQ for RabbitMQ sont créés avec une politique d'agent initiale nommée ha-all-AWS-OWNED-DO-NOT-DELETE. Amazon MQ gère cette politique pour s'assurer que chaque file d'attente de l'agent est répliquée sur les trois nœuds et que les files d'attente sont synchronisées automatiquement.

  9. Pour créer une politique d'agent, sous Add/update a policy (Ajouter ou mettre à jour une politique), procédez comme suit :

    1. Dans Name (Name), attribuez un nom à votre politique IAM, par exemple batch-size-policy.

    2. Pour Pattern (Modèle), entrez le modèle regexp .* afin que la politique corresponde à toutes les files d'attente sur l'agent.

    3. Pour Apply to (Appliquer à), choisissez Exchanges and queues (Échanges et files d'attente) dans la liste déroulante.

    4. Pour Priority (Priorité), entrez un entier supérieur à toutes les autres politiques appliquées au vhost. Vous pouvez appliquer exactement un ensemble de définitions de politiques aux files d'attente et aux échanges RabbitMQ à tout moment. RabbitMQ choisit la politique correspondante avec la valeur de priorité la plus élevée. Pour plus d'informations sur les priorités de politique et sur la façon de combiner des politiques, veuillez consulter Policies (Politiques) dans la documentation du serveur RabbitMQ.

    5. Pour Definition (Définition), ajoutez les paires clé-valeur suivantes :

      • ha-sync-batch-size=100. Choisissez Number (Nombre) dans la liste déroulante.

        Note

        Vous devrez peut-être ajuster et calibrer la valeur de ha-sync-batch-size en fonction du nombre et de la taille des messages non synchronisés dans vos files d'attente.

      • ha-mode=all. Choisissez String (Chaîne) dans la liste déroulante.

        Important

        La définition ha-mode est requise pour toutes les politiques relatives à la haute disponibilité. Son omission entraîne un échec de validation.

      • ha-sync-mode=automatic. Choisissez String (Chaîne) dans la liste déroulante.

        Note

        La définition ha-sync-mode est requise pour toutes les politiques relatives à la haute disponibilité. Si elle est omise, Amazon MQ ajoute automatiquement la définition.

    6. Choisissez Add / update policy (Ajouter/mettre à jour une politique).

  10. Confirmez que la nouvelle politique apparaît dans la liste User policies (Politiques utilisateur).

Pour appliquer une politique ha-sync-batch-size à l'aide de l'API de gestion RabbitMQ
  1. Connectez-vous à la console Amazon MQ.

  2. Dans le panneau de navigation de gauche, choisissez Brokers (Agents).

  3. Dans la liste des agents, choisissez le nom de l'agent auquel vous souhaitez appliquer la nouvelle politique.

  4. Sur la page de l'agent, dans la section Connection (Connexion), notez l'URL de la console web RabbitMQ. Il s'agit du point de terminaison de l'agent que vous utilisez dans une requête HTTP.

  5. Ouvrez une nouvelle fenêtre de terminal ou de ligne de commande.

  6. Pour créer une politique d'agent, entrez la commande curl suivante. Cette commande suppose la présence d'une file d'attente sur le vhost / par défaut, qui est encodé en tant que %2F.

    Note

    Remplacez le nom d'utilisateur et le mot de passe par vos informations d'identification de connexion d'administrateur d'agent. Vous devrez peut-être ajuster et calibrer la valeur de ha-sync-batch-size (100) en fonction du nombre et de la taille des messages non synchronisés dans vos files d'attente. Remplacez le point de terminaison de l'agent par l'URL que vous avez notée précédemment.

    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. Pour confirmer que la nouvelle politique est ajoutée aux politiques utilisateur de votre agent, entrez la commande curl suivante pour répertorier toutes les politiques de l'agent.

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

Étape 2 : Redémarrer la synchronisation de la file d'attente

Après avoir appliqué une nouvelle politique ha-sync-batch-size à votre agent, redémarrez la synchronisation de la file d'attente.

Pour redémarrer la synchronisation de la file d'attente à l'aide de la console web RabbitMQ
Note

Pour ouvrir la console web RabbitMQ, reportez-vous aux instructions précédentes à l'étape 1 de ce didacticiel.

  1. Dans la console web RabbitMQ, en haut de la page, choisissez Queues (Fils d'attent).

  2. Dans la page Files d'attente (Queues), sous All queues (Toutes les files d'attente), localisez votre file d'attente mise en pause. Dans la colonne Features (Fonctions), votre file d'attente doit répertorier le nom de la nouvelle politique que vous avez créée (par exemple batch-size-policy).

  3. Pour redémarrer le processus de synchronisation avec une taille de lot réduite, choisissez Restart sync (Redémarrer la synchronisation).

Note

Si la synchronisation s'interrompt et ne se termine pas correctement, essayez de réduire la valeur ha-sync-batch-size et de redémarrer la synchronisation de la file d'attente.

Étapes suivantes

  • Une fois votre file d'attente synchronisée avec succès, vous pouvez surveiller la quantité de mémoire utilisée par vos nœuds RabbitMQ en consultant la métrique Amazon CloudWatchRabbitMQMemUsed. Vous pouvez également afficher la métrique RabbitMQMemLimit pour surveiller la limite de mémoire d'un nœud. Pour plus d'informations, consultez Accès aux CloudWatch métriques pour Amazon MQ et CloudWatch Mesures disponibles pour Amazon MQ pour les courtiers RabbitMQ.

  • Pour empêcher la synchronisation des files d'attente interrompues, nous vous recommandons de conserver les files d'attente courtes et de traiter les messages. Pour les applications ayant une taille de message plus grande, nous vous recommandons également de mettre à niveau votre type d'instance d'agent vers une taille d'instance plus grande avec plus de mémoire. Pour plus d'informations sur les types d'instance d'agent et la modification des préférences d'agent, consultez Types d'instance Amazon MQ for RabbitMQ et Modification des préférences d'agent.

  • Lorsque vous créez un nouvel agent Amazon MQ for RabbitMQ, Amazon MQ applique un ensemble de politiques par défaut et de limites d'hôte virtuel pour optimiser les performances de l'agent. Si votre agent ne dispose pas des politiques et limites par défaut recommandées, nous vous recommandons de les créer vous-même. Pour plus d'informations sur la création de politiques par défaut et de limites de vhost, consultez Valeurs par défaut d'agent Amazon MQ for RabbitMQ.

  • UpdateBrokerInput – Utilisez cette propriété d'agent pour mettre à jour le type d'instance d'un agent à l'aide de l'API Amazon MQ.

  • Paramètres et politiques (Documentation du serveur RabbitMQ) – Pour en savoir plus sur les paramètres et les politiques RabbitMQ, consultez le site web RabbitMQ.

  • API HTTP de gestion RabbitMQ – En savoir plus sur l'API de gestion RabbitMQ.