解决已暂停的队列同步 - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

解决已暂停的队列同步

在一个针对兔子的 Amazon MQ群集部署,发布到每个队列的消息将跨三个 Broker 节点复制。此复制,称为镜像,为 RabbitMQ 代理提供高可用性 (HA)。群集部署中的队列由主色复制副本和一个或多个Mirror。应用于镜像队列的每个操作(包括入队消息)首先应用于主队列,然后跨其镜像进行复制。

例如,假设一个跨三个节点复制的镜像队列:主节点 (main)和两个镜像(mirror-1mirror-2)。如果此镜像队列中的所有消息都成功传播到所有镜像,则同步该队列。如果一个节点 (mirror-1)在一段时间间隔内变为不可用,则队列仍处于运行状态,并且可以继续将消息入队。但是,对于要同步的队列,消息发布到mainWHERmirror-1不可用,必须复制到mirror-1

有关镜像的更多信息,请参阅经典镜像队列)。

维护和队列同步

维护时段,Amazon MQ 每次执行一个节点的所有维护工作,以确保代理保持正常运行。因此,在每个节点恢复操作时,队列可能需要同步。在同步过程中,需要复制到镜像的消息将从相应的 Amazon 弹性块存储 (Amazon EBS) 卷加载到内存中,以进行批处理。批处理消息可以让队列更快地同步。

如果队列保持短暂且消息较小,则队列会按预期成功同步并恢复操作。但是,如果批处理中的数据量接近节点的内存限制,节点会引发高内存警报,暂停队列同步。在批处理中的消息数量减少或消耗或删除消息之前,无法完成同步。

注意

减小队列同步批处理大小可能会导致更多的复制事务。

要解决暂停的队列同步,请按照本教程中的步骤操作,其中演示了应用ha-sync-batch-size策略并重新启动队列同步。

Prerequisites

在本教程中,您必须拥有具有管理员权限的 Amazon MQ 适用于 RabbitMQ 经纪商用户。您可以使用您第一次创建 Broker 时创建的管理员用户,也可以使用之后可能创建的其他用户。下表提供了作为正则表达式 (正则表达式) 模式所需的管理员用户标记和权限。

Tags 读取正则表达式 配置正则表达式 写入正则表达式
administrator .* .* .*

有关创建 RabbitMQ 用户和管理用户标记和权限的更多信息,请参阅User

第 1 步:应用ha-sync-batch-size策略

以下过程演示如何添加应用于在 Broker 上创建的所有队列的策略。您可以使用 RabbitMQ Web 控制台或 RabbitMQ 管理 API。有关更多信息,请参阅 。管理插件)。

要应用ha-sync-batch-size策略使用 RabbitMQ Web 控制台

  1. 登录到Amazon MQ 控制台

  2. 在左侧导航窗格中,依次选择和代理

  3. 从代理列表中,选择要应用新策略的代理的名称。

  4. 在经纪商的页面上,在连接部分,选择RabbitMQ 网络控制台URL。将在新的浏览器选项卡或窗口中打开 RabbitMQ Web 控制台。

  5. 使用您的代理管理员的用户名和密码登录到 RabbitMQ Web 控制台。

  6. 在 RabbitMQ Web 控制台中,在页面顶部,选择管理员

  7. 在存储库的管理员页面上的右侧导航窗格中,依次选择和策略

  8. 在存储库的策略页面上,您可以看到代理当前用户策略。下文用户策略,展开添加/更新策略

    注意

    默认情况下,创建 RabbitMQ 集群的 Amazon MQ 时使用名为ha-all-AWS-OWNED-DO-NOT-DELETE。Amazon MQ 管理此策略,以确保代理上的每个队列都复制到所有三个节点,并且队列自动同步。

  9. 要创建新的代理策略,请在添加/更新策略中,执行以下操作:

    1. 适用于名称中,输入策略名称,例如batch-size-policy

    2. 适用于模式中,输入正则表达式模式.*,以便策略匹配代理上的所有队列。

    3. 适用于应用于中,选择交换和队列从下拉列表中选择。

    4. 适用于Priority (优先级)中,输入一个大于应用于虚拟主机的所有其他策略的整数。您可以在任何给定时间将一组策略定义应用于 RabbitMQ 队列和交换。RabbitMQ 选择具有最高优先级值的匹配策略。有关策略优先级和如何组合策略的更多信息,请参阅策略在 RabbitMQ 服务器文档中。

    5. 适用于定义,添加以下键/值对:

      • ha-sync-batch-size=100。选择数字从下拉列表中选择。

        注意

        您可能需要调整和校准ha-sync-batch-size取决于队列中未同步消息的数量和大小。

      • ha-mode=all。 选择字符串从下拉列表中选择。

        重要

        这些区域有:ha-mode定义是所有与 HA 相关的策略所必需的。忽略它会导致验证失败。

      • ha-sync-mode=automatic。 选择字符串从下拉列表中选择。

        注意

        这些区域有:ha-sync-mode定义对于所有自定义策略都是必需的。如果省略该定义,Amazon MQ 会自动追加定义。

    6. 选择添加/更新策略

  10. 确认新策略显示在用户策略

