ceph 换盘扩容

时间:2024-03-10 18:19:22

调整时间

基础设施调整操作:工作日0点之后操作,或者非工作日

基础设施包括网络、主机系统、存储 / 备份系统、安全系统、以及机房动力环境等

调整规范

变更管理实现所有基础设施和应用系统的变更,变更管理应记录并对所有要求的变更进行分类,应评估变更请求的风险、影响和业务收益。其主要目标是以对服务最小的干扰实现有益的变更。

调整需要对可能影响的业务方进行通知。如果是关键系统的调整,需要全局通知。

调整方式

后续均通过工单系统进行操作,重要操作需要至少两个人一起确认后在执行

调整实例

换盘扩容可以抽象为几个元步骤的结合:1)删除OSD步骤 2)观察集群状态 3)IDC更换磁盘 4)新OSD上线步骤 5)观察集群状态

更换磁盘

1、 根据OSD ID 确认需要更换的磁盘对应的盘符(ceph-25 25为OSD对应的ID,sdf为服务器上对应的盘符;)

[root@ceph-81-204 ~]# lsblk |grep -B1 `ls -lrt /var/lib/ceph/osd/ceph-25 | grep block |awk -F "-" '{print $NF}'`
sdf                                                                             └─ceph--f014814a--8721--4347--9ebd--b307bab59e0d-osd--block--a87fccf6--88bf--481e--9757--8d5b74d3ca59 253:4    0  7.3T  0 lvm

2、 获取磁盘SN:

lsblk --nodeps -no serial /dev/sda

根据磁盘SN获取磁盘插槽slot位置:

/opt/MegaRAID/MegaCli/MegaCli64 -PDlist -Aall | grep -B4 $SN

3、获取磁盘SN号提交磁盘更换工单http://wos.myhexin.com/?#/process/create-ticket?processId=5

(从A服务器拔出,更换到B服务器工单:http://wos.myhexin.com/?#/process/create-ticket?processId=244

[root@ceph-81-204 ~]# smartctl --all /dev/sdf | grep "Serial Number"Serial Number:    WSD62F28

删除 OSD

要想缩减集群尺寸或替换硬件,可在运行时删除 OSD 。在 Ceph 里,一个 OSD 通常是一台主机上的一个 ceph-osd 守护进程、它运行在一个硬盘之上。 如果一台主机上有多个数据盘,你得逐个删除其对应 ceph-osd 。通常,操作前应该检查集群容量,看是否快达到上限了,确保删除 OSD 后不会使集群达到 near full 比率。

警告: 删除 OSD 时不要让集群达到 full ratio 值,删除 OSD 可能导致集群达到或超过 full ratio 值。

1、停止需要剔除的 OSD 进程,让其他的 OSD 知道这个 OSD 不提供服务了。停止 OSD 后,状态变为 down

ssh {osd-host}sudo systemctl stop ceph-osd@{osd-num}

2.将 OSD 标记为 out 状态,这个一步是告诉 mon,这个 OSD 已经不能服务了,需要在其他的 OSD 上进行数据的均衡和恢复了。

ceph osd out {osd-num}

执行完这一步后,会触发数据的恢复过程。此时应该等待数据恢复结束,集群恢复到 HEALTH_OK 状态,再进行下一步操作。

3.删除 CRUSH Map 中的对应 OSD 条目,它就不再接收数据了。你也可以反编译 CRUSH Map、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH Map 里,而且你想删除主机),重编译 CRUSH Map 并应用它。

ceph osd crush remove {name}

该步骤会触发数据的重新分布。等待数据重新分布结束,整个集群会恢复到 HEALTH_OK 状态。

4.删除 OSD 认证密钥:

    ceph auth del osd.{osd-num}

5.删除 OSD 。

ceph osd rm {osd-num}#for exampleceph osd rm 1

6.卸载 OSD 的挂载点。

sudo umount /var/lib/ceph/osd/$cluster-{osd-num}

7.登录到保存 ceph.conf 主拷贝的主机。

    ssh {admin-host}    cd /etc/ceph    vim ceph.conf

8.从 ceph.conf 配置文件里删除对应条目。

    [osd.1]            host = {hostname}

9.从保存 ceph.conf 主拷贝的主机,把更新过的 ceph.conf 拷贝到集群其他主机的 /etc/ceph 目录下。

如果在 ceph.conf 中没有定义各 OSD 入口,就不必执行第 7 ~ 9 步。

新增OSD

1.初始化新的磁盘、OSD初始化,在deploy服务器上运行,vlan1的deploy服务器是192.168.215.89,# 指定目标机器及对应的块设备编号,如果更换的是旧盘,这一步操作有可能失败报错,此时最好用dd(或者分区工具)摧毁磁盘上残留的Raid或分区表信息,然后重新初始化尝试;

su - cephfsdsh /usr/local/bin/ceph-devops/deploy-osd.sh $hostname sdb,sdc,sde,...sdn 
# 验证方法ceph osd status | grep $hostname # 确认最后一列是 exists,up表示osd已经启动完毕

2.调整Crushmap,由于现在测试和vlan1的ceph都变为了rack为故障域,并且线上还没有开启自动加入osd,所以需要手动的将新的bucket加入进去,命令如下:

ceph osd crush add-bucket $hostname host # 该命令是新增一个host级的bucket,名称是$hostname,一般以目标服务器的hostname作为名称
ceph osd crush add osd.* $weight host=$hostname # 该命令是将osd加入到host中去,如果已经自动创建了这一步不需要,$weight为硬盘容量转换为T的数值
ceph osd crush move $hostname rack=$rackname # 该命令是把整个host移动到对应的rack下面