在一次问题排查中,发现应用有部分关于zk的日志报错。且在查看zk状态时,发现有一个节点报错It is probably not running。
1、使用./zkServer.sh status查看所有zk节点的状态。
./zkServer.sh status 这个指令的正常返回应该是leader或者是follower。
2、发现除一个报错节点外,其余节点均返回状态均为follower。
报错节点报错信息如下:
It is probably not running
3、日志排查
在仔细排查过日志后,发现zk无明显报错
4、发现是配置问题
在zk的配置zoo.cfg中,有一个配置:leaderServes=no(默认为yes)
我们先看看leaderServes配置的意义:
leader服务是否接受客户端连接,默认yes。
可以牺牲读取吞吐量为代价增加更高的更新吞吐量,可以设置no。
节点大于3个时建议关闭。
这样就可以明确知道,是由于leaderServes配置为了no,导致leader节点不再接受客户端连接,导致命令行工具无法连接到zk,出现It is probably not running报错。
5、修改配置测试
修改配置:
leaderServes=yes
重新启动zk,之后可以发现./zkServer.sh status查询zk状态,leader节点的返回恢复正常了。