如何在Openshift

问题描述:

正确安装的RabbitMQ我一直在使用这个形象创造上OpenShift新的应用程序:https://hub.docker.com/r/luiscoms/openshift-rabbitmq/如何在Openshift

运行成功,我可以使用它。我已经添加了一个持久卷。但是,每次重新启动POD时,我都会放松所有数据。这是因为RabbitMq使用主机名来创建数据库目录。

例如:

node   : [email protected] 
home dir  : /var/lib/rabbitmq 
config file(s) : /etc/rabbitmq/rabbitmq.config 
cookie hash : BsUC9W6z5M26164xPxUTkA== 
log   : tty 
sasl log  : tty 
database dir : /var/lib/rabbitmq/mnesia/[email protected] 

如何设置的RabbitMQ总是使用同一个数据库目录?

您应该可以设置环境变量RABBITMQ_MNESIA_DIR以覆盖默认配置。这可以通过OpenShift控制台来完成通过在部署配置或通过oc工具的条目添加到环境中,例如:

oc set env dc/my-rabbit RABBITMQ_MNESIA_DIR=/myDir

你会那么需要在挂载吊舱内持续音量所需路径。既然你已经表示,它已经创建,那么你只需要更新它,例如:

oc volume dc/my-rabbit --add --overwrite --name=my-pv-name --mount-path=/myDir

你需要确保你对提供正确的读/写访问安装路径

编辑:基于问题的意见

造成动态主机名的问题的一些附加的解决方法可以在多种方式来解决:

1.(首选IMO)将部署到StatefulSet。 StatefulSet将提供Pod的命名和网络标识符的稳定性,它必须由无头服务来支持。此功能在Kubernetes 1.9以及OpenShift 3.5以来的技术预览版本中已超出测试版功能

  1. 如果Statefulsets不是选项,请设置Pod的主机名。这可以通过添加环境变量oc set env dc/example HOSTNAME=example以使主机名静态并设置RABBITMQ_NODENAME来完成。
+0

这工作,谢谢。你可能知道我该如何设置一个RabbitMQ集群?如果我让我的兔子节点名称受到POD名称的伤害,那么我认为它可以工作,但是如果POD重新启动,那么Rabbit会设置新的节点名称,群集现在可以工作了。如果我使用环境变量RABBITMQ_NODENAME设置节点名称,则在OpenShift中为该节点名称进行的DNS查找不起作用... – dplesa

+0

似乎有各种各样的方法可以实现集群,但您可能会考虑使用有状态集。链接在kubernetes上的配置指南,您可能会发现有用https://wesmorgan.svbtle.com/rabbitmq-cluster-on-kubernetes-with-statefulsets – user2983542

+0

嗨。在这里尝试你的解决方案。但它不适合我。 RabbitMQ读取数据库,但它然后尝试连接到创建它的前一个节点,我得到这个'''{could_not_start,rabbit, {{failed_to_cluster_with, ['madelink-rabbitmq-1 @ rabbitmq-11-71xk8' ], “Mnesia无法连接到任何节点。”}, {rabbit,start,[normal,[]]}}}看起来'节点变量'仍然在变化(实际上'madelink-rabbitmq-1 @ rabbitmq-11-fztv5') – mrik974

我能够通过设置HOSTNAME环境变量来使其工作。 OSE通常将该值设置为pod名称,因此每次pod重新启动时它都会更改。通过设置它,吊舱的主机名在吊舱重新启动时不会改变。

结合持久卷的队列,消息用户和我假设其他配置通过pod重新启动持续。

这是在OSE 3.2服务器上完成的。我只是在部署配置中添加了一个环境变量。你可以做到这一点通过UI或与OC CLI:

oc set env dc/my-rabbit HOSTNAME=some-static-name 

这可能会是一个问题,如果你运行的服务的多个荚,但在这种情况下,你需要设置适当的RabbitMQ集群,这是一个完全不同的野兽。