OSD替换
每个OSD都可以运行BlueStore或FileStore,ceph 14版本默认的存储类型是BlueStore,
当磁盘出现故障时,或者如果管理员想用新的后端重新配置OSD,则需要更换OSD。与删除OSD不同,在销毁OSD进行替换后,必须保持替换后的OSD的ID和CRUSH映射条目不变。
[ceph@ceph06 ~]$ ceph osd metadata osd.0 | grep osd_objectstore #判断给定的OSD是FileStore还是BlueStore
"osd_objectstore": "bluestore",
[ceph@ceph06 ~]$ ceph osd count-metadata osd_objectstore #获取文件存储与bluestore的当前计数
{
"bluestore": 4
}
[ceph@ceph06 ~]$ ceph osd out #将文件存储OSD标记为out
marked out osd.0.
[ceph@ceph06 ~]$ while ! ceph osd safe-to-destroy osd.0 ; do sleep 60 ;done #等待数据从有问题的OSD迁移
OSD(s) 0 are safe to destroy without reducing data durability.
[ceph@ceph06 ~]$ sudo systemctl stop ceph-osd@0 #停止osd
[ceph@ceph06 ~]$ umount /var/lib/ceph/osd/ceph-$ID #卸载OSD
[ceph@ceph06 ~]$ sudo ceph-volume lvm zap /dev/sdb #销毁OSD数据,用ceph osd tree查看osd.0对应是的ceph06上的/dev/sdb
stderr: wipefs: error: /dev/sdb: probing initialization failed: 设备或资源忙
--> failed to wipefs device, will try again to workaround probable race condition
[ceph@ceph06 ~]$ sudo dmsetup remove ceph--2fafb637--0fcd--4872--96df--d13cf95504f9-osd--block--e1d5ed35--2294--4b2e--9e77--ca9acff8724f #从DM中移除的硬盘对应的编码,相应编码通过pvdisplay和lvdisplay确认
[ceph@ceph06 ~]$ sudo wipefs -a /dev/sdb #移除分区
[ceph@ceph06 ~]$ ceph osd destroy 0 --yes-i-really-mean-it #告诉集群OSD已被破坏
destroyed osd.0
[ceph@ceph06 ~]$ sudo ceph-volume lvm create --osd-id 0 --data /dev/sdb #指定原来销毁的osd的id重新添加BlueStore osd
#查看服务器上osd与硬盘的对应关系
[ceph@ceph06 ~]$ lsblk
[ceph@ceph06 ~]$ ll /var/lib/ceph/osd/ceph-*/block
优点:
简单。
可以逐个设备完成。
不需要备用设备或主机。
缺点:
- 数据通过网络复制了两次:一次复制到集群中的某个其他OSD(以保持所需的副本数),然后再次返回到重新配置的BlueStore OSD。
BlueStore迁移-主机迁移
如果群集中有一个备用主机,或者有足够的可用空间来疏散整个主机以用作备用主机,则可以在每个主机的基础上使用存储的每个数据副本进行转换仅迁移一次。
首先,您需要有一个没有数据的空主机。有两种方法可以执行此操作:从不属于群集的新的空主机开始,或者从群集中现有主机上卸载数据。
理想情况下,主机应与要转换的其他主机具有大致相同的容量
将主机添加到CRUSH层次结构,但不要将其附加到根目录,确保已安装ceph软件包:ceph osd crush add-bucket $NEWHOST host
注:这里的$NEWHOST和下面的$OLDHOST都是指主机名的,这里写的是变量,NEWHOST=
过程:
- 为所有设备配置新的BlueStore OSD:
ceph-volume lvm create --bluestore --data /dev/$DEVICE
- 验证OSD通过以下方式加入集群:
ceph osd tree
- 将新主机交换到群集中旧主机的位置:
ceph osd crush swap-bucket $NEWHOST $OLDHOST
- 等待数据迁移完成:
while ! ceph osd safe-to-destroy $(ceph osd ls-tree $OLDHOST); do sleep 60 ; done
- 停止所有空的旧OSD $OLDHOST:
ssh $OLDHOST systemctl kill ceph-osd.target umount /var/lib/ceph/osd/ceph-*
- 销毁并清除旧的OSD:
for osd in `ceph osd ls-tree $OLDHOST`; do ceph osd purge $osd --yes-i-really-mean-it done
- 擦拭旧的OSD设备
ceph-volume lvm zap $DEVICE
优点:
数据只能通过网络复制一次。
一次转换整个主机的OSD。
可以并行转换为一次转换多个主机。
每个主机上都不需要备用设备。
缺点:
需要备用主机。
整个主机的OSD值将同时迁移数据。这很可能会影响整个群集的性能。
所有迁移的数据仍然在网络上进行了一整跳。
OSD删除
- 将osd移出集群,您需要将其从群集中删除,以便Ceph可以开始重新平衡并将其数据复制到其他OSD
ceph osd out {osd-num}
注意 有时,通常在主机很少的“小型”集群中(例如,小型测试集群),采用outOSD 的事实可能会导致CRUSH极端情况,其中某些PG仍停留在该 active+remapped状态。如果是这种情况,则应将OSD标记为in:
ceph osd in {osd-num}
回到初始状态,然后不标记out OSD,而是使用以下命令将其权重设置为0:
ceph osd crush reweight osd.{osd-num} 0
之后,您可以观察到应该完成的数据迁移。标记outOSD和将其重新加权为0 之间的区别在于,在第一种情况下,包含OSD的铲斗的重量不会改变,而在第二种情况下,铲斗的重量会更新(OSD重量会减少)。在“小型”群集的情况下,有时会倾向于使用reweight命令。
停止osd
sudo systemctl stop ceph-osd@{osd-num}
删除osd
ceph osd purge {id} --yes-i-really-mean-it
从ceph.conf文件中删除OSD条目(如果存在),并且同步到其它副本上去。vim /etc/ceph/ceph.conf [osd.1] host = {hostname}
停止而不重新平衡
需要定期对群集的子集执行维护,或解决影响故障域(例如机架)的问题。如果您不希望CRUSH在停止OSD进行维护时自动重新平衡群集,请将群集设置为noout
ceph osd set noout
取消设置集群noout
ceph osd unset noout
osd没有足够的磁盘空间
Ceph阻止您写入完整的OSD,以免丢失数据。在可操作的群集中,当群集接近其满负荷比率时,您应该收到警告。当出现osd容量告警时再好的解决办法是增加新的osd。
ceph osd set-nearfull-ratio <float[0.0-1.0]> #nearfull ratio defaults to 0.85,达到osd容量的85%告警
ceph osd set-full-ratio <float[0.0-1.0]> #full ratio defaults to 0.95,达到osd容量的95%停止写入
ceph osd set-backfillfull-ratio <float[0.0-1.0]> #拒绝接受往osd迁移数据的默认ratio是0.90
RAM不足
建议每个OSD守护程序1GB的RAM。您可能会注意到,在正常操作期间,OSD仅使用该数量的一小部分(例如100-200MB)。未使用的RAM倾向于将多余的RAM用于共同驻留的应用程序,VM等。但是,当OSD进入恢复模式时,其内存利用率会飙升。如果没有可用的RAM,则OSD性能将大大降低。