本文主要介绍ceph16版本集群节点系统盘故障后的集群恢复。虽然很多系统盘都是做raid1的,但是从实际项目来看,总会有很多不明事故,节点??挂了之后,上面的mon,osd,mgr都会宕机。如果该节点的mgr服务被激活,其他节点所在的备节点将升级为激活状态。故障主机节点挂掉后拔掉,如果确定不能继续开机进入系统,需要在其他正常节点上拔掉故障节点。这次宕机的节点是node4。以下命令可能会导致数据丢失。因为通过调用每个osd,该osd将被强制从集群中清除。cephorchhostrmnode4--offline--force节点初始化操作将故障节点node4节点换上新的系统盘,重新安装系统。重装后我把node4的主机名改成了node1,并替换了新的ip,在Re-addhostsonthethreecephnodestoresolve192.168.1.1node1192.168.1.2node2192.168.1.3node3并添加公钥给新主人。ssh-copy-id-f-i/etc/ceph/ceph.pubnode1安装docker环境。卷曲-sSLhttps://get.daocloud.io/docker|shsystemctldaemon-reloadsystemctlrestartdockersystemctlenabledockerinstallcephadm和ceph-common。#curl--silent--remote-name--locationhttps://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm#chmod+xcephadm#./cephadmadd-repo--releasepacific#./cephadminstall#./cephadminstallceph-common向集群添加新节点向ceph集群添加新主机。[root@node2~]#cephorchhostaddnode1Addedhost‘node1’添加的主机列表可以通过以下命令查看。cephorchhostls后会自动安装mon和crash等服务,还有node-exporter监控代理,但是新添加的节点无法进行ceph集群操作,因为ceph集群管理的keyring是在新添加的节点上丢失。在上面的命令中,其实可以看到新添加的node1少了一个_admin标签。这里提到ceph有几个特殊的主机标签。_开头的属于ceph主机的特殊标签,_admin标签加入到这个新节点,会导致cephadm将配置文件ceph.conf和密钥环文件ceph.client.admin.keyring分发到新节点.这里我们给新节点加上_admin标签,这样新节点就可以对ceph集群执行操作。cephorchhostlabeladdnode1_admin或者在添加节点的时候,可以将label添加到cephorchhostaddnode1--labels=_admin在添加osd之前,我想过直接将原来故障节点的osd恢复到现有集群,后来发现虽然恢复了,但是osddaemon并没有被cephadm管理,也没有创建osd容器,所以格式化了原来故障节点的osd,重新添加了osd,不过这里还是我的recovery操作写下来。首先创建一个空的osd。#vcephosdcreate2然后激活bluestore-osd的tmpfs目录由于bluestore中的osd目录是以tmpfs的形式存在的,所以umount后需要重新激活。ceph-volumelvmactivate(osdid)(fsid)PS:这里的osdid是我刚刚创建的,osdid为2,后面的fsid不是集群的fsid,而是osd本身的fsid,获取方式可以直接执行ll/dev/ceph*查看,osd-block-是osd的fsid。然后添加auth和crushmap,重启osd。cephauthaddosd.2osd'allow*'mon'allowrwx'-i/var/lib/ceph/osd/ceph-2/keyring后,三个osd都会up,但是有个问题是daemon的osd不是由cephadm管理的,所以我还是删除了这个osd,重新格式化后添加。删除osd的操作如下:cephorchps--daemon_typeosd#查看osd对应的容器id,先停止容器,我这里没有osd容器启动,所以这第2步可以忽略:cephosdout2cephosdcrushremoveosd.2cephauthdelosd.2cephosdrm2上一步只是删除ceph,需要格式化磁盘。#显示当前设备的状态#dmsetupstatus#删除所有映射关系#dmsetupremove_all#格式化刚删除的osd所在的磁盘为mkfs-text4/dev/vdb,重新添加osd。cephorchdaemonaddosdnode1:/dev/vdb此时集群恢复正常。
