如何跨多个Kubernetes集群扩展RabbitMQ

时间:2019-12-18 22:31:06

标签: kubernetes rabbitmq azure-aks

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您不应该跨区域对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