我有一个在Kubernetes群集Azure AKS中运行的应用程序,该应用程序由在一个部署中运行的网站,在Kubernetes中按计划任务运行的后台工作进程,在另一部署中运行的RabbitMQ和不属于SQL Azure DB组成Kubernetes。
我想通过在另一个区域中部署另一个kubernetes群集并将Traffic Manager DNS负载平衡器放置在网站的前面来实现负载平衡和故障转移。
我看到的问题是,如果两个Rabbit实例位于单独的kubernetes集群中,则在一个队列中排队的项目在另一个中将不可用。
是否有一种方法可以对每个kubernetes集群中运行的Rabbitmq实例进行集群,或者除集群以外的其他方法? 还是有一种通用的设计模式可以避免出现单独的队列问题?
我还应注意,当前kuberntes集群中目前只有一个节点在运行RabbitMq,但是作为此升级的一部分,在每个集群中运行多个节点似乎是一个好主意,我认为当前的Helm图表支持。 / p>
答案 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。