更新时间:2024-10-16 GMT+08:00

设置队列负载均衡

方案概述

在RabbitMQ集群上,由于扩容节点、删除队列等原因,会导致队列在各个节点分布不均衡,从而造成部分节点压力过大,无法更有效地利用集群。

这时候需要手动设置节点间队列的负载均衡,提升集群的利用率。设置队列负载均衡的方法如下:

删除队列重建

  1. 登录RabbitMQ WebUI页面
  2. 在“Overview”页签中,单击“Download broker definitions”,导出元数据。

  3. 停止生产,等待数据消费完,然后删除原有队列。

    1. 在“Overview”页签中,确认数据是否已消费完。

      可消费消息数(Ready)和未确认的消息数(Unacked)都为0时,说明消费完成。

    2. 等数据消费完后,删除原有队列。
      1. 在“Queues”页签,单击需要删除的队列名称,进入队列详情页面。

      2. 单击“Delete Queue”,删除队列。

  4. 在“Overview”页签中,上传已导出的元数据。

    1. 在“Overview”页签中,单击“选择文件”,选择已导出的元数据。
    2. 单击“Upload broker definitions”,上传元数据。

      上传成功后,显示如下信息。

      实例会自动将队列均衡创建在各个节点上,在“Queues”页签中查看队列分布详情。

通过Policy修改master节点方式

  1. 登录RabbitMQ WebUI页面
  2. 在“Admin > Policies”页面中,新增一条策略。

    • Name:填写策略名称。
    • Pattern:队列匹配模式,填写队列名称,会匹配前缀同名的队列。
    • Apply to:选择“Queues”。
    • Priority:策略优先级,数字越大,优先级越高。
    • Definition:镜像定义。填写“ha-mode”和“ha-params”参数。其中“ha-mode”设置为“nodes”,“ha-params”设置为队列希望迁移到的目的节点名称。

  3. 单击“Add policy”。

    • 队列数据同步需要很长时间,为防止消息丢失,在队列数据完成同步前,原先的master节点依然生效。
    • 待队列切换完成后,可删除2中新增的策略。