RabbitMQ集群如何识别Docker的容器重启?

时间:2017-01-25 12:06:41

标签: docker rabbitmq docker-swarm-mode

我有一个在Swarm Mode服务中运行RabbitMQ的三个复制容器。每个容器充当RabbitMQ节点以创建RabbitMQ集群。这个docker service create如下:

docker service create -e RABBITMQ_ERLANG_COOKIE='mysecretcookie' --replicas 4 --network rnet -p 15672:15672 -p 5672:5672 rabbitmq

此后,我可以在每个从节点上使用rabbitmqctl <hostname> join_cluster成功创建RabbitMQ群集。

我的问题是,如果一个swarm节点出现故障,Docker会在另一个节点上启动一个新容器,但该容器有一个不同的随机主机名。

由于RabbitMQ使用主机名来识别RabbitMQ集群节点,因此它不会识别新容器上的新主机名,因此它假定原始节点无限期地停机。

我尝试在Docker 1.13中使用新的模板功能,它允许您通过在--hostname="{{.Node.ID}}-{{.Service.Name}}"中指定docker service create来创建静态主机名。但是,您当前无法基于此自定义主机名发现容器,因此无法以这种方式创建RabbitMQ群集。

在Docker开始运行新容器后,我希望能够让RabbitMQ自动重新加入群集节点。这可能吗?

1 个答案:

答案 0 :(得分:0)

I want to be able to have RabbitMQ automatically re-join a cluster node after Docker starts running a new container. Is this possible?

我认为你的意思是re-join a cluster node existing in the newly started docker container

答案 - 事实并非如此。因为根据定义它不会重新加入而只是加入,因为从rabbitmq的角度来看,这只是网络中的一台新机器(计算机,虚拟机,dokcer ......)。