伪集群启动失败
即用./zkServer start XXX
可以看到启动成功的提示,但是用zkServer.sh status XXX
又提示该服务没有正常运行之类的提示。
这里参考了网上的伪集群教程,用多个配置文件启动多个zkServer。而我配置文件中的dataDirectory包含了中文,先开始也怀疑是因为路径名包含了中文的原因。但是测单机的时候也能正常运行,用status指令检查也是正常。
后来才发现是因为以集群模式启动的时候,dataDirectory中要有一个myid文件,这个文件是要在启动时解析这个配置文件的时候就要读取的,而问题就是出在读取这个myid文件上(看了启动输出日志发现出现了一小段极难发现的乱码)。单纯解析dataDirectory是正常的,有没有中文无所谓,但是用dataDirectory路径拼上myid时,如果这个完整路径名有中文,它就会读取myid失败。
编译导出zookeeper c API
我用的zookeeper-3.4.14 相关的C API在zookeeper根目录下的zookeeper-client/zookeeper-client-c下,而不是什么src/c。
在上面所说的目录下执行:(如何编译具体可以看该目录下的README文件)
./configure
make
make install
最后编译完后没在usr/local/lib和usr/local/include下没找到自己要的库文件和头文件,发现是因为编译的时候没有root权限,无法对/usr/local文件夹进行修改,sudo后问题就没了。