从osd恢复mon数据

背景介绍

之前手上的一个Ceph 0.94.9集群因为突然断电,三个MON都因为leveldb的问题而无法启动。

已有的解决方案

  1. 从已死的集群中恢复rbd镜像-ceph官方
  2. Ceph的Mon数据重新构建工具-张鹏 或者 官方的文档 这两个是同一个方法

我这里选择第二种

准备工作

ceph-objectstore-tool是从osd收集mon相关数据,这个工具从Hammer(0.94系列)应该就在Ceph中默认安装,并且可以使用,但是收集mon数据的参数--op update-mon-db却是在0.94.10版本中才添加进去的
ceph-monstore-tool工具也是在0.94.10版本中才开始添加到Hammer中的,并且默认没有安装,需要手动安装ceph-test包这个工具才有,并且在0.94.10版本中这个工具是无法使用的,因为这个bug,到目前为止(2017-03-30),这个PR还没有合并到Hammer分支,我已经编译好了的ceph-monstore-tool工具,在http://pan.baidu.com/s/1c1TvcL6 密码:jjic

步骤跟张鹏教程基本上一致,只是有些参数可能不太一致

脚本

这个脚本是对官方的那个类似的脚本的补充,官方的那个脚本好像有点问题
添加注释会让文章中的代码很难看,还有gist在这里:gist代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MS=/tmp/mon-store
KEYRING=/etc/ceph/ceph.client.admin.keyring
FSID=12730f48-443f-4483-9231-545496c5973a
MONID=new-test-3
MONIP=192.168.213.133
HOSTS="new-test-1 new-test-2"
mkdir $MS
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

基本上就这些了