如何在docker群模式下执行动物园pipe理员健康检查?

我们有一个有3个节点的docker群集群。 我们在swarm中部署的一个组件具有本地群集function,并依靠zookeeper进行群集协调和领导者select。

所以我们在swarm中configuration了zookeeper(下面的configuration)(把每个zookeeper实例固定到一个特定的节点上,并且使用swarm overlaynetworking服务发现来让它们find对方)。

这个设置工作正常。 在我们的testing环境中(没有swarm /高可用性),我们使用zookeeper独立模式,并且可以很容易地执行健康检查

然而,在群集中,我无法使这些健康检查工作,因为所有动物园pipe理员都以复制模式运行,并且需要完全启动并运行,然后才能通过服务发现彼此parsing(zookeeper1 / zookeeper2和zookeeper3主机名) 。

  • 如果没有健康检查,最终所有3个实例都会启动并运行,find对方并达成一致。
  • 因为每个动物园pipe理员都无法find其他的2(zookeeper1永远不能解决zookeeper2 / 3,zookeeper2永远不能解决zookeeper1 / 3,….)

在这种情况下是否可以进行健康检查,这是部署动物园pipe理员的正确方法

version: '3' services: zookeeper1: image: zookeeper user: root networks: - cnet environment: - ZOO_MY_ID=1 - ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 # healthcheck: # test: ["CMD", "/bin/zkServer.sh","status"] deploy: mode: replicated replicas: 1 placement: constraints: [node.hostname == centos-a] zookeeper2: image: zookeeper user: root networks: - cnet environment: - ZOO_MY_ID=2 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zookeeper3:2888:3888 # healthcheck: # test: ["CMD", "/bin/zkServer.sh","status"] deploy: mode: replicated replicas: 1 placement: constraints: [node.hostname == centos-b] zookeeper3: image: zookeeper user: root networks: - cnet environment: - ZOO_MY_ID=3 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=0.0.0.0:2888:3888 # healthcheck: # test: ["CMD", "/bin/zkServer.sh","status"] deploy: mode: replicated replicas: 1 placement: constraints: [node.hostname == centos-manager]