OpenStack Cinder删除卷太慢的解决方法

 

1.让OpenStack删除卷更快
为什么速度这么慢?

当我们执行删除卷命令以后,openstack会尝试去清除卷上的数据,他是如何清除的呢?
其实他是通过dd命令填充空白数据上去(dd if=/dev/zero)。这样子的清理方式目的是
为了彻底的清除数据,保证数据安全。但是对于ceph作为后端存储的情况而言,我们把image删
除了,数据也就相当安全了。这样子的操作并没有太多用处。特别是存储空间大于50GB的情况下,会操作很久。

我们可以做那些什么?
直接修改/etc/cinder/cinder.conf 配置文件:

# Method used to wipe old volumes (string value)
# Allowed values: none, zero, shred
volume_clear = none

openstack-config --set /etc/cinder/cinder.conf DEFAULT volume_clear none

默认值是zero,我们配置成none,就跳过清理这步。如果我们想只清理前100MB呢?

# Method used to wipe old volumes (string value)
# Allowed values: none, zero, shred
volume_clear = zero
 
# Size in MiB to wipe at start of old volumes. 0 => all (integer value)
volume_clear_size = 100

cinder 中clear_volume段代码
    
def clear_volume(volume_size, volume_path, volume_clear=None,
                 volume_clear_size=None, volume_clear_ionice=None,
                 throttle=None):
    """Unprovision old volumes to prevent data leaking between users."""
    if volume_clear is None:
        volume_clear = CONF.volume_clear
 
    if volume_clear_size is None:
        volume_clear_size = CONF.volume_clear_size
 
    if volume_clear_size == 0:
        volume_clear_size = volume_size
 
    if volume_clear_ionice is None:
        volume_clear_ionice = CONF.volume_clear_ionice
 
    LOG.info(_LI("Performing secure delete on volume: %s"), volume_path)
 
    # We pass sparse=False explicitly here so that zero blocks are not
    # skipped in order to clear the volume.
    if volume_clear == 'zero':
        return copy_volume('/dev/zero', volume_path, volume_clear_size,
                           CONF.volume_dd_blocksize,
                           sync=True, execute=utils.execute,
                           ionice=volume_clear_ionice,
                           throttle=throttle, sparse=False)
    else:
        raise exception.InvalidConfigurationValue(
            option='volume_clear',
            value=volume_clear)

 

3. 调整dd进程io调度优先策略

OpenStack在Kilo版本之后添加volume_clear_ionice配置

# The flag to pass to ionice to alter the i/o priority of the process used to# zero a volume after deletion, for example "-c3" for idle only priority.

# (string value)volume_clear_ionice = -c3

关于删除卷的思考

之前不明白cinder在删除卷之前要对其做dd操作,这个过程又耗时又对服务器的负载造成影响。直到有次我在处理LVM的时候,发现即便在lvremove后重新lvcreate,新的lv里面还保留着老的数据,我才恍然大悟(只怪自己基础知识不牢固),原来直接删除lv并不会抹除卷上的数据。cinder之所以要用dd zero,就是为了避免租户A删除卷后,数据不会串到租户B新创建的数据卷上。这样一方面保证租户A的数据安全性,另一方面也避免租户B在使用数据卷的产生的疑惑。从cinder的配置文件可以看出,社区对于这类需求处理得还是很及时的。

那么实际环境下,我们改怎么选择配置,既保证数据的安全性,又尽量对服务器造成少的负载。

场景一. 保证数据绝对安全

volume_clear采用shred永久删除,根据服务器情况适当调整volume_clear_ionice的值。
shred会用一些随机内容覆盖文件所在的节点和数据块,cinder在这里条用shred默认参数采用-n 3即重写3次。

场景二. 数据相对安全的同时,降低数据卷删除时间

volume_clear采用zero填充,根据情况设置volume_clear_size大小,我们都知道,磁盘的开头部分保存着文件系统的元数据以及索引,清空这部分可以一定程度上保证数据的安全。

至于volume_clear=none这种直接删除lv而不清空数据的方式,我就不建议采用了,毕竟Cinder提供这么多配置选项来帮助我们减少数据卷删除时间,我们有何理由不用呢。

 

 

 

转载自:https://www.cnblogs.com/wangyifu/p/7660309.html

北丐洪七公--Jeff
Dignity comes from strength, strength comes from struggle!
本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值