Kubernetes RabbitMQ队列镜像
我需要在Kubernetes中的所有队列上设置一个启用了队列镜像的RabbitMQ集群。 kubernetes对等发现的RabbitMQ插件只提供了基于对等发现的集群机制,正如插件名称所示。Kubernetes RabbitMQ队列镜像,kubernetes,rabbitmq,queue,mirroring,Kubernetes,Rabbitmq,Queue,Mirroring,我需要在Kubernetes中的所有队列上设置一个启用了队列镜像的RabbitMQ集群。 kubernetes对等发现的RabbitMQ插件只提供了基于对等发现的集群机制,正如插件名称所示。 但是如何启用队列镜像并实现HA,以便在因任何原因重新启动POD a或需要扩展Rabbitmq节点时,我可以在不丢失任何消息的情况下执行此操作。您可以使用Kubernetes lifecycle启用Rabbitmq镜像 以下是我是如何做到这一点的。它在openshift上并不完美,状态集的第一个pod在启动时
但是如何启用队列镜像并实现HA,以便在因任何原因重新启动POD a或需要扩展Rabbitmq节点时,我可以在不丢失任何消息的情况下执行此操作。您可以使用Kubernetes lifecycle启用Rabbitmq镜像 以下是我是如何做到这一点的。它在openshift上并不完美,状态集的第一个pod在启动时重新启动一次
lifecycle:
postStart:
exec:
command:
- "/bin/bash"
- "-c"
- "for i in $(seq 15 -1 1); do sleep 2; done; until rabbitmqctl status; do sleep 2; done; rabbitmqctl set_policy ha \".\" '{\"ha-mode\":\"exactly\", \"ha-params\":2, \"ha-sync-mode\":\"automatic\"}'"
第一个循环是等待节点自行配置,否则它将与临时配置交互。第二个是等待RabbitMQ的启动
此配置将允许使用两个副本复制所有队列
还要记住,如果postStart失败,那么容器也会失败。另外,使用postStart将延迟pod的准备就绪,直到postStart命令返回。将definitions.json文件添加到ConfigMap中,并确保pod装载该文件(在/etc/rabbitmq中)。在该文件中,指定所有交换机/队列,并为将应用于这些交换机/队列的镜像定义策略 手动设置并从运行的RabbitMQ节点导出定义文件可能更容易
这样-您的群集在启动时已全部配置。您好,感谢您的回复。我在这里问之前已经试过了。但它总是以PostStart脚本的崩溃告终。rabbitmq节点即使在大约6次重新启动后也不会启动