OpenStack+Ceph存储空间回收《转》

转自: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数量

 [root@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数量

 [root@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数量

 [root@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/

时间: 2025-01-21 14:45:03

OpenStack+Ceph存储空间回收《转》的相关文章

openstack 管理二十四 - ceph 与 vm 连接测试记录

目的 测试 ceph 与 vm 连接与使用 创建 vm 主机 128030 及 129094 是全新安装并利用 puppet 推送的 nova compute 主机 计划在这两个主机上进行 vm 连接 ceph 测试 nova boot --flavor b2c_web_1core --image Centos6.3_1.3 --security_group default --nic net-id=9106aee4-2dc0-4a6d-a789-10c53e2b88c1 ceph-test01

openstack 与 ceph (架构)

参考架构 硬件配置 ceph 由 7 台 华为 RH2288A 组成, 硬件信息: 硬件 型号 数量 统计 cpu Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz 2 24核 内存 16GB 4条 64GB 硬盘 4.0 TB 12 48TB 网卡 千兆 2 2 网卡 万兆 2 2 参考主机信息 主机名 bond0 bond0mask bond0gw bond1 bond1mask bond1gw hh-yun-ceph-cinder015-128055.vc

ceph部署

1 物理拓扑 使用4台服务器搭建该环境 ceph_node01 172.16.1.141 ceph_node02 172.16.1.142 ceph_node03 172.16.1.143 ceph_node04 172.16.1.144 管理节点和客服端节点都在ceph_node01上,monitor在ceph_node02上,osd在ceph_node03.ceph_node04上. 2 在所有节点上创建用户ceph,并让其具有root权限      adduser -d /home/cep

笔记:Ceph and Swift: Why we are not fighting.

前一段时间看了Ceph的论文,有看到很多介绍用Openstack+Ceph搭建私有云的方案.自然想了解一下Ceph和Swift什么关系.这篇博客应该是Swift开发者2013年写的:Ceph and Swift: Why we are not fighting. 应该是解释的最清楚的. 开篇就是要回答的问题: While chatting with different people there was a recurrent question coming up to me: people wa

虚拟化VMware简介2—— ESX ESXi

1.VMware ESX 目录 (1)概述 (2)VMware ESX Server用途 (3)VMware ESX Server如何运作 概述 VMware ESX 服务器是在通用环境下分区和整合系统的虚拟主机软件.它是具有高级资源管理功能高效,灵活的虚拟主机平台. VMware ESX Server 为适用于任何系统环境的企业级的虚拟计算机软件.大型机级别的架构提供了空前的性能和操作控制.它能提供完全动态的资源可测量控制,适合各种要求严格的应用程序的需要,同时可以实现服务器部署整合,为企业未

红帽张先民博士:开源驱动企业数字化转型

   [51CTO.com原创稿件]提到Linux,我们就会想到红帽,就跟提到Windows就会想到微软一样.作为一家专注于架构平台操作系统的公司,红帽在纽交所的上市时间已经有15年了,其业务范围已经涉及中间件.基础架构管理.PaaS.存储.虚拟化等领域,业务收入也由2012年年营收10亿美金上升至2016年年营收20亿美金,用4年时间实现了翻倍.上周,红帽在京组织了一次小型的媒体沟通会议,正式公布了红帽的财务营收情况.红帽未来的战略布局以及重点产品规划. 首家年收入超过20亿美金的开源公司 6

WebSphere快速入门(6)

4.服务器日志    缺省地web服务器会在c:wwwlogs目录下记录所有东西,Web服务器每天在午夜启动一个新的日志文件(如果那时它在运行的话).否则,Web服务器会在某天首次启动时开始一个新的日志文件.日志文件通常包括下列类型:    (1) httpd-log:记录Web被访问的统计情况.     (2) agent-log:记录客户使用的Web浏览器的情况.     (3) referer-log:记录引用到请求页面的页面的情况.     (4) httpd-error:记录Web服务

浅析企业私有云中的存储架构

1 云计算 1.1 云计算 云计算(Cloud Computing)是分布式计算(Distributed Computing).并行计算(Parallel Computing).效用计算(Utility Computing).网络存储(Network Storage Technologies).虚拟化(Virtualization).负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物. 云计算是继20世纪80年代大型计算机系统中客户端-服务器连接模式大转变之后的又一次重大的

【官方文档】Hadoop分布式文件系统:架构和设计

http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html   引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 "移动计算比移动数据更划算" 异构软硬件平台间的可移植性 Namenode 和 Datanode 文件系统的名字空间 (namespace) 数据复制 副本存放: 最最开始的一步 副本选择 安全模式 文件系统元数据的持久化 通讯协议 健壮性 磁盘数据错误,心跳检测和重新复制 集群均衡 数据完整