首先检查Zookeeper服务是否正常运行,使用zkServer.sh status命令查看服务状态(若返回“Mode: standalone”或“Leader/Follower”则表示运行正常);若未启动,执行zkServer.sh start启动服务。同时,通过ps aux | grep zookeeper或jps命令确认Zookeeper进程是否存在。
确保客户端与服务器之间的网络通畅,使用ping <zookeeper-server-ip>测试网络连通性;通过telnet <zookeeper-server-ip> <client-port>(默认端口2181)检查端口是否开放。若端口不通,需排查网络配置或中间设备(如路由器、防火墙)的拦截。
检查服务端zoo.cfg文件(通常位于conf目录),确认以下关键配置正确:
clientPort:客户端连接的端口号(默认2181);server.X:集群节点配置(格式为server.X=hostname:peerPort:leaderPort,X为服务器ID,需与dataDir下的myid文件内容一致)。connectString(如zkCli.sh -server 192.168.1.100:2181)。若客户端与服务器不在同一机器,需确保防火墙允许Zookeeper端口的通信。Linux系统可使用firewall-cmd --add-port=2181/tcp --permanent添加规则,然后firewall-cmd --reload生效;若使用安全组(如云服务器),需在安全组配置中放行对应端口。
Zookeeper的日志文件通常位于dataDir目录(如/var/lib/zookeeper)或logs目录(如/var/log/zookeeper),查看zookeeper.out或zookeeper.log文件中的错误信息(如“Address already in use”表示端口占用,“No route to host”表示网络不通),根据日志提示针对性解决。
确保客户端与服务端使用兼容的Zookeeper版本(如3.5.x与3.6.x可能存在不兼容),避免因版本差异导致连接失败。建议客户端与服务端使用相同主版本号的Zookeeper。
若遇到SessionExpired错误,需调整客户端会话超时时间(默认2000ms),可在客户端配置中增加sessionTimeout参数(如Dubbo中设置dubbo.timeout=10000),或在代码中定期调用keepAlive方法保持会话活跃。
rmr /node_path);ls /path命令查看);setData需指定当前版本);netstat -tulnp | grep 2181),修改zoo.cfg中的clientPort或终止占用进程。