zookeeper配置單機僞集羣,啓動後查看狀態沒有正常運行。
[root@ZhOu bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@ZhOu bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/opt/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
打開bin中zookeeper.out,提示錯誤信息如下:
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/opt/zookeeper1/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:154)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
Caused by: java.lang.IllegalArgumentException: /usr/opt/zookeeper1/data/myid file is missing
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:406)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:150)
... 2 more
原因:
集羣中的每臺ZK server都會有一個用於惟一標識自己的id,有兩個地方會使用到這個id:myid文件和zoo.cfg文件中。myid文件存儲在dataDir目錄中,指定了當前server的server id。在zoo.cfg文件中,根據server id,配置了每個server的ip和相應端口。Zookeeper啓動的時候,讀取myid文件中的server id,然後去zoo.cfg 中查找對應的配置。
解決方案如下:
在zoo.cfg中指定的dataDir目錄中創建文件myid,裏面只需要填寫你設置的server編號即可。如下:
server.1=127.0.0.1:2800:3800
server.2=127.0.0.1:2801:3801
server.3=127.0.0.1:2802:3802
在第一個zookeeper裏面,創建myid文件,裏面填寫個1就可以了,2、3裏面同樣各自設置,然後重啓就可以了。