zookeeper 之It is probably not running

 今天在启动zookeeper集群的单个zookeeper节点时总是报如下错误

[html]  view plain  copy
  1. [root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh status  
  2. JMX enabled by default  
  3. Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg  
  4. Error contacting service. It is probably not running.  
  5. [root@zookeeper1 zookeeper-3.4.5]#  

      于是尝试解决它,首先要想到的是是否安装了JDK,因为zookeeper的运行需要JVM环境,可以使用java和java -version命令来验证,如下所示,可以看到JDK已经正确安装。

[html]  view plain  copy
  1. [root@zookeeper1 zookeeper-3.4.5]# java  
  2. 用法: java [-options] class [args...]  
  3.            (执行类)  
  4.    或  java [-options] -jar jarfile [args...]  
  5.            (执行 jar 文件)  
  6. 其中选项包括:  
  7.     -d32      使用 32 位数据模型 (如果可用)  
  8.     -d64      使用 64 位数据模型 (如果可用)  
  9.     -server   选择 "server" VM  
  10.                   默认 VM 是 server.  
  11.   
  12.     -cp <目录和 zip/jar 文件的类搜索路径>  
  13.     -classpath <目录和 zip/jar 文件的类搜索路径>  
  14.                   用 : 分隔的目录, JAR 档案  
  15.                   和 ZIP 档案列表, 用于搜索类文件。  
  16.     -D<名称>=<>  
  17.                   设置系统属性  
  18.     -verbose:[class|gc|jni]  
  19.                   启用详细输出  
  20.     -version      输出产品版本并退出  
  21.     -version:<>  
  22.                   警告: 此功能已过时, 将在  
  23.                   未来发行版中删除。  
  24.                   需要指定的版本才能运行  
  25.     -showversion  输出产品版本并继续  
  26.     -jre-restrict-search | -no-jre-restrict-search  
  27.                   警告: 此功能已过时, 将在  
  28.                   未来发行版中删除。  
  29.                   在版本搜索中包括/排除用户专用 JRE  
  30.     -? -help      输出此帮助消息  
  31.     -X            输出非标准选项的帮助  
  32.     -ea[:<packagename>...|:<classname>]  
  33.     -enableassertions[:<packagename>...|:<classname>]  
  34.                   按指定的粒度启用断言  
  35.     -da[:<packagename>...|:<classname>]  
  36.     -disableassertions[:<packagename>...|:<classname>]  
  37.                   禁用具有指定粒度的断言  
  38.     -esa | -enablesystemassertions  
  39.                   启用系统断言  
  40.     -dsa | -disablesystemassertions  
  41.                   禁用系统断言  
  42.     -agentlib:<libname>[=<选项>]  
  43.                   加载本机代理库 <libname>, 例如 -agentlib:hprof  
  44.                   另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help  
  45.     -agentpath:<pathname>[=<选项>]  
  46.                   按完整路径名加载本机代理库  
  47.     -javaagent:<jarpath>[=<选项>]  
  48.                   加载 Java 编程语言代理, 请参阅 java.lang.instrument  
  49.     -splash:<imagepath>  
  50.                   使用指定的图像显示启动屏幕  
  51. 有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。  
  52. [root@zookeeper1 zookeeper-3.4.5]# java -version  
  53. java version "1.8.0_112"  
  54. Java(TM) SE Runtime Environment (build 1.8.0_112-b15)  
  55. Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)  
  56. [root@zookeeper1 zookeeper-3.4.5]#   

       那么下面我们便查看zookeeper的端口2181是否已经被占用了(当然,有可能大家已经改用其它端口了,这个根据大家的实际来操作),如下所示,可以看到,2181端口还真的被占用了!这就是问题的根源,我们可以看到占用2181端口的进程号是1403,那么我们便杀掉这个进程。

[html]  view plain  copy
  1. [root@zookeeper1 zookeeper-3.4.5]# netstat -apn | grep 2181  
  2. tcp        0      0 :::2181                     :::*                        LISTEN      1403/java             
  3. [root@zookeeper1 zookeeper-3.4.5]#  

       杀掉进程的命令是kill -9 1403,杀掉进程之后再检查一下是否还有进程占用2181端口,发现已经没有进程占用了。

