CEPH集群MON全部挂掉后恢复方法

CEPH集群MON全部挂掉后恢复方法


2017/11/14 恩松

本文介绍ceph集群中所有mon服务均无法启动或者说mon节点所在服务器os全部无法启动情况下的恢复方法,当然,这种极端情况出现的概率非常低,这里前提是要做好mon节点的配置文件和元数据备份,不然就没办法恢复了。我的环境是使用kolla部署的,恢复方法也都是基于kolla工具下才有效,如果采用物理机部署,具体操作上会有所区别,但大致的思路和原理是一样的。

备份配置文件及元数据

采用kolla部署,默认的元数据存储路径如下

[root@node01 mon]# cd /var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/
[root@node01 ceph-172.21.196.11]# ls
keyring  store.db

将该目录完整备份

[root@node01 ~]# cp -r /var/lib/docker/volumes/ceph_mon/_data/  /root/ceph-mon-bak/

另外还有 配置文件,里面保存了key,默认路径如下:

[root@node01 ~]# cd /etc/kolla/ceph-mon/
[root@node01 ceph-mon]# ls
ceph.client.admin.keyring  ceph.client.mon.keyring  ceph.client.radosgw.keyring  ceph.conf  ceph.monmap  config.json

同样,将该目录完整备份

[root@node01 ceph-mon]# cp -r /etc/kolla/ceph-mon /root/ceph-mon-bak/

我这里所有的相关进程都是跑在docker里,删除mon服务和数据之前先看下集群的整体状态

[root@node01 kolla]# docker exec -ti ceph_mon /bin/bash
(ceph-mon)[root@node01 /]# ceph -s
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd
     health HEALTH_OK
     monmap e4: 2 mons at {172.21.196.11=172.21.196.11:6789/0,172.21.196.12=172.21.196.12:6789/0}
            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.12
     osdmap e491: 15 osds: 15 up, 15 in
            flags sortbitwise,require_jewel_osds
      pgmap v679746: 7096 pgs, 25 pools, 184 GB data, 50069 objects
            555 GB used, 39643 GB / 40199 GB avail
                7096 active+clean

有2个mon节点,15个osd。现在我们将mon数据和容器都删除掉

[root@node01 kolla]# docker rm ceph-mon -f
[root@node01 kolla]# rm -rf /var/lib/docker/volumes/ceph_mon/
[root@node01 kolla]# rm -rf /etc/kolla/ceph-mon/

另外一个节点执行同样的操作。删除完之后,修改kolla的配置文件,执行部署命令,会发现有错误,在ceph创建keyring时中断了,报错信息如下:

TASK [ceph : Fetching Ceph keyrings] *******************************************

fatal: [controller01]: FAILED! => {“failed”: true, “msg”: “The conditional check ‘{{ (ceph_files_json.stdout | from_json).changed }}’ failed. The error was: No JSON object could be decoded”

原因是在我删除容器和配置文件后,kolla生成的相关volume是没有删除的。其还存在于/var/lib/docker/volume下。因此当再次构建kolla时,这些已经存在的volume会阻止ceph_mon的启动,会导致上述错误Ceph keyring无法获取而产生的一些错误。因此 删除掉docker volume ls下的卷。再次部署就能够成功的解决问题。

[root@node02 kolla]# docker volume ls
DRIVER              VOLUME NAME
local               ceph_mon
local               ceph_mon_config
local               kolla_logs
local               libvirtd
local               nova_compute
local               nova_libvirt_qemu
local               openvswitch_db
[root@node02 kolla]# docker volume rm ceph_mon ceph_mon_config

这时再部署即可成功。这里有2个mon节点,我是一个一个的加入的,添加完一个mon节点后,查看集群状态

(ceph-mon)[root@node02 /]# ceph -s
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd
     health HEALTH_ERR
            no osds
     monmap e1: 1 mons at {172.21.196.12=172.21.196.12:6789/0}
            election epoch 3, quorum 0 172.21.196.12
     osdmap e2: 0 osds: 0 up, 0 in
            flags sortbitwise,require_jewel_osds
      pgmap v3: 320 pgs, 2 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                 320 creating

这其实 是一个全新的ceph集群,现在把之前备份的数据拷贝过来,覆盖新的数据

[root@node02 ~]# cp -r ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/LOCK’? y
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/CURRENT’? y
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/keyring’? y
[root@node02 ~]# cp -r ceph-mon-bak/ceph-mon/* /etc/kolla/ceph-mon/
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.admin.keyring’? y
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.mon.keyring’? y
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.radosgw.keyring’? y
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.conf’? y
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.monmap’? y
cp: overwrite ‘/etc/kolla/ceph-mon/config.json’? y

重启mon服务后,查看集群状态

(ceph-mon)[root@node02 /]# ceph -s
Error connecting to cluster: TimedOut

这里只启动了一个mon节点,整个集群状态还不正常,需要把另外一个mon节点再恢复,整个集群状态才能恢复

恢复第二个节点的配置文件

[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/ceph-mon/* .
cp: overwrite ‘./ceph.client.admin.keyring’? y
cp: overwrite ‘./ceph.client.mon.keyring’? y
cp: overwrite ‘./ceph.client.radosgw.keyring’? y
cp: overwrite ‘./ceph.conf’? y
cp: overwrite ‘./ceph.monmap’? y
cp: overwrite ‘./config.json’? y
[root@node01 ceph-mon]# 
[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/
bootstrap-mds/ bootstrap-osd/ bootstrap-rgw/ mds/           mon/           osd/           radosgw/       tmp/           
[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/LOCK’? y
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/CURRENT’? y
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/keyring’? y

再次查看集群状态

[root@node01 ceph-mon]# docker exec -ti ceph_mon bash
(ceph-mon)[root@node01 /]# ceph -s
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd
     health HEALTH_OK
     monmap e4: 2 mons at {172.21.196.11=172.21.196.11:6789/0,172.21.196.12=172.21.196.12:6789/0}
            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.12
     osdmap e491: 15 osds: 15 up, 15 in
            flags sortbitwise,require_jewel_osds
      pgmap v679711: 7096 pgs, 25 pools, 184 GB data, 50069 objects
            555 GB used, 39643 GB / 40199 GB avail
                7096 active+clean

你可能感兴趣的:(文件系统)