设为首页 收藏本站
查看: 1553|回复: 0

[经验分享] OpenStack+Ceph存储空间回收《转》

[复制链接]

尚未签到

发表于 2017-6-26 18:47:53 | 显示全部楼层 |阅读模式
  转自:http://blog.csdn.net/wytdahu/article/details/48288681
问题描述
  在OpenStack云环境的部署中,存储通常具备Thin provision的功能,这项功能实现了存储按需分配的能力。现在有这样一种场景,用户在文件系统中创建了大文件,使用完之后进行了删除。但实际上,该文件在存储系统上占用的空间并没有释放。
  当用户在文件系统中删除一个文件,并不会在块设备上的对应空间填0,而仅仅在磁盘的元数据结构中将这些block标记为未使用。因此,虽然文件系统知道这些block是未使用或者说可用的,但是底层的存储系统并不知道文件系统做的操作,会认为这些block仍在使用。以RBD image为例,它本身是稀疏格式的,也就是说它所占用objects会随着用户写入数据的增加而增加(Thin provision)。当用户删除数据以后,这些obejct不再使用,但并没有被释放。因为从Ceph的角度讲,它并不知道文件系统中发生的事情。
解决办法
  比较理想的解决办法就是,提供一种空间回收机制,文件系统可以通知块设备释放掉不再使用的block。Linux的Trim/Discard机制正是这样一种机制。从Ceph 0.46,Ceph的块设备开始支持Trim/Discard操作。这意味着,从Guest虚拟机中可以发出Trim请求,Ceph块设备就可以释放掉不再使用的空间。
  需要注意的是,当前只有主流的文件系统,比如Ext4、XFS、Btrfs,支持Trim/Discard操作。
触发Trim/Discard请求
  有两种方式可以触发Trim/Discard请求,一种是由文件系统自动完成,一种是用户通过执行命令来完成。
  一、文件系统自动完成
  只要在挂载文件系统时指定discard参数即可,比如 mount -t ext4 -o discard  device mountpoint,这样在文件系统中删除文件后会自动触发Trim/Discard操作,在块设备上释放占用的空间。
  二、用户执行命令
  用户可以执行命令fstrim来触发Trim/Discard操作,采用这种方式mount文件系统时不需要discard参数。比如,fstrim -v mountpoint,就会释放对应块设备上不用的空间。
  需要注意的是,mount的discard参数会导致文件系统性能下降,在并发删除大量小文件时变得很慢,因此需要根据具体场景选择合适的长发方式。
版本要求
  Qemu: 1.5
  Libvirt: 1.0.6
  Ceph: 0.46
  Linux kernel: 3.1
OpenStack中该功能的通用实现
  在虚拟机平台中,IDE或者SCSI磁盘支持Trim,VirtIO不支持Trim操作。OpenStack在Icehouse中引入下面两个commit,支持了virtio-scsi,也就是说可以使用Trim/Discard。
  https://review.openstack.org/#/c/70262/
  https://review.openstack.org/#/c/70263/
  需要配置Nova和Glance支持virtio-scsi和discard。
  1、glance image-update --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi
  其中,hw_scsi_model=virtio-scsi 是指libvirt要使用virtio-scsi控制器,hs_disk_bus=scsi是指libvirt使用scsi总线连接磁盘到控制器。
  2、编辑nova.conf
  [libvirt]
  hw_disk_discard = unmap
  其中,有效的hw_disk_discard参数包括:
  unmap: it unmaps aligned group of sectors
  ignore: it ignores the discard request
  上述操作其实就是确保磁盘挂载到虚拟机中使用了scsi,最终的libvirt xml描述文件如下:
  <disk type='network' device='disk' >
  <driver name='qemu' type='raw'cache='none' discard='unmap'/>
  <auth username='compute'>
  <secret type='ceph'uuid='a5d0dd94-57c4-ae55-ffe0-7e3732a24455'/>
  </auth>
  <source protocol='rbd'name='volumes/vdisk1'>
  <host name='192.168.1.2'port='6789'/>
  </source>
  <target dev='sdb' bus='scsi'/>
  </disk>
在AWcloud云平台使用该功能
  1、创建云硬盘
  2、挂载云硬盘总线类型选择scsi
  3、虚拟机里将挂载的磁盘创建分区并挂载
  4、删除大文件后执行fstrim -v mountpoint
  或者
  挂载时使用-o discard参数,那么删除文件时会自动触发Discard/Trim操作,不需要执行fstrim命令。
  实验验证
  1、创建一个RBD image
  2、将创建好的RBD image以scsi的方式挂载到虚拟机中,分区创建文件系统
  3、统计该RBD image占用的object数量
  [iyunv@node-4 gc]# rados -p volumes ls |grep 3232ae8944a | wc -l
  135
  4、在虚拟机的文件系统中创建文件
  ddif=/dev/zero of=image bs=1M count=10000
  5、统计该RBD image占用的object数量
  [iyunv@node-4 gc]# rados -p volumes ls |grep 3232ae8944a | wc -l
  382
  注:(382-135)*4M ~ 1G,和创建的文件大小相符
  6、虚拟机中删除创建的文件,并执行fstrim命令
  rm -rf image;fstrim –v mountpoint
  7、统计该RBD image占用的object数量
  [iyunv@node-4 gc]# rados -p volumes ls |grep 3232ae8944a | wc -l
  196
  注:(382-196)*4M ~ 800M, 绝大部分空间得到回收
  参考:
  http://www.sebastien-han.fr/blog/2015/02/02/openstack-and-ceph-rbd-discard/
  http://ceph.com/docs/master/rbd/qemu-rbd/#enabling-discard-trim
  http://cephnotes.ksperis.com/blog/2014/12/18/use-discard-with-krbd-client-since-kernel-3-dot-18/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388337-1-1.html 上篇帖子: 【Ceph专题】 Ceph架构详细分析 下篇帖子: Openstack 集成 Ceph 基础篇(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表