如何find哪个节点是多swarmpipe理器集群中的docker swarm中的pipe理器节点?

我创build了一个有4个节点Docker Swarm集群 2是swarm manager (swarm支持多个pipe理器)我知道如果当前的pipe理器节点出现故障,那么第二个pipe理器将扮演 swarm manager 的angular色

在我的情况下,我打电话给群pipe理器的其余呼叫创build与副本等服务。

在某个时候,如果这个经理倒下,第二个经理变成经理,我怎么知道?

有什么办法通知特定的节点是一个经理dynamic?

请给我这个澄清?

我用docker-machine来build立我的本地群(运行VirtualBox)。

如果你运行docker-machine ls它已经显示在你的asterix(*)的ACTIVE栏里。 或者,使用docker node ls来查看更多的细节 – 在那里你会看到其他pipe理者是否可以到达,哪个是领导明确。

您还需要两名以上的pipe理人员进行容错(请点击https://docs.docker.com/engine/swarm/admin_guide/ )。 Swarm经理使用Raft协议来获得强大的一致性。 为此,他们需要大多数pipe理者节点,大部分2是2,所以没有容错性。 如果电stream失效,你的群将无法选出新的领导者。

我不知道你是否可以通知领导者的变化。 你可以做的肯定是指向任何经理节点,所以如果你使用REST,我可以想象设置HA代理,不会使用不健康的节点,并指向所有的经理。 任何经理都可以接受服务电话,然后将其转发给领导经理进行安排。

使用CLI

(手动)知道pipe理员是否改变的快速方法是通过CLI:

 $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 46aqrk4e473hjbt745z53cr3t node-5 Ready Active Reachable 61pi3d91s0w3b90ijw3deeb2q node-4 Ready Active Reachable a5b2m3oghd48m8eu391pefq5u node-3 Ready Active e7p8btxeu3ioshyuj6lxiv6g0 node-2 Ready Active ehkv3bcimagdese79dn78otj5 * node-1 Ready Active Leader 

您可以在“pipe理者MANAGER STATUS列下find当前领导者的哪位经理。

您也可以在每个节点上单独检查使用“ Leader字段的格式,例如:

 $ docker node inspect <id-node> --format "{{ .ManagerStatus.Leader }}" true 

使用Docker Remote API

您也可以通过编程方式检查哪一位经理是领导者。 docker远程API暴露了可用于列出节点的Nodes API端点 。

你可以提供一个filter作为一个参数,它采用key=valueforms。

您可以使用该filter仅列出pipe理器节点(使用role=manager ),然后可以parsing和过滤JSON输出以保持其Leader字段设置为true (在ManagerStatus下)的节点。

不幸的是没有leaderfilter( 但 ),但我认为这可能是一个有效的增强提议在swarmkit问题跟踪。

Docker群模式中没有任何事件stream( 这个问题在swarmkit存储库中被跟踪)。 我想在将来,一个事件会触发Leader交换,如果你正在监听这些事件,你将被dynamic地通知新的领导 (例如,如果你有一个特殊的设置,并且想dynamic更新consul中的条目,nginx或联锁)。

如果您使用分布式键/值存储 ,请检查其日志,或者可以在这两个swarmpipe理器上使用此命令,它会向您显示主节点。 docker -H tcp:// <swarm_ip:swarm_port> info

使用docker-machine,看看那里 ,设置你的shell连接swarm manager并使用docker info命令。