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在启动时

我需要在Kubernetes中的所有队列上设置一个启用了队列镜像的RabbitMQ集群。 kubernetes对等发现的RabbitMQ插件只提供了基于对等发现的集群机制,正如插件名称所示。
但是如何启用队列镜像并实现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次重新启动后也不会启动