zookeeper的znode节点过多无法通过zkCli.sh移除节点

背景描述:zookeeper的一个目录下的znode节点过多,导致在执行ls 和rmr命令的时候,直接终止会话退出,无法递归删除下面的子节点,具体情况如下(生产环境的zookeeper是clickhouse的元数据管理集群,有一个故障是clickhouse副本同步堆积问题),接下来的操作需要知道这个子节点中的znode有序节点是怎么命名的,一般都是‘节点名称-000000xxxxxx’,由于无法获取子节点的列表,所以需要通过循环删除节点找到,大概的区间,然后再逐条尝试删除node

这边写了一个jave的操作代码如下

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

public class DeleChildNode {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        if (0 == args.length) {
            System.out.println("没有zkurl和zkpath参数,自动退出,参数样例:127.0.0.1:2181 /clickhouse/2/table/host/replices/queue/ 10000 9999999999 10001");
            System.exit(0);
        }
        System.out.println("zkurl:" + args[0] + "\tzkpath:" + args[1] + "\t起始位置:" + args[2] + "\t结束位置:" + args[3] + "\t步长:" + args[4] );
        ZooKeeper zk = new ZooKeeper(args[0], 500000, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                // dosomething
                System.out.println("成功建立监听连接。。。");
            }
        });
        String t;
        int start = Integer.parseInt(args[2]);
        int end = Integer.parseInt(args[3]);
        int length = Integer.parseInt(args[4]);
        String queue;
        String[] zore = {"0", "00", "000", "0000", "00000"};
        for (int i = start; i < end; i = i + length) {
            try {
                t = i + "";
                queue = "queue-" + zore[10 - t.length() - 1] + t;
//                System.out.println(args[1] + queue);
                zk.delete(args[1] + queue, -1);
                System.out.println("success:"+args[1] + queue);
            } catch (Exception e) {
                System.out.println("fail:"+e.getMessage());
            }
        }
        zk.close();
    }
}

通过上面的这个运行的日志找到删除成功的序列号,定位start 和 end结束点,然后逐个删除

ps备注:目前压测了一下这个zookeeper,一个目录下有25w~35W的节点目录,获取这个目录下的这个子目录就会有问题,这个有大佬知道是什么问题吗?

 

posted @ 2024-02-29 17:54  dididi崩了  阅读(121)  评论(0编辑  收藏  举报