我需要设置一个RabbitMQ集群,并在Kubernetes中的所有队列上启用队列镜像。 如插件名称所示,用于kubernetes对等发现的RabbitMQ插件仅提供基于对等发现的集群机制。 但是,如何启用队列镜像并实现HA,这样,如果由于某种原因而重启了pod或需要扩展Rabbitmq节点,我就可以做到这一点而不会丢失任何消息。
答案 0 :(得分:0)
您可以使用Kubernetes生命周期启用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命令返回为止。
答案 1 :(得分:0)
在您的ConfigMap中添加一个definitions.json文件,并确保您的pod挂载了该文件(在/ etc / rabbitmq中)。在该文件中,指定所有交换/队列,并定义了用于镜像的策略,该策略将应用于这些交换/队列。
从运行中的RabbitMQ节点手动设置并导出定义文件可能会更容易。
这种方式-您的集群在启动时就已配置完毕。