如何在多个Kubernetes集群之间扩展RabbitMQ

问题描述 投票:1回答:1

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

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

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

是否有一种方法可以将在每个kubernetes群集中运行的Rabbitmq实例进行群集,或者除群集以外的其他方法?还是有一种通用的设计模式可以避免出现单独的队列的问题?

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

kubernetes rabbitmq azure-aks
1个回答
0
投票

您不应该跨区域对RabbitMQ节点进行集群。由于网络延迟,您的集群将陷入混乱。要同步RabbitMQ队列,可以在集群之间进行交换,您可以使用联盟或shovel插件,具体取决于您的用例。

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

rabbitmqctl stop_app
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
rabbitmqctl start_app

Federation的模式细节。

用于铲子:

rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
rabbitmqctl stop_app
rabbitmqctl start_app

Shovel的模式细节。

关于如何在RabbitMQ集群上设置联盟的完整示例,请参见here。>

© www.soinside.com 2019 - 2024. All rights reserved.