上下文:主机是AWS-EC2 /Ubuntu14.04.5,带有Docker 17.05.0-ce版本。容器是由公开可用的回购映像cbhihe/serf-alpine-bash__构建的。所有容器都位于同一个EC2实例上,并与网络接口"docker0“共享相同的默认网桥网络。
通过从主机的外壳传递cmds,尝试连接节点serfDC1 (id d4fd90692e18)和serfDC2 (id 6353e7f6134d):
$ docker exec serfDC1 serf agent -node=Node1 -bind=0.0.0.0:7946
==> Starting Serf agent…
==> Starting Serf agent RPC...
==> Serf agent running!
Node name: 'd4fd90692e18'
Bind addr: '0.0.0.0:7946'
RPC addr: '127.0.0.1:7373'
Encrypted: false
Snapshot: false
Profile: lan
==> Log data will now stream in as it occurs:
2017/06/04 00:01:10 [INFO] agent: Serf agent starting
2017/06/04 00:01:10 [INFO] serf: EventMemberJoin: d4fd90692e18 127.0.0.1
2017/06/04 00:01:11 [INFO] agent: Received event: member-join
^C在发现节点1的容器的IP=172.17.0.4之后,我可以向Node2发出serf agent -join cmd:
$ docker exec serfDC2 serf agent -node=Node2 -join=172.17.0.4
==> Starting Serf agent...
==> Starting Serf agent RPC...
==> Serf agent running!
Node name: '6353e7f6134d'
Bind addr: '0.0.0.0:7946'
RPC addr: '127.0.0.1:7373'
Encrypted: false
Snapshot: false
Profile: lan
==> Joining cluster...(replay: false)
Join completed. Synced with 1 initial agents
==> Log data will now stream in as it occurs:
2017/06/04 00:18:35 [INFO] agent: Serf agent starting
2017/06/04 00:18:35 [INFO] serf: EventMemberJoin: 6353e7f6134d 127.0.0.1
2017/06/04 00:18:35 [INFO] agent: joining: [172.17.0.4] replay: false
2017/06/04 00:18:35 [INFO] serf: EventMemberJoin: d4fd90692e18 127.0.0.1
2017/06/04 00:18:35 [INFO] agent: joined: 1 nodes
2017/06/04 00:18:36 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
2017/06/04 00:18:36 [INFO] agent: Received event: member-join
2017/06/04 00:18:37 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34876
2017/06/04 00:18:37 [ERR] memberlist: Failed TCP fallback ping: EOF
2017/06/04 00:18:37 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
2017/06/04 00:18:38 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
2017/06/04 00:18:39 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34879
2017/06/04 00:18:39 [ERR] memberlist: Failed TCP fallback ping: EOF
2017/06/04 00:18:40 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
2017/06/04 00:18:41 [WARN] memberlist: Got ping for unexpected node 'd4fd90692e18' from=127.0.0.1:7946
2017/06/04 00:18:42 [WARN] memberlist: Got ping for unexpected node d4fd90692e18 from=127.0.0.1:34881
2017/06/04 00:18:42 [ERR] memberlist: Failed TCP fallback ping: EOF
2017/06/04 00:18:42 [INFO] memberlist: Marking d4fd90692e18 as failed, suspect timeout reached (0 peer confirmations)
2017/06/04 00:18:42 [INFO] serf: EventMemberFailed: d4fd90692e18 127.0.0.1
2017/06/04 00:18:43 [INFO] agent: Received event: member-failed
2017/06/04 00:18:44 [INFO] memberlist: Suspect d4fd90692e18 has failed, no acks received
2017/06/04 00:19:05 [INFO] serf: attempting reconnect to d4fd90692e18 127.0.0.1:7946
^C如以下所示,导致未能加入:
$ docker exec serfDC2 serf members
6353e7f6134d 127.0.0.1:7946 alive
d4fd90692e18 127.0.0.1:7946 failed
$ docker exec serfDC1 serf members
d4fd90692e18 127.0.0.1:7946 alive
6353e7f6134d 127.0.0.1:7946 failed我已经做了很长一段时间了,不知该往哪里去。Hashicorp和Docker的文档似乎没有涵盖两个不同容器中的两个serf代理之间初始握手的这一方面。
,谁能告诉我我在哪里拐错了弯?,任何答案都会很好,真的。Tx。
发布于 2017-06-04 02:01:53
农奴节点需要用一个可路由的地址“宣布”自己。在您的示例中,它们互相告诉对方:“嗨,我是localhost:.”,所以每个容器都试图回答localhost,这是错误的,因为每个容器都有自己的localhost。
有一个选项可以将代理配置为使用eth0 ip向网络中的其他节点做广告:-iface。然后,您需要放弃-bind选项。这些端口是默认的,因此不需要自定义。
因此,对于node1:
serf agent -node=Node1 -iface=eth0对于node2:
serf agent -node=Node2 -join=172.17.0.2 -iface=eth0来自文档
-iface -此标志可用于提供绑定接口。如果接口是已知的,而不是地址,则可以使用它来代替-bind。
对我来说是正常的:
Node1:
==> Log data will now stream in as it occurs:
2017/06/04 01:56:40 [INFO] agent: Serf agent starting
2017/06/04 01:56:40 [INFO] serf: EventMemberJoin: Node1 172.17.0.2
2017/06/04 01:56:41 [INFO] agent: Received event: member-join
2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node2 172.17.0.3
2017/06/04 01:57:03 [INFO] agent: Received event: member-joinNode2:
==> Log data will now stream in as it occurs:
2017/06/04 01:57:02 [INFO] agent: Serf agent starting
2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node2 172.17.0.3
2017/06/04 01:57:02 [INFO] agent: joining: [172.17.0.2] replay: false
2017/06/04 01:57:02 [INFO] serf: EventMemberJoin: Node1 172.17.0.2
2017/06/04 01:57:02 [INFO] agent: joined: 1 nodes
2017/06/04 01:57:03 [INFO] agent: Received event: member-join编辑:
如果每个容器都在自己的VM (EC2实例)中,因为每个实例都有自己的停靠网络,并且没有互联,您必须提供EC2实例IP并公开相应的端口。使用-advertise
-advertise -广告标志用于更改我们向集群中的其他节点发布的地址。
Node1:
serf agent -node=Node1 -iface=eth0 -advertise=INSTANCE_IPNode2:
serf agent -node=Node2 -join=NODE1_INSTANCE_IP -iface=eth0并记住公开( docker run中的农奴端口)。
docker run -p 7946:7946 (...rest of the command...)https://stackoverflow.com/questions/44349963
复制相似问题