Ceph 日常维护:OSD / MON / MGR 的删除与重建

概览:在四节点测试集群上把 OSD、MON、MGR 挨个删掉再抢救回来

含一次失败的 MON 手动重建记录(方案1原样保留),以及最终可行的方案2

环境配置概览

节点 IP OS 版本 配置(测试环境)
ceph01 192.168.3.164 Ubuntu 18.04 16.2.9-1bionic 2C 4G 16G(系统) 100G(OSD)
ceph02 192.168.3.167 Ubuntu 18.04 16.2.9-1bionic 2C 4G 16G(系统) 100G(OSD)
ceph03 192.168.3.168 Ubuntu 18.04 16.2.9-1bionic 2C 4G 16G(系统) 100G(OSD)
ceph04 192.168.3.165 Ubuntu 18.04 16.2.9-1bionic 2C 4G 16G(系统) 100G(OSD)

image-20220526182735956

OSD维护

维护前须知!!!

1
ceph osd tree # 查询OSD,这次要删除ceph02上的OSD(osd.1)

image-20220526181508114

1
2
#先把数据迁移走,然后再删除。!!!!(重要,确认该OSD内容搬走再删除)
ceph osd crush reweight osd.1 0 # 把该OSD的crush权重降到0,数据会慢慢迁移到其他OSD上(比较慢),迁完再删

1,删除OSD

1
2
3
4
5
6
systemctl stop ceph-osd.target # 在ceph02上执行,停掉该节点的OSD服务
ceph osd out osd.1 # 剔除osd
ceph osd rm osd.1 # 删除osd
ceph osd crush rm osd.1 # 剔除集群
ceph auth del osd.1 # 删除证书 ceph auth list查看证书列表
ceph osd tree # 已经被删除

image-20220526195909286

1
2
3
4
parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100% # 重打分区表,清掉旧OSD留下的LVM签名(也可以用 ceph-volume lvm zap /dev/sdb)
reboot # 重启
mkfs.xfs /dev/sdb -f # 格式化,彻底清干净
lsblk # 查询

image-20220526200206958

2,重建OSD

1
2
ceph-deploy osd create ceph02 --data /dev/sdb # 这一步要去主要节点cd /root/ceph-deploy 后执行
ceph osd tree # 查询已经正常了

image-20220526200414611

image-20220526200443257

MON维护

1
ceph -s # 查询我们有四个mon节点

image-20220527210649782

1,删除MON节点

1
2
3
4
#我们要删除ceph04节点
ceph mon stat # 查询模拟节点的运行状态
ceph mon remove ceph04 # 删除ceph04的mon节点
ceph mon stat # 或者 ceph -s # 查询是否被删除

image-20220527210947698

image-20220527211107840

2,重建mon节点

方案1(失败)

下面是当时照着资料手动重建 mon 的完整尝试,原样保留——最后没成功,赶时间的直接看方案2。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rm -rf /var/lib/ceph/mon/ceph-ceph04 #清理该mon的文件
ceph-mon --mkfs -i ceph04 --keyring /etc/ceph/ceph.mon.keyring # 为ceph04 mon 初始化数据库 store.db
mkdir /var/lib/ceph/mon/ceph-ceph04/ #补充空文件夹
mkdir /var/lib/ceph/mon/ceph-ceph04/store.db/ -p #创建数据库文件夹
touch /var/lib/ceph/mon/ceph-ceph04/systemd #补充done空文件
touch /var/lib/ceph/mon/ceph-ceph04/done #补充done空文件
ceph auth get-or-create mon.ceph04 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/mon/ceph-ceph04/keyring #添加ceph04 mon的keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-ceph04 # 授权
#补充服务相关空文件:
#如果是sysvinit来管理的用这个:
# touch /var/lib/ceph/mon/ceph-ceph04/sysvinit
#如果是systemctl来管理的用这个:
# touch /var/lib/ceph/mon/ceph-ceph04/systemd
#修改文件权限
# chown -R ceph:ceph /var/lib/ceph/mon/ceph-ceph02
ceph mon add ceph04 192.168.3.165:6789 # 重新添加
systemctl status ceph-mon.target

方案2(成功)

1
2
3
4
5
cd /var/lib/ceph #进入目录
rm mon -r # 删除旧的文件夹
mkdir mon # 新建
chown ceph:ceph mon # 授权
ceph-deploy mon add ceph04 --address 192.168.3.165

mgr维护

1,删除MGR

1
2
#经过上面一番折腾,mgr已经寄了
systemctl stop ceph-mgr.target # 官方文档没写专门的删除命令,直接停掉服务它就会被踢出去,standby会顶上

image-20220527231308674

2,重建mgr

1
ceph-deploy mgr create ceph04

image-20220527231453126

集群维护

1,删除节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#方式一
rm -rf /etc/ceph/*
rm -rf /var/lib/ceph/*/*
rm -rf /var/log/ceph/*
rm -rf /var/run/ceph/*
# 方式二(CentOS/RPM 系的卸包方式,登录主机一台一台操作,清除得不彻底;Ubuntu 对应 apt purge ceph*):
rpm -qa|grep ceph
rpm -e python-cephfs-12.2.10-0.el7.x86_64 --nodeps
rpm -e ceph-base-12.2.10-0.el7.x86_64 --nodeps
rpm -e libcephfs2-12.2.10-0.el7.x86_64 --nodeps
rpm -e ceph-common-12.2.10-0.el7.x86_64 --nodeps
rpm -e ceph-selinux-12.2.10-0.el7.x86_64 --nodeps
# 方式三(一下删除多台):
ceph-deploy purge ceph02
ceph-deploy purgedata ceph02

2,重新安装节点

1
ceph-deploy new node-1 # 重建整个集群才用 new;单节点重装后直接走下面的"添加节点"流程重新加入即可

3,添加节点

1
2
3
# 初始化参考安装文档,我这里是安装好了ceph-deploy,ssh免密,hosts等,其他没有我安装一下ceph
apt-get install ceph -y # 安装组件
dpkg -l | grep ceph # 在ceph04检查版本是否和集群一致
1
2
3
4
5
6
7
cd /root/ceph-deploy # 到主要节点执行添加
ceph-deploy admin ceph04 # 传送密钥
ceph-deploy --overwrite-conf config push ceph04 # 传送配置
systemctl restart ceph-mon.target # 重启服务
ceph-deploy osd create ceph04 --data /dev/sdb # 添加OSD
ceph-deploy mon add ceph04 --address 192.168.3.165 # 添加mon
ceph-deploy mgr create ceph04 #添加mgr

image-20220526203057840

重启相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.重启mgr守护进程
systemctl restart ceph-mgr.target
# 2.重启mds守护进程
systemctl restart ceph-mds.target
# 3.重启rgw守护进程
systemctl restart ceph-radosgw.target
# 4.重启mon守护进程
systemctl restart ceph-mon.target
# 5.重启osd守护进程
登录到osd01节点上,该节点上运行有三个osd daemon进程osd.0、osd.1、osd.2
# 5.1重启所有的osd daemon
systemctl restart ceph-osd.target
# 重启后MDS没有standby,
systemctl restart ceph-mds.target #即可