环境描述
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
路过点一赞,技术升一线,加油↖(^ω^)↗!