`
wbj0110
  • 浏览: 1611736 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

zookeeper启动脚本的bug

阅读更多

最近使用zookeeper发现, 首次启动zookeeper时, 都会遇到一个错误:

 
$ bin/zkServer.sh start
JMX enabled by default
Using config: /home/nauhcud/workspace/zookeeper/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... bin/zkServer.sh: 162: cannot create /tmp/zookeeper/zookeeper_server.pid: Directory nonexistent
FAILED TO WRITE PID
 
查看进程发现zookeeper进程存在, 并可以正常使用. dataDir "/tmp/zookeeper/" 也在. 
 
kill掉zookeeper进程重新启动, 一切正常.
 
删掉dataDir, 问题依旧.
 
查看启动脚本, 发现start逻辑如下:
start)
...
    nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
    if [ $? -eq 0 ] 
    then
      if /bin/echo -n $! > "$ZOOPIDFILE"
      then
        sleep 1
        echo STARTED
      else
        echo FAILED TO WRITE PID   #这句说明写入Pid出现了问题
        exit 1
      fi  
...
 
纵观整个脚本, dataDir没有出现, 因此, dataDir应该是zookeeper进程内部建立的, 并且有一定延迟, 因此将zookeeper进程id写入到dataDir下的pidfile时, dataDir还没有建立好, 因此就出现了上述情况. 
 
解决办法很简单, 在写入pid之前先判断一下datadir是否存在, 让zookeeper有时间做完初始化, 然后再将pid写入即可.
 
start)
...
    nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
    zkpid=$!;
    if [ $? -eq 0 ] 
    then
      while [ ! -d `dirname $ZOOPIDFILE` ]
      do  
        sleep 1;
      done
      if /bin/echo -n $zkpid > "$ZOOPIDFILE"
      then
        sleep 1
        echo STARTED
      else
        echo FAILED TO WRITE PID
        exit 1
      fi  
...
分享到:
评论

相关推荐

    ZooKeeper通过ACL修复未授权访问漏洞

    操作步骤方面,可以使用zkCli.sh脚本来设置权限。例如,对"/dubbo"节点设置ACL权限,需要使用以下命令: ./zkCli.sh -server ip:port setAcl /dubbo ip:**.**.***.***:cdrwa,ip:**.**.***.***:cdrwa 其中,setAcl...

    zookeeper-3.4.9.zip

    1. `bin`:包含启动和停止Zookeeper服务器的脚本,如`zkServer.sh`和`zkCli.sh`。 2. `conf`:默认配置文件,如`zoo.cfg`,用于设置Zookeeper服务器的参数。 3. `lib`:库文件夹,包含运行Zookeeper所需的各种依赖...

    zookeeper-3.4.14.zip

    1. **bin** 目录:包含启动和停止 ZooKeeper 服务器的脚本,如 `zkServer.sh` 和 `zkCli.sh`。前者用于启动 ZooKeeper 服务器,后者则提供一个命令行界面与 ZooKeeper 交互。 2. **conf** 目录:存放配置文件,如 `...

    apache-zookeeper-3.6.1 (1).tar.gz

    解压后,你可以找到 `bin` 目录,里面包含了启动和停止 ZooKeeper 服务的脚本。 对于 Windows 用户,安装过程稍微复杂一些。可以将解压后的目录添加到系统的环境变量 `PATH` 中,这样就可以在命令行中直接运行 ...

    zookeeper-3.4.10.tar.gz

    4. 监控与管理:ZooKeeper提供了一个名为`zkServer.sh`的脚本,用于启动、停止、重启和查看状态等操作。 五、集群部署 在分布式环境中,ZooKeeper通常以集群模式运行,提高可用性和容错性。配置集群需要在每个...

    最新版windows zookeeper-3.4.14.tar.gz

    1. `bin`目录:包含Zookeeper的可执行文件和脚本,如`zkServer.cmd`启动脚本,`zkCli.cmd`客户端命令行工具,以及用于配置环境变量的`setenv.cmd`。 2. `conf`目录:存放Zookeeper的配置文件,如`zoo.cfg`,这是...

    zookeeper-3.4.10.rar

    然后通过bin目录下的zkServer.sh脚本启动Zookeeper服务。 6. **Zookeeper的应用场景** Zookeeper广泛应用于大数据领域,如Hadoop、HBase、Kafka等都依赖于Zookeeper来实现其分布式特性。此外,它也被用于分布式...

    zookeeper-3.4.8

    配置`zoo.cfg`文件,设置数据存储目录、服务器集群等参数,然后启动`zkServer.sh`脚本即可运行Zookeeper。 5. **Zookeeper与Dubbo的集成** 集成过程中,Dubbo服务提供者需要在启动时向Zookeeper注册服务,通过修改...

    zookeeper-3.4.10和zookeeper-3.4.12

    虽然没有具体的文件名列表,但通常这些版本会包含源代码、构建脚本、文档、配置文件以及预编译的二进制文件等。 Zookeeper-3.4.10是一个重要的稳定版本,它可能包含了以下一些关键改进: 1. **错误修复**:这个...

    zookeeper-3.4.6.tar.gz

    `bin`目录包含启动和停止Zookeeper服务的脚本;`src`目录存放源代码,便于开发者进行二次开发或调试。 总的来说,Zookeeper 3.4.6作为一款强大的分布式协调服务工具,其在分布式系统中的角色至关重要。无论是作为...

    zookeeper-3.4.14.tar.gz

    然后,通过bin目录下的zkServer.sh脚本启动Zookeeper服务。 四、Zookeeper的使用 1. 客户端连接:Zookeeper提供了多种客户端工具,如zkCli.sh(命令行客户端),用于与服务器交互,进行节点操作、数据查看等。 2. ...

    zookeeper-3.5.2-alpha-版本安装包

    5. **启动服务**:通过zkServer.sh脚本启动ZooKeeper服务,如果是Windows系统,使用zkServer.cmd。 6. **监控状态**:使用zkCli.sh(Windows系统使用zkCli.cmd)工具连接到ZooKeeper服务,检查其运行状态。 标签...

    zookeeper-3.4.9

    - 使用`zkServer.sh`脚本进行服务的启动、停止和状态查看。 - `zkCli.sh`是Zookeeper的命令行工具,可用于交互式操作Zookeeper集群。 总的来说,Zookeeper 3.4.9是一个强大且稳定的版本,广泛应用于大数据、...

    zookeeper 3.7.0 大数据组件

    - **启动**:执行bin目录下的`zkServer.sh`脚本来启动Zookeeper服务。 - **客户端操作**:使用`zkCli.sh`命令行工具与Zookeeper交互,进行节点操作和数据查看。 **5. 集群模式** 在生产环境中,Zookeeper通常以...

    Kafka的最简安装

    4. Kafka服务的启动:通过执行bin/zookeeper-server-start.sh和bin/kafka-server-start.sh脚本来分别启动Zookeeper和Kafka服务。这两个脚本会使用相应的配置文件(默认为config/zookeeper.properties和config/server...

    jdk-8u151+maven-3.3.9+nginx-1.9.12+zookeeper-3.3.6+tomcat-8.5.23+redis-2.6

    Tomcat 8.5.x系列是基于Java EE 8规范的,提供了更高的性能和稳定性,23是该版本的一个维护更新,修复了若干bug和提升了安全性。 6. **Redis 2.6**: Redis是一个开源的、高性能的键值对数据存储系统,通常用作...

    PyPI 官网下载 | locust-swarm-0.0.41.tar.gz

    通过Zookeeper,开发者可以轻松地启动多个Locust实例,形成一个“swarm”(群),这些实例可以运行在不同的服务器上,共同模拟成千上万的并发用户。这种方式不仅提高了测试的规模,还使得在多台机器上分配负载变得...

    Centos7kafka2.3.03.zip

    5. **启动服务**:使用`systemctl start kafka`命令启动Kafka服务,用`systemctl enable kafka`命令设置开机启动。 6. **验证运行**:通过`kafka-topics.sh`脚本创建主题,然后使用`kafka-console-producer.sh`和`...

    PyPI 官网下载 | yhb-0.1.2.tar.gz

    版本号0.1.2表明这是该库的早期版本,可能存在一些功能限制或bug,但通常已经具备基本的使用功能。 在标签中提到了"zookeeper",这表明"yhb"可能与Apache ZooKeeper有关。Zookeeper是一个分布式协调服务,常用于...

    PyPI 官网下载 | backslash-2.0.1.tar.gz

    它简化了测试脚本的编写,并可以通过与其他库的结合,服务于Zookeeper等分布式协调服务的测试需求。对于Python开发者来说,理解和掌握backslash的使用,能够提升他们在构建和维护大规模分布式系统时的效率和质量。

Global site tag (gtag.js) - Google Analytics