gpt4 book ai didi

带有 Zookeeper 的 Docker Swarm - 没有选举的主集群管理器

转载 作者:行者123 更新时间:2023-12-02 19:38:48 27 4
gpt4 key购买 nike

我的任务是使用 Zookeeper 作为 dicovery 后端构建一个生产就绪的 Swarm 集群。为此,我使用了官方文档 https://docs.docker.com/swarm/install-manual/ .关于后端发现,我使用了这个:https://docs.docker.com/swarm/discovery/ .现在我有一个问题。当我尝试与 swarm 通信时,出现此错误:没有选定的主集群管理器。

这是我的设置:

我在 Ubuntu 16.04 上运行 docker 客户端/服务器版本 1.12.3,zookeeper 3.4.9 在与我的群管理器相同的主机中启动。我正在使用具有一个群管理器和一个群 worker 的两个节点架构

在每个节点上安装 Docker Engine 后,

$ nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

现在在群管理器上:
$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <swarm-manager-ip>:4000 zk://<swarm-manager-ip>/swarm

在 swarm worker 上:
$ docker run -d swarm join --advertise=<swarm-worker-ip>:2375 zk://<swarm-manager-ip>/swarm

现在,当我尝试查看是否一切正常时,我点击了下面的命令,结果如下。
$ docker -H <swarm-manager-ip>:4000 ps -a
Error response from daemon: No elected primary cluster manager

当我这样做时:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91c3864ba6ee swarm "/swarm manage -H :40" 17 hours ago Up 19 minutes 2375/tcp, 0.0.0.0:4000->4000/tcp swarm-master

我可以看到 swarm master,当我尝试查看 swarm 节点的日志时,我可以看到:
$ docker logs 91c3864ba6ee
time="2016-12-09T20:29:39Z" level=info msg="Initializing discovery without TLS"
time="2016-12-09T20:29:39Z" level=info msg="Listening for HTTP" addr=":4000" proto=tcp
time="2016-12-09T20:29:39Z" level=info msg="Leader Election: Cluster leadership lost"
2016/12/09 20:29:40 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
time="2016-12-09T20:29:40Z" level=error msg="zk: could not connect to a server"
time="2016-12-09T20:29:40Z" level=error msg="zk: could not connect to a server"
time="2016-12-09T20:29:40Z" level=error msg="Discovery error: zk: could not connect to a server"
2016/12/09 20:29:42 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
time="2016-12-09T20:29:42Z" level=error msg="Discovery error: zk: could not connect to a server"
2016/12/09 20:29:44 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
time="2016-12-09T20:29:44Z" level=error msg="Discovery error: zk: could not connect to a server"
time="2016-12-09T20:29:44Z" level=error msg="Discovery error: Unexpected watch error"
2016/12/09 20:29:46 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
2016/12/09 20:29:48 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
time="2016-12-09T20:29:50Z" level=info msg="Leader Election: Cluster leadership lost"
2016/12/09 20:29:50 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout
time="2016-12-09T20:29:50Z" level=error msg="zk: could not connect to a server"
time="2016-12-09T20:29:50Z" level=error msg="zk: could not connect to a server"

但是一个简单的 telnet 命令显示我的 zookeeper 主机正在工作。那么当 swarm 尝试连接到 zookeeper 发现后端时,我该如何设置 i/o 超时呢?

最佳答案

正如评论中提到的,有一个名为 Swarm mode 的新版本。从 1.12 开始嵌入 Docker .它包括一个内置的高可用分布式对象存储,因此您不必自己设置外部 KV 存储。

现在关于 Swarm 第一个版本的问题,有一行引起了我的注意:

2016/12/09 20:29:50 Failed to connect to <swarm-manager-ip>:2181: dial tcp <swarm-manager-ip>:2181: i/o timeout

在我看来,zookeeper 似乎没有在您的机器上运行,或者您没有指向正确的端口。

首先检查 zookeeper 是否在你的机器上运行:
ps aux | grep zookeeper

您应该看到一个进程正在运行。

如果没有,请确保创建 zoo.cfg conf 中的文件Zookeeper 安装目录,指定正确的端口,例如:
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181

你可以看看 This Tutorial引导动物园管理员。

在此之后,您可以运行 zkStart.sh启动 Zookeeper 实例和 swarm 的脚本现在应该能够正确连接和注册 Leader key 。

如果这仍然不起作用,请尝试降级到 zookeeper 3.4.6因为这是自切换到 Docker Swarm Mode 以来最后一个已知的受支持版本.

关于带有 Zookeeper 的 Docker Swarm - 没有选举的主集群管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com