1,背景,部署大数据组件,由于手动部署比较麻烦,所以自己创建脚本部署,启动zookeeper报错
2,报错如下
2024-08-02 13:45:11,407 [myid:2] - WARN [QuorumPeer[myid=2](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@679] - Cannot open
channel to 1 at election address com85/10.1.1.85:3888
java.net.ConnectException: Connection refused (Connection refused)
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:650)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:707)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:735)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910)
3,检查config的配文件置没问题,检查最后发现是
server.1=com85:2888:3888
server.2=com86:2888:3888
server.3=com87:2888:3888
这个里面配置的和myid的不同,com85应该是要配置myid=1,结果配置了2,导致起不来
4,原因
在ZooKeeper集群的配置中,myid是每个ZooKeeper服务器节点用来标识自己身份的文件,通常位于ZooKeeper的数据目录下的myid文件中。这个文件包含一个整数,用于标识该服务器在ZooKeeper集群中的唯一标识。每个服务器节点都有一个唯一的myid,这是集群内部用于识别和通信的基础1。
而server.1、server.2等是在ZooKeeper的配置文件中定义的,用于指定集群中各个服务器的地址和端口。这些设置告诉ZooKeeper集群如何找到并与其他服务器通信。例如,server.1=hadoop3:2888:3888表示编号为1的服务器位于hadoop3主机上,该主机用于与其他服务器通信的端口为2888,而在选举过程中使用的端口为38881。
简而言之,myid是每个ZooKeeper服务器节点用来标识自己的内部标识符,而server.1等则是配置文件中定义的服务器标识和通信信息,两者虽然服务于不同的目的,但在ZooKeeper集群的上下文中共同作用,确保集群的正确运行和服务器之间的通信