Skip to content

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
You can’t perform that action at this time.