从osd恢复mon数据

  • Post author:
  • Post category:其他


背景介绍

之前手上的一个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


基本上就这些了