Ceph集群的PG自动化修复脚本

ceph-pg-repair.sh

#!/bin/bash

# 缓存Ceph命令结果
ceph_status=$(ceph -s)
ceph_health_detail=$(ceph health detail)

# 提取各类状态
health_state=$(echo "$ceph_status" | grep health | awk '{print $2}')
inconsistent_state=$(echo "$ceph_status" | grep inconsistent)
damaged_pg=$(echo "$ceph_health_detail" | grep -A1 PG_DAMAGED | tail -1 | awk '{print $2}')
damaged_info=$(echo "$ceph_health_detail" | grep -A1 PG_DAMAGED | tail -1)

cmd_dir=$(cd "$(dirname "$0")" && pwd)

cd "$cmd_dir" || {
	echo "切换脚本目录失败,退出执行!" >>ceph-pg-repair.log
	exit 1
}

date >>ceph-pg-repair.log
case "$health_state" in
"HEALTH_OK")
	echo "Cluster HEALTH_OK!" >>ceph-pg-repair.log
	;;

"HEALTH_WARN")
	echo "Cluster HEALTH_WARN!" >>ceph-pg-repair.log
	;;

"HEALTH_ERR")
	if [ -z "$inconsistent_state" ]; then
		echo "Cluster is not a consistency check problem!" >>ceph-pg-repair.log
	else
		if [ -z "$damaged_pg" ]; then
			echo "No PG with inconsistent found, please check manually!" >>ceph-pg-repair.log
		else
			echo "$damaged_info" >>ceph-pg-repair.log
			ceph pg repair "$damaged_pg"
			if [ $? -ne 0 ]; then
				echo "Repair error, please check manually!" >>ceph-pg-repair.log
			fi
			echo "The repaired pg is $damaged_pg" >>ceph-pg-repair.log
		fi
	fi
	;;

*)
	echo "Unknown state, please check manually!" >>ceph-pg-repair.log
	;;
esac
echo "------------------------------------------------------------" >>ceph-pg-repair.log

posted @ 2022-02-10 14:24  wanghongwei-dev  阅读(112)  评论(0)    收藏  举报