如何跨多个 Kubernetes 集群扩展 RabbitMQ

Zac*_*ack 5 rabbitmq kubernetes azure-aks

我有一个在 Kubernetes 集群 Azure AKS 中运行的应用程序,它由在一个部署中运行的网站、在 Kubernetes 中作为计划任务运行的后台工作进程、作为另一个部署运行的 RabbitMQ 和一个不属于 Kubernetes 的 SQL Azure DB 组成.

我想通过在另一个区域部署另一个 kubernetes 集群并在网站前面放置一个流量管理器 DNS 负载平衡器来部署实现负载平衡和故障转移。

我看到的问题是,如果两个 rabbit 实例位于单独的 kubernetes 集群中,那么在一个中排队的项目在另一个中将不可用。

有没有办法对在每个 kubernetes 集群中运行的 rabbitmq 实例进行集群,或者除了集群之外的其他东西?或者是否有一种通用的设计模式可以避免具有单独队列的问题?

我还应该注意,当前 kuberntes 集群中只有一个节点运行 RabbitMq,但作为这次升级的一部分,在每个集群中运行多个节点似乎是个好主意,我认为当前的 Helm 图表支持。

Mar*_*nas 3

您不应该跨区域集群 RabbitMQ 节点。由于网络延迟,您的集群将出现脑裂。要同步 RabbitMQ 队列、集群之间的交换,您可以使用联合或 shovel 插件,具体取决于您的用例。

可以通过运行命令在集群上启用联合插件:

rabbitmqctl stop_app
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
rabbitmqctl start_app
Run Code Online (Sandbox Code Playgroud)

Federation 的模式详细信息。

对于铲子:

rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
rabbitmqctl stop_app
rabbitmqctl start_app
Run Code Online (Sandbox Code Playgroud)

铲子的模式详细信息。

有关如何在 RabbitMQ 集群上设置联合的完整示例可以在此处找到。