我们的应用程序仅在单个节点上使用RabbitMQ。它在单个Kubernetes窗格中运行。
我们使用持久性/持久性队列,但是每当我们关闭并备份云实例,重新启动RabbitMQ pod时,我们现有的持久性/持久性队列就消失了。
起初,我虽然认为队列的存储量不是持久性是一个问题,但事实并非如此。
似乎队列数据存储在/var/lib/rabbitmq/mnesia/<user@hostname>
中。由于Pod的主机名每次都会更改,因此它将为新的主机名创建一组新的数据,并失去对先前持久队列的访问权限。我在mnesia文件夹中建立了许多文件集,所有文件都是以前的重启文件。
如何防止这种行为?
我能找到的最接近的答案是在this question中,但是如果我正确地阅读了它,则只有在群集中同时有多个节点共享队列数据时,此方法才有效。我不确定它是否适用于单个节点。还是会?
答案 0 :(得分:0)
如何防止这种行为?
通过使用StatefulSet
来实现Pod拥有与其“身份”相关联的持久数据的情况。 The Helm chart是开始阅读的好地方,即使您最终没有使用它。
答案 1 :(得分:0)
我自己遇到了这个问题,发现的最快方法是指定环境变量RABBITMQ_NODENAME =“ yourapplicationsqueuename”并确保我的pod仅有1个副本。
答案 2 :(得分:0)
对我们的案例有帮助的是设置 hostname: <static-host-value>
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 1
...
template:
metadata:
labels:
app: rabbitmq
spec:
...
containers:
- name: rabbitmq
image: rabbitmq:3-management
...
hostname: rmq-host