环境描述

glance image-update --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi 1fc67409-a6f2-4542-bc9b-24782aae83ba

ceph版本:luminous 12.2.5

OSD三节点,monitor三节点,同时运行在三台物理服务器;

KVM宿主机运行多台虚拟机,其中一台挂载ceph-rbd块存储;

##操作环境同样适用Nautilus 版本集群

KVM调用ceph-rbd

1.ceph集群创建存储池,创建映像;

2.ceph集群设定映像大小,属性;

3.ceph集群创建针对此存储池访问账户,指定权限;

4.KVM宿主机上创建虚拟机;

5.编辑虚拟机配置文件,添加网络硬盘块;

6.虚拟机重定义后启动,格式化硬盘块,挂载到系统本地;

参考网址:

http://docs.ceph.com/docs/master/rbd/libvirt/

故障问题

KVM虚拟机挂载硬盘后,读写删除数据正常,但是数据删除后,ceph集群空间未释放;

已知且验证可行的解决方法

1.ceph-rbd在客户端配置时候,mount命令添加参数(-o discard),可以从客户端和ceph集群删除同步;

在客户端执行fstrim -v mountpoint 命令,触发删除请求;

参考网址:

https://blog.csdn.net/wytdahu/ ... 88681

本人测试,jewel版本,以ceph-fs文件存储,rbd命令挂载的虚拟机,fstrim命令可用,mount 命令添加discard参数同样有效;

但是对于新版本luminous 12.2.5的ceph集群,KVM虚拟机,直接编辑配置文件,ceph-rbd 块存储,libvirt 内核挂载,此操作无效,

报错:

 

问题原因

KVM宿主机缺少scsi驱动,需要安装libvirt-scsi驱动

解决办法

yum install libvirt-scsi

针对Linux(CentOS 7)虚拟机正常可用,需修改.xml配置文件,本人多次验证,此方案稳定可行;

虚拟机删除数据后,ceph存储池及时释放空间;

目前继续研究windows虚拟机磁盘挂载后数据删除空间释放问题;

############分割线############

另问题

1.后期虚拟机分配给用户后,管理员一般不会直在虚拟机上执行额外命令,所以 discard参数有一定局限性;

2.对于windows虚拟机以上操作并不适用;

针对ceph-rbd 客户端删除数据,ceph集群及时删除并释放存储空间问题;

是否有其他配置项目或者操作命令可以触发ceph集群释放存储池映像使用空间,后续继续探索!

########2018-09-25更新分割线############

问题1:

KVM虚拟机,Linux系统访问ceph-rbd块存储,触发删除操作,仅需要修改配置文件,指定硬盘接口,虚拟机即可调用fstrim命令;

硬盘挂载命令,指定discard参数即可实时更新释放存储池空间;

问题2:Windows虚拟机,需要额外安装虚拟硬盘接口驱动,即可初步解决硬盘空间释放问题;

(Windows占用ceph-rbd存储池空间,显示并未释放,实则可以复用已删除数据所占用空间)

ceph-rbd集成openstack-queens

详细配置过程见 openstack通过cinder服务调用ceph-rbd块存储章节;

无需额外配置discard/fstrim触发删除操作,nova节点配置unmap,对应虚拟机安装virtio-scsi驱动即可!

########2020-04-16更新分割线############

针对前期问题解决办法

1.KVM虚拟机,访问CephRBD存储集群,分两种情况:

1)对于CentOS 7 x64系统,修改虚拟机配置文件,修改配置项scsi或者virtio-scsi磁盘接口,系统挂载对应数据盘添加discard挂载参数,即可实现磁盘空间自动释放功能,配置示例如下:

2)对于Windows 2012以及以上版本系统,修改虚拟机配置文件,修改配置项scsi或者virtio-scsi磁盘接口,虚拟机系统安装最新版本virtio-win驱动程序,其挂载的块存储磁盘空间虚拟机删除释放后,存储集群对应镜像空间可自动释放;测试过程中发现,Windows 2008系统不支持磁盘释放功能;

2.Openstack虚拟机,访问CephRBD存储集群,情况类似:

前期openstack虚拟机系统镜像,默认磁盘接口为virtio,相对scsi磁盘接口来说,性能稍有提升,但是对后端存储磁盘空间释放问题造成隐患,客户端对数据盘删除数据后,系统显示磁盘空间已释放,但是在存储集群查看镜像空间仍是客户端写入最大适用量,无法主动释放。虚拟机客户端磁盘接口virtio问题,不支持手动执行fstrim命令被动释放磁盘空间;

对openstack系统镜像添加磁盘接口属性参数,修改磁盘接口默认为scsi,支持fstrim触发磁盘空间释放操作;

操作命令:

glance image-update CentOS7.4 --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi

1)对于CentOS 7 x64系统,修改虚拟机镜像属性,即修改磁盘接口为virtio-scsi,系统挂载对应数据盘添加discard挂载参数,即可实现磁盘空间自动释放功能,配置示例如下:

glance image-update CentOS7.4 --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi

mount -t xfs -o discard /dev/sdb /data

或调用虚拟机系统命令,手动执行磁盘空间释放:

fstrim -v /data

2)对于Windows 2012以及以上版本系统,即修改磁盘接口为virtio-scsi,重新定制虚拟机系统镜像,安装最新版本virtio-win驱动程序,生成openstack时添加镜像属性。以此镜像基础创建虚拟机,其挂载的块存储磁盘空间虚拟机删除释放后,存储集群对应镜像空间可自动释放;测试过程中发现,Windows 2008系统不支持磁盘释放功能;

操作命令:

glance image-update Windows 2012 --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi

virtio-win下载地址:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.171-1/virtio-win.iso

路过点一赞,技术升一线,加油↖(^ω^)↗!
————————————————
版权声明:本文为CSDN博主「wewooseo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42122986/article/details/113437365

发表评论

邮箱地址不会被公开。 必填项已用*标注