今天在配置zk的伪集群,发现了如下报错:

【zookeeper】data/zookeeper_server.pid: No such file or directory FAILED TO WRITE PID 报错_zookeeper

上网查看有的说是因为zoo.cfg配置文件“=”前后有空格,查了以后我的配置文件并没有空格,所以我排除了这个原因。


最后解决:

zk的配置文件路径解析确实不够智能,路径必须是全路径而且是从根目录开始的,我的路径开始用的是"~/xxxx"这样的路径,很显然,zk并不认识这个"~"家目录,更改以后问题解决。

另外网上说“#”注释后面必须有空格,我验证了一下并不属实,而且也没有道理啊,所以辟谣一下。

最后再解释一下这个zookeeper_server.pid是什么,这个是一个再zk启动时才创建的一个文件,里面是一个pid,也就是这个zk运行的pid,zk的server脚本就是通过配置文件的data路径配置来找这个pid文件,从而确定server脚本要处理哪一个zk进程,所以一旦配置文件的data目录配置有问题,那么zk服务脚本就找不到这个pid文件了,就会报上面的错。

最后贴一下我的伪集群配置文件:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=~/zookeeper/workdir/server1/data
dataLogDir=/Users/miracle/zookeeper/workdir/server1/log
# the port at which the clients will connect
clientPort=2181

# server.x中的“x”表示ZooKeeper Server进程的标识
server.1=127.0.0.1:2222:2225
server.2=127.0.0.1:3333:3335
server.3=127.0.0.1:4444:4445