[html]  view plain  copy
  1. [root@zookeeper1 zookeeper-3.4.5]# kill -9 1403  
  2. [root@zookeeper1 zookeeper-3.4.5]# netstat -apn | grep 2181  
  3. [root@zookeeper1 zookeeper-3.4.5]#  
       下面我们再来启动zookeeper,就应该能正常启动了。

        如果上面的操作还解决不了问题,那么我们接着到zookeeper-3.4.5的data目录下,可以看到如下所示的文件,其中version-2文件夹和zookeeper_server.pid两个文件都是需要删除掉的。

[html]  view plain  copy
  1. [root@zookeeper1 data]# ll  
  2. 总用量 12  
  3. -rw-r--r--. 1 root root    2 4月  26 05:31 myid  
  4. drwxr-xr-x. 2 root root 4096 4月  26 07:03 version-2  
  5. -rw-r--r--. 1 root root    4 4月  28 04:25 zookeeper_server.pid  
  6. [root@zookeeper1 data]#  
       删除操作如下,删完只剩下myid文件了。

[html]  view plain  copy
  1. [root@zookeeper1 data]# rm -rf version-2/ zookeeper_server.pid   
  2. [root@zookeeper1 data]# ls  
  3. myid  
  4. [root@zookeeper1 data]#  

       我们再次尝试启动zookeeper,如下所示,发现zookeeper终于正常启动了。

[html]  view plain  copy
  1. [root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh start  
  2. JMX enabled by default  
  3. Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg  
  4. Starting zookeeper ... STARTED  
  5. [root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh status  
  6. JMX enabled by default  
  7. Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg  
  8. Mode: follower  
  9. [root@zookeeper1 zookeeper-3.4.5]#   

       还有一种情况就是,启动zookeeper集群的某个节点时死活启动不了,把上面所说的三种情况都检查过了还是启动不了,这时我们可以先启动zookeeper的另外几个节点,等把其它节点启动好了,这个启动不了节点就自动启动好了!!!

       基本上这几种情况便可以解决zookeeper无法启动的问题了(如果还是不行,就要看看是不是安装zookeeper的步骤有错误了。

### ZooKeeper 服务未运行问题解决方案 当遇到错误提示 `contacting service. It is probably not running` 时,通常表明 ZooKeeper 服务未能正常启动或无法被客户端访问。以下是可能的原因分析以及对应的解决方法: #### 可能原因及解决办法 1. **ZooKeeper 服务未启动** 如果 ZooKeeper 的守护进程尚未启动,则需要手动启动它。可以通过以下命令来检查并启动 ZooKeeper[^2]: ```bash ps aux | grep zookeeper ``` 若无任何相关进程显示,则需通过如下命令启动 ZooKeeper: ```bash zkServer.sh start ``` 2. **配置文件设置不正确** 配置文件中的参数可能导致连接失败。确认 `$ZOOKEEPER_HOME/conf/zoo.cfg` 文件中是否有正确的监听地址和端口设置。默认情况下,ZooKeeper 使用的是 `2181` 端口。如果更改过此端口号,请确保客户端和服务端均使用相同的端口。 3. **防火墙阻止了通信** 检查服务器上的防火墙规则是否允许外部设备访问指定的 ZooKeeper 端口 (通常是 2181)。可以临时禁用防火墙测试连通性或者添加特定规则开放该端口[^3]: ```bash sudo ufw allow 2181/tcp ``` 4. **日志排查** 查看 ZooKeeper 日志文件可以帮助定位具体问题所在位置。一般位于 `/logs/` 或者自定义路径下找到名为 `zookeeper.log` 的文件,并查找最近发生的异常记录。 5. **网络延迟或其他环境因素影响** 当存在高延时或者其他网络状况不佳的情况下也可能引发此类报错消息。尝试在同一台机器上执行简单的 telnet 测试验证是否存在物理层面障碍: ```bash telnet localhost 2181 ``` 上述每一步骤都应逐一核查直至解决问题为止。 ```python import socket def test_zookeeper_connection(host='localhost', port=2181): try: sock = socket.create_connection((host, port), timeout=5) print(f"Successfully connected to {host}:{port}") sock.close() except Exception as e: print(f"Failed to connect to {host}:{port}. Error: {e}") test_zookeeper_connection() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值