RabbitMQ 集群如何识别 Docker 的容器重启?
How can RabbitMQ clusters recognise Docker's container restarts?
我在 Swarm 模式服务中有三个复制容器 运行 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 中的新模板功能,它允许您通过在 docker service create
中指定 --hostname="{{.Node.ID}}-{{.Service.Name}}"
来创建静态主机名。但是,您当前无法发现基于此自定义主机名的容器,因此无法以这种方式创建 RabbitMQ 集群。
我希望能够让 RabbitMQ 在 Docker 启动 运行 新容器后自动重新加入集群节点。这可能吗?
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 一个存在于新启动的 docker 容器中的集群节点”。
答案 - 不是。因为,根据定义,它不会 re-joining 而是简单地加入,因为从 RabbitMQ 的角度来看,这只是一台新机器(计算机、vm、docker ...) 在网络中。
我在 Swarm 模式服务中有三个复制容器 运行 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 中的新模板功能,它允许您通过在 docker service create
中指定 --hostname="{{.Node.ID}}-{{.Service.Name}}"
来创建静态主机名。但是,您当前无法发现基于此自定义主机名的容器,因此无法以这种方式创建 RabbitMQ 集群。
我希望能够让 RabbitMQ 在 Docker 启动 运行 新容器后自动重新加入集群节点。这可能吗?
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 一个存在于新启动的 docker 容器中的集群节点”。
答案 - 不是。因为,根据定义,它不会 re-joining 而是简单地加入,因为从 RabbitMQ 的角度来看,这只是一台新机器(计算机、vm、docker ...) 在网络中。