Docker Swarm与Zookeeper – 没有select主要的集群pipe理器
我的任务是使用Zookeeper作为后端来构build一个生产就绪的Swarm集群。 为此,我使用了官方文档, https://docs.docker.com/swarm/install-manual/ 。 关于后端发现,我使用了这个: https : //docs.docker.com/swarm/discovery/ 。 现在我有一个问题。 当我尝试与群集通信时,我有这个错误:没有选举的主要群集pipe理器。
这是我的设置:
我运行在Docker Client / Server版本1.12.3的Ubuntu 16.04上,zookeeper 3.4.9和我的swarm manager在同一个主机上启动。 我正在使用一个swarm manager和swarm worker两个节点的体系结构
在每个节点上安装Docker Engine之后,
$ nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
现在在swarm经理身上:
$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <swarm-manager-ip>:4000 zk://<swarm-manager-ip>/swarm
在群工上:
$ 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主机正在工作。 那么当群集尝试连接到zookeeper发现后端时,如何进行ai / o超时?
正如在评论中提到的那样,自1.12
版本以来,有一个名为Swarm mode
的新版本embedded了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
你应该看到一个进程正在运行。
如果没有,请确保在zookeeper安装的conf
目录中创build一个zoo.cfg
文件,指定正确的端口,例如:
tickTime=2000 dataDir=/var/zookeeper clientPort=2181
你可以看看这个教程引导动物园pipe理员。
之后,您可以运行zkStart.sh
脚本来启动您的zookeeper实例,swarm现在应该能够正确连接并注册Leader
键。
如果这仍然不起作用,请尝试降级到zookeeper 3.4.6
因为这是自从切换到Docker Swarm Mode
以来最后一个已知的受支持版本。
- Zookeeper集群通过2个docker集装箱
- 创build主题,但在Kubernetes上使用Python获取Kafka FailedPayloadsError
- 运行docker映像时运行时错误“oci运行时错误
- 是否有可能使用卡夫卡与docker组成一个单一的主机,而不暴露动物园pipe理员和卡夫卡端口到公共互联网?
- Docker可以设置为dynamic符合它所运行的Swarm吗?
- 哪一个主机名可以从一组动物园pipe理员中select
- 使用Kafka,Zookeeper和MongoDB Dockerize Spring Boot Java应用程序
- 无法连接到在Vagrant上运行的HBase(Zookeeper)
- 如何安排监控CPU,内存,磁盘等工作