shell脚本
ZK_CLI 服务安装地址
ZK_SERVER 中心地址
TARGET_IP 目标IP
bash
#!/bin/bash
ZK_CLI="/opt/zftzk/zookeeper1/bin/zkCli.sh"
ZK_SERVER="127.0.0.1:2191"
TARGET_IP="127.0.0.2" # 请替换为需要删除的IP
BASE_PATH="/dubbo"
echo "开始查找包含IP $TARGET_IP 的ZooKeeper节点..."
# 第一步:获取所有服务接口
echo "正在获取根节点列表..."
SERVICES=$(echo "ls $BASE_PATH" | $ZK_CLI -server $ZK_SERVER | sed -n '/^\[/p' | tr -d '[],' | tr ',' '\n' | sed 's/^[ \t]*//;s/[ \t]*$//')
if [ -z "$SERVICES" ]; then
echo "无法获取服务列表,请检查连接和路径。"
exit 1
fi
for SERVICE in $SERVICES; do
SERVICE_PATH="$BASE_PATH/$SERVICE/providers"
if [[ "$SERVICE" != *"com."* ]]; then
#echo "跳过非com服务: $SERVICE"
continue
fi
#echo "检查服务: $SERVICE_PATH"
#第二步:获取特定服务的所有提供者节点
PROVIDERS=$(echo "ls $SERVICE_PATH" | $ZK_CLI -server $ZK_SERVER | sed -n '/^\[/p' | tr -d '[],' | tr ',' '\n' | sed 's/^[ \t]*//;s/[ \t]*$//')
#第三步:筛选并处理包含目标IP的节点
for PROVIDER in $PROVIDERS; do
if [[ $PROVIDER == *"$TARGET_IP"* ]]; then
echo "发现匹配节点: $PROVIDER"
# 执行删除操作
echo "delete $SERVICE_PATH/$PROVIDER" | $ZK_CLI -server $ZK_SERVER >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "✓ 已成功删除节点: $PROVIDER"
else
echo "✗ 删除节点失败: $PROVIDER"
fi
fi
done
done
echo "操作完成。"