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