添加对 Quorum 队列的管理支持¶
RabbitMQ 项目正在逐步淘汰经典队列,转而采用 Quorum 队列(参见 4_0_deprecations)。Quorum 队列提供更高的数据安全性,并且基于广泛采用的 Raft 共识算法
OpenStack 目前不支持创建 Quorum 队列,但正在评审一项更改以添加对它们的的支持 Oslo Messaging Quorum Queues。
警告:经典队列和 Quorum 队列之间并非完全功能对等。例如,Quorum 队列不支持消息 TTL,这对于 OpenStack 队列中的通知可能是一个问题,因为通知经常会累积。有关更多详细信息,请参见 _feature_comparison。
问题描述¶
Quorum 队列在 RabbitMQ 3.8.0 或更高版本中可用(例如 Focal)。使用现有 rabbitmq-server charm 在 focal 上部署的系统已经支持创建 Quorum 队列。如果 rabbitmq server 集群扩展或缩小,则需要外部管理队列的复制。本规范涵盖了在 rabbit 集群生命周期内管理 Quorum 队列所需的功能。例如,如果一个 rabbitmq-server 单元丢失并且它正在托管 Quorum 队列的镜像,则应在另一个单元上添加一个新的镜像。
注意:当客户端通过 amqp 关系连接到 rabbitmq-server 时,它们会声明他们想要访问的 vhost。rabbitmq-server charm 确保 vhost 存在,并为客户端提供使用 vhost 的凭据。客户端负责创建所需的任何队列,并且在创建队列时定义其类型。
提议的变更¶
添加功能到 peer joined、departed 和 broken 钩子中,以便在添加或丢失 peer 时重新平衡队列。这些钩子很可能使用 rabbitmq-queues 命令的 add_member、delete_member、grow 和 shrink 选项。
还应添加 charm 操作,以手动从 Quorum 队列中添加或删除成员,以帮助主动维护集群,例如将单元关闭进行维护。
备选方案¶
经典队列仍然受支持,因此另一种选择是在所有情况下继续使用它们。
实现¶
负责人¶
待定
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“quorum_queues”。
git-review -t quorum_queues
工作项¶
添加函数到 rabbit utils 中,以识别所有 vhost 中的所有 Quorum 队列。
添加函数到 rabbit utils 中,以报告哪些节点正在托管队列。
扩展 peer departed 钩子,以识别在离开节点上托管镜像的哪些队列,并为每个队列在另一个节点上添加镜像(如果可能)。
在 charms 的工作负载状态中报告镜像不足的队列。
添加操作以允许移动队列镜像。
仓库¶
不需要新的仓库
文档¶
需要记录操作。
安全性¶
N/A
测试¶
添加功能测试以创建 Quorum 队列,并在集群缩小和扩展后检查是否有足够的副本。
依赖项¶
为了使 OpenStack 使用 Quorum 队列,Oslo Messaging Quorum Queues 需要着陆,并且每个 OpenStack 客户端 charm 需要增长对 rabbit_quorum_queue 选项的支持。