记一次zk节点内容异常,导致dubbo-admin无法启动

起因

监控发现dubbo-admin无法正常响应,返回了500错误。

排查过程

重启dubbo-admin,发现无法正常启动,从启动日志中,发现频繁发出2条重复消息:

[localhost-startStop-1-EventThread] INFO  org.I0Itec.zkclient.ZkClient (ZkClient.java:449) - zookeeper state
 changed (SyncConnected)
[localhost-startStop-1-EventThread] INFO  org.I0Itec.zkclient.ZkClient (ZkClient.java:449) - zookeeper state
 changed (Disconnected)

捉包发现是dubbo-admin在接收数据后RESET的TCP连接。
此时我们将dubbo-admin连接其他zk机器能正常启动。异常ZK集群却无法引导dubbo-admin 。

尝试了滚动升级zk集群小版本,问题无法修复。在使用 zkCli.sh 执行命令 ls /dubbo 缺返回了一条消息:
java.io.IOException: Packet len8854970 is out of range!

解决措施:
Zookeeper客户端错误:Packet len* is out of range!
调整zkCli.sh 的启动参数,增加 -Djute.maxbuffer=41943040

增加参数后,发现 /dubbo 目录中增加了好多25结尾的节点。得出结论是,由于节点名称过长导致客户端连接异常而退出。


异常dubbo节点.png

解决办法

记录异常节点数量

> ./zkCli.sh  ls /dubbo   | awk -F',' '{for(i=1 ;i<=NF;i++){print $i}}' |grep   25  | wc -l       
990

生成删除列表

> for i in `./zkCli.sh  ls /dubbo   | awk -F',' '{for(i=1 ;i<=NF;i++){print $i}}' |grep   25  ` ; do echo rmr /dubbo/$i ; done  > /tmp/rmrcommamd

执行删除操作

 > cat /tmp/rmrcommamd | ./zkCli.sh

验证

> ./zkCli.sh  ls /dubbo   | awk -F',' '{for(i=1 ;i<=NF;i++){print $i}}' |grep   25  | wc -l       
0

此时重启dubbo-admin即可恢复正常

你可能感兴趣的:(记一次zk节点内容异常,导致dubbo-admin无法启动)