在RabbitMQ集群上,队列在各个节点分布不均衡会导致部分节点压力过大,无法更有效的利用集群。这可能是扩容节点、删除队列等原因导致的。
设置队列负载均衡的方法如下:
- 删除队列重建
- 通过Policy修改master节点方式
删除队列重建
- 登录RabbitMQ WebUI页面。
- 在“Overview”页签中,单击“Download broker definitions”,导出元数据。
- 停止生产,等待数据消费完,然后删除原有队列。
- 在“Overview”页签中,确认数据是否已消费完。
可消费消息数(Ready)和未确认的消息数(Unacked)都为0时,说明消费完成。
- 等数据消费完后,删除原有队列。
- 在“Queues”页签,单击需要删除的队列名称,进入队列详情页面。
- 单机“Delete Queue”,删除队列。
- 在“Overview”页签中,上传2中导出的元数据。
- 在“Overview”页签中,单击“选择文件”,选择2中导出的元数据。
- 单击“Upload broker definitions”,上传元数据。
上传成功后,显示如下信息。
实例会自动将队列均衡创建在各个节点上,在“Queues”页签中查看队列分布详情。
通过Policy修改master节点方式
- 登录RabbitMQ WebUI页面。
- 在“Admin > Policies”页面中,新增一条策略。
- Name:填写策略名称。
- Pattern:队列匹配模式,填写队列名称,会匹配前缀同名的队列。
- Apply to:选择“Queues”。
- Priority:可选参数,策略优先级,数字越大,优先级越高。
- Definition:镜像定义。填写“ha-mode”和“ha-params”参数。其中“ha-mode”设置为“nodes”,“ha-params”设置为队列希望迁移到的目的节点名称。
- 单击“Add policy”。
说明队列数据同步需要很长时间,为防止消息丢失,在队列数据完成同步前,原先的master节点依然生效。
待队列切换完成后,可删除2中新增的策略。