使RabbitMQ持久/持久的队列在Kubernetes Pod重新启动后继续生存

时间:2019-06-21 19:49:29

标签: kubernetes rabbitmq persistence persistent-storage

我们的应用程序仅在单个节点上使用RabbitMQ。它在单个Kubernetes窗格中运行。

我们使用持久性/持久性队列,但是每当我们关闭并备份云实例,重新启动RabbitMQ pod时,我们现有的持久性/持久性队列就消失了。

起初,我虽然认为队列的存储量不是持久性是一个问题,但事实并非如此。

似乎队列数据存储在/var/lib/rabbitmq/mnesia/<user@hostname>中。由于Pod的主机名每次都会更改,因此它将为新的主机名创建一组新的数据,并失去对先前持久队列的访问权限。我在mnesia文件夹中建立了许多文件集,所有文件都是以前的重启文件。

如何防止这种行为?

我能找到的最接近的答案是在this question中,但是如果我正确地阅读了它,则只有在群集中同时有多个节点共享队列数据时,此方法才有效。我不确定它是否适用于单个节点。还是会?

3 个答案:

答案 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