要应用ha-sync-batch-size策略使用 RabbitMQ 管理 API

  1. 登录到Amazon MQ 控制台

  2. 在左侧导航窗格中,依次选择和代理

  3. 从代理列表中,选择要应用新策略的代理的名称。

  4. 在经纪商的页面上,在连接部分中,请注意RabbitMQ 网络控制台URL。这是您在 HTTP 请求中使用的代理终端节点。

  5. 打开您选择的新终端或命令行窗口。

  6. 要创建新的代理策略,请输入以下curl命令。此命令假定在默认/虚拟主机,该虚拟主机被编码为%2F

    注意

    Replaceusernamepassword替换为您的代理管理员的用户名和密码。您可能需要调整和校准ha-sync-batch-size(100),取决于队列中未同步消息的数量和大小。替换为您之前记下的 URL。

    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. 要确认新策略已添加到您的经纪商的用户策略中,请输入以下curl命令列出所有代理策略。

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

第 2 步:重启队列同步

在应用一个新的ha-sync-batch-size策略,请重新启动队列同步。

使用 RabbitMQ Web 控制台重新启动队列同步

注意

要打开 RabbitMQ Web 控制台,请参阅本教程的步骤 1 中的前面说明。

  1. 在 RabbitMQ Web 控制台中,在页面顶部,选择队列

  2. 在存储库的队列页面,在所有队列下,找到已暂停的队列。在功能列中,您的队列应列出您创建的新策略的名称(例如batch-size-policy)。

  3. 要重新启动具有较小批处理大小的同步过程,请选择重启同步

注意

如果同步暂停并且未成功完成,请尝试减少ha-sync-batch-size值并重新启动队列同步。

后续步骤

  • 队列成功同步后,您可以通过查看 Amazon CloudWatch 指标来监控您的 RabbitMQ 节点使用的内存量RabbitMQMemUsed。您也可以查看RabbitMQMemLimit度量来监视节点的内存限制。有关更多信息,请参阅 访问 Amazon MQ 的 CloudWatch 指标日志记录和监控 RabbitMQ 代理

  • 为防止暂停的队列同步,我们建议保持队列短暂并处理消息。对于消息大小较大的工作负载,我们还建议您将 Broker 实例类型升级到具有更多内存的更大实例大小。有关经纪商实例类型和编辑 Broker 首选项的详细信息,请参阅针对 RabbitMQ 实例类型的 Amazon MQ编辑代理首选项

  • 当您为 RabbitMQ 代理创建新的 Amazon MQ 时,Amazon MQ 会应用一组默认策略和虚拟主机限制来优化代理性能。如果您的经纪商没有建议的默认策略和限制,我们建议您自己创建它们。有关创建默认策略和虚拟主机限制的更多信息,请参阅Broker 默认值