首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动物园管理员团不会启动

动物园管理员团不会启动
EN

Stack Overflow用户
提问于 2020-08-28 06:56:14
回答 1查看 823关注 0票数 1

我已经建立了一个动物园管理员-整体(3.4.9版)与3个实例。这在测试系统中很有魅力,但在实际系统中却没有出现。错误消息如下:

代码语言:javascript
复制
2020-08-28 06:26:24,643 [myid:1] - WARN  [WorkerSender[myid=1]:QuorumCnxManager@400] - Cannot open channel to 2 at election address /10.3.1.173:3888
java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:381)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:354)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433)
    at java.lang.Thread.run(Thread.java:745)

我在这里和其他地方搜索过,但是解决这个问题的唯一可接受的解决方案是将每个节点的服务器地址设置为0.0.0.0,这在这里是行不通的。我的设置是完全篡改和应用ansible,所以它可能看起来有点不同,人们通常似乎这样做。但是连接字符串(例如,对于server.1 )是这样的:

代码语言:javascript
复制
"server.1=0.0.0.0:2888:3888 server.2=10.3.1.173:2888:3888 server.3=10.3.1.175:2888:3888"

它也应用于动物园管理员的内部配置,如日志所示(同样用于server.1):

代码语言:javascript
复制
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
2020-08-28 06:26:23,549 [myid:] - INFO  [main:QuorumPeerConfig@124] - Reading configuration from: /conf/zoo.cfg
2020-08-28 06:26:23,559 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 10.3.1.175 to address: /10.3.1.175
2020-08-28 06:26:23,559 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 10.3.1.173 to address: /10.3.1.173
2020-08-28 06:26:23,560 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 0.0.0.0 to address: /0.0.0.0
2020-08-28 06:26:23,560 [myid:] - INFO  [main:QuorumPeerConfig@352] - Defaulting to majority quorums
(...)
2020-08-28 06:26:23,570 [myid:1] - INFO  [main:QuorumPeerMain@127] - Starting quorum peer
2020-08-28 06:26:23,577 [myid:1] - INFO  [main:Login@294] - successfully logged in.
2020-08-28 06:26:23,579 [myid:1] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181

这适用于动物园管理员的所有3个实例,但它们都不能与另一个实例对话。

其他信息:

除了服务器的IP地址外,

  • 的配置与测试系统完全相同.Ansible Docker模块配置相同,JAAS(使用DigestLoginModule)是相同的,所有码头容器中的环境变量也是相同的,
  • 系统中的每个服务器都可以访问其他服务器。我也可以从每个动物园管理员容器中打开这些服务器。此外,我可以在JMX-端口上的任何其他容器的活系统内卷曲每个动物园管理员容器。这样他们就可以通过网络连接了。

请帮助,谢谢

编辑:@Stefano问我如何启动码头集装箱,所以我将尝试提供一些见解。如前所述,它是使用"docker_container“插件的任务中的一个Ansible安装程序,该插件用于在计算机上安装3个实例:

代码语言:javascript
复制
---
- name: Install Zookeeper
  docker_container:
    name: zookeeper
    image: zookeeper:3.4.9
    state: started
    ports:
      - "2181:2181" # Zookeeper Port
      - "2888:2888" 
      - "3888:3888" # Election ports
      - "9998:8080" # JMX metrics
    env:
        ZOO_MY_ID: "{{ ID }}"  #this is 1 for server.1, etc.
        ZOO_PORT: "2181"
        ZOO_SERVERS: "{{ ZOO_SERVERS }}"  #provided in host-vars
        SERVER_JVMFLAGS: "-Djava.security.auth.login.config=/etc/kafka/zookeeper_jaas.conf -javaagent:/opt/jmx-exporter/jmx_prometheus_javaagent-0.12.0.jar=8080:/opt/jmx-exporter/zookeeper.yml"
    volumes:
      - /home/ansible/volumes/zoo1/data:/data
      - /home/ansible/volumes/zoo1/datalog:/datalog
      - /home/ansible/jmx-exporter:/opt/jmx-exporter
      - /home/ansible/zookeeper_jaas.conf:/etc/kafka/zookeeper_jaas.conf

ZOO_SERVERS从主机文件中提取:

代码语言:javascript
复制
all:
  (...)
  children:
    zookeeper:
      hosts:
        zoo1:
          ID: "1"
          ZOO_SERVERS: "server.1=0.0.0.0:2888:3888 server.2=10.3.1.173:2888:3888 server.3=10.3.1.175:2888:3888"
          ansible_host: 10.3.1.171
        zoo2: 
          ID: "2"
          ZOO_SERVERS: "server.1=10.3.1.171:2888:3888 server.2=0.0.0.0:2888:3888 server.3=10.3.1.175:2888:3888" 
          ansible_host: 10.3.1.173
        zoo3: 
          ID: "3"
          ZOO_SERVERS: "server.1=10.3.1.171:2888:3888 server.2=10.3.1.173:2888:3888 server.3=0.0.0.0:2888:3888"
          ansible_host: 10.3.1.175
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-28 07:55:49

所以,当我读回我上面评论的内容时,我注意到我实际上不是在使用“confluentinc/cp-zoo牧民”停靠图,而是使用“动物管理员”停靠图。

一旦我将“动物管理员:3.4.9”改为“confluentinc/cp- ZOO_PORT :5.4.0”,并将ZOO_PORT env-var的名称更改为ZOOKEEPER_CLIENT_PORT,它就起了作用。

这并不能回答“为什么”,但也许这个解决办法可以帮助到其他人。我会标记这是目前公认的答案,但请随时提供更多的洞察力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63628916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档