Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ceph相关的脚本总结
# 作用:如果当前集群所有mon都已经因为leveldb数据损坏无法读取,使用本脚本恢复一个mon
# 当一个mon起来后,集群可以访问,进一步处理导出数据或者添加更多mon
# 本脚本流程说明:
# 使用ceph-objectstore-tool工具从osd收集mon相关的数据,存放到/tmp/mon-store
# 使用ceph-authtool工具设置管理密钥的caps
# 使用ceph-monstore-tool工具重建mon数据库,输入为上面的密钥跟从osd收集到的数据
# 将恢复回来的mon数据库放到mon目录下,替代原有mon数据库
# 使用monmaptool工具重建单mon节点的monmap并导入到当前要恢复的mon中
# 启动mon
# 临时目录,在所有节点通用,用于存放从osd收集的mon数据
MS=/tmp/mon-store
# 密钥,原来ceph的admin密钥,沿用原来的
KEYRING=/etc/ceph/ceph.client.admin.keyring
# 原有集群id
FSID=12730f48-443f-4483-9231-545496c5973a
# 要恢复的mon的id,及ip
MONID=new-test-3
MONIP=192.168.213.133
# 所有存在osd的节点列表
HOSTS="new-test-1 new-test-2"
mkdir $MS
# collect the cluster map from OSDs
for host in $HOSTS; do
rsync -avz $MS/ root@$host:$MS/
rm -rf $MS
ssh -t root@$host "for osd in /var/lib/ceph/osd/ceph-*; do ceph-objectstore-tool --data-path \$osd --journal-path \$osd/journal --op update-mon-db --mon-store-path $MS; done"
rsync -avz root@$host:$MS/ $MS/
done
ceph-authtool $KEYRING --import-keyring /var/lib/ceph/mon/ceph*/keyring
ceph-authtool $KEYRING -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
./ceph-monstore-tool $MS rebuild -- --keyring $KEYRING
# mkdir /var/lib/ceph/mon/ceph-$MONID
cp -ra $MS/store.db /var/lib/ceph/mon/ceph-$MONID/
#touch /var/lib/ceph/mon/ceph-$MONID/done
#touch /var/lib/ceph/mon/ceph-$MONID/sysvinit
monmaptool --create --fsid $FSID --add $MONID $MONIP:6789 monmap
ceph-mon -i $MONID --inject-monmap monmap
service ceph start mon
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment