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 图表支持。
您不应该跨区域集群 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 集群上设置联合的完整示例可以在此处找到。
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |