启动bookie时报BookieException$InvalidCookieException错误
使用 pulsar-2.6.3 版本搭建pulsar集群,启动 bookie 时报如下错误:
17:26:24.531 [main] ERROR org.apache.bookkeeper.server.Main - Failed to build bookie server
org.apache.bookkeeper.bookie.BookieException$InvalidCookieException:
at org.apache.bookkeeper.bookie.Bookie.checkEnvironmentWithStorageExpansion(Bookie.java:471) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.bookie.Bookie.checkEnvironment(Bookie.java:253) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.bookie.Bookie.<init>(Bookie.java:699) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.proto.BookieServer.newBookie(BookieServer.java:140) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.proto.BookieServer.<init>(BookieServer.java:108) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.server.service.BookieService.<init>(BookieService.java:52) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.server.Main.buildBookieServer(Main.java:313) ~[org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.server.Main.doMain(Main.java:226) [org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.server.Main.main(Main.java:208) [org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
at org.apache.bookkeeper.proto.BookieServer.main(BookieServer.java:317) [org.apache.bookkeeper-bookkeeper-server-4.11.1.jar:4.11.1]
根本原因:每个bookie初次启动后都会向zookeeper注册自己的信息,其中在/ledgers/bookies/目录下会生成一个新的节点,节点名称以$(bookie_ip):$(bookie_port)命名,
节点数据包括bookieHost、journalDir、ledgerDirs、instanceId等信息。同时,在bookie的数据目录下,包括journal和ledger,会生成一个current目录,该目录下会新建一个VERSION
文件,文件中的内容和zookeeper中/ledgers/bookies/$(bookie_ip):$(bookie_port)节点的数据是一致。如果bookie本身的VERSION文件中存放的数据和zookeeper相应节点中存放的不
一致,则启动bookie时就会报cookie非法的错误。
该错误常发生于配置完 bookie 节点后第一次启动,但因为配置问题启动失败(此时该 bookie 节点已经将自身的(错误)信息注册到了 zookeeper 上),重新修改好配置再次启动时。配置错误的地方可能在 bookie 配置中的 ip、zk 地址、数据目录等地方。
解决办法:
1. 停掉所有 bookie 节点;
2. 删除 zk 上的所有元数据信息;
3. 删除所有 bookie 节点 journal 目录以及 ledger 目录下的所有数据;
4. 重新初始化集群;
5. 保证配置正确的前提下重启所有 bookie 节点;