NAS群晖大话存储笔记

【大话存储II】学习笔记(18章),数据前处理和后处理

2018-02-16  本文已影响10人  dy2903

存储其实就是一台主机,上面也运行着各种各样的应用程序,可以在原本的裸数据之上实现更高级的功能,实现更多的附加值。现在的高端存储越来越开发,比如EMC 的 V-MAX,高端存储也用普通的x86了。

存储系统有两大功能:数据存储和数据管理。

Thin Provision

超供的模式

精简也即Thin Provision,但是精简这种翻译故弄玄虚,不如叫超供(Over Allocation)最能反映本质。

我们知道申请一个3G的网络硬盘,供应商不会真的提供3GB的空间,它只是记录一下,只有真的塞入了3GB的数据,才会占用这么多空间。

这是怎么办到的?因为不是每个人都会把自己的空间用完,如果前面先把空间分配出去了,又一直没有人占用,空间上就有浪费。这样系统其实可以在后台悄悄的把空间分配给其他的客户端,相当于对客户端进行欺骗

这种方法其实非常常见,比如说在银行存钱10000块,银行不会一直给你保留那么多钱,而是会把钱偷偷的拿来放贷。这是因为不是每个人都会立刻取钱的,完全可以拆东墙补西墙。

总结一下,所谓超供,就是指分配给你的空间是虚的,只有在实际用到的时候才占用空间。所以存储系统需要实时监控物理空间的使用情况,一旦到了临界值,则需要扩容。

要实现超供,NAS系统较容易实现,因为NAS系统是自己维护文件与物理空间的对应关系的。但是如果存储系统提供的是,因为文件与物理空间的映射其实是由更上层的文件系统维护的,存储系统本身是感知不到的。

那么Thin Provision是怎么实现的呢?

Thin Provision对性能的影响

Thin Provision对性能的影响主要在:耗费额外的CPU周期、物理空间碎片上。

要实现Thin的核心模块,只要有三大元数据就够了:位图、表、树。

比如使用64b的地址长度, 分配粒度32KB,也就是说每32KB的物理块就用一个64b的地址进行表示。因为表代表了逻辑与物理地址的对应关系,所以表的每一项条目大小就是128b。对于100TB来说,对应的表的容量为$(100TB/32KB)*128b=512MB$,如果使用1MB的块粒度,则元数据降为16MB/TB,差别还是很大的。

而且元数据这么大,不可能全部放到内存里面,所以又会牵扯到读写磁盘,性能严重下降。

Thin Provision脆弱性

LUN Space Reclaiming

比如存储只有1TB的空间,多个客户端的LUN分布在上面,现在只剩下了500GB,此时如果谁还需要500GB的LUN空间做某程序的TMP空间,则管理员只要把所有空间都给它。但是程序运行完毕以后,临时文件已经删除,但是因为这些空间之前已经分配了,所以无法再次利用。

若通过缩小LUN来解决这个问题,需要消耗太多的资源,那么有其他的方法么?

image.png

分级

分层存储管理的意义

image.png

我们知道对存储介质而言,性能与价格是不可兼得的。上图就表现得很明显,对于Cache ,RAM速度快,但是价格高,而且是易失的,也就是一掉电啥就没有了。

存储介质到了磁盘这一层,又到了个质变点,磁盘之下的虚拟磁带库、磁带都是不可随机访问的,只能当做离线存储来用。而虚拟磁带库之所以称为近线存储,是因为从在线存储将数据迁移到离线存储之后,一旦短时间内需要再次访问,需要忍受非常低的速度,而虚拟磁带库可以把数据快速提取出来,虽然仍然不可以随机存取而已。

所以数据分级意义在于,将访问频繁、性能要求高的数据放在性能高的磁盘或者RAID组里面,不经常访问的数据移到低端硬盘里面去。这样就可以物尽其用。

image.png

数据分级的具体形式

image.png

怎么判断热点数据

一般利用二八原则,把数据按照单位时间内被IO次数来进行排序,访问次数最多的20%数据为热数据

块级自动分级的底层数据结构

自动分级存储一般需要追踪每个块的属性,比如最后访问时间、某段时间内访问了多少次等数据。保存的这些数据有两种方法:

集群、分布式文件系统天生就是自动分级的坯子,因为本来一个文件或者一个LUN的不同部分就可以放到不同的位置上,只需要在上面进行一些开发就可以很容易的实现分级。

对性能的影响

与 Thin Provision一样,分块粒度越小,性能损失越大。

image.png

Deduplication(重删)

不同机器的本地存储里面有若干文件,如果这些文件存在重复,每次备份自然有很多的相同部分,比较浪费空间,有没有办法来解决:

在开始讲解决方法之前,我们可以先总结一下出现重复可能的场景:

SIS的缺陷

传统的解决方案是Single Instance Storage(SIS,单一实例存储),可以相同内容的文件在系统中只存在一份实体,其他副本只作为指针链接而存在。注意这种技术只能避免相同内容的文件,所以只能解决同一主机里的重复文件以及连接多主机的NAS设备上的重复文件。

但是对于多台主机连接到同一块存储这种场景,因为块存储对每一台主机提供不同的LUN,所以就类似于不同主机的本地存储有重复文件一样,所以依然是无能为力的。

我们知道虚拟机的镜像其实就是一堆文件而已,但是这些文件不大可能在每个字节上都相同,即使是安装的同一种操作系统,但是安装的应用当然是不同的。所以SIS对这种场景也无能为力。

最后一种情况,根本看不到文件,当然也不能实现重删。

SIS可以理解为文件级别的重删,不能解决所有场景的问题。而且在底层实现上也有极大的局限性,比如只能以整个文件作为对比,对于那种大部分相同但是有细微差别的文件就没办法处理了。

所以块级别的重删才是有意义的。可以直接比对Block的内容,消除多个副本,在元数据中只留一个指针来指向唯一一份实体即可。

dedup与压缩有什么区别?压缩只是局部上进行处理,而Dedup可以实现全局数据的重删。

image.png

核心技术——HASH

重删用到的关键技术就是HASH算法。在数据库(三),底层算法中我们已经说了Hash算法之神奇。下面再简单的介绍一下它的应用场景。

我们知道每个人的指纹各不相同,于是可以通过比对指纹就可以确定是否是同一个人留下的。同理,如果给每个Block录一个指纹,就可以快速比对出这两个块是否是完全一样呢。

那么生成数据指纹的有一种很好的算法,就是HASH。它又衍生出MD5(Message Digest v5)和SHA-1(Secure Hash Algorithm v1)。

这些算法的特点在于

HASH算法有很多的应用。

image.png

HASH冲突

要完全杜绝Hash冲突的唯一办法就是当对比两个HASH值的之后发现二者匹配以后,可以再进行逐位对比,或者取相同的部分进行对比。

但是这样做的话会耗费大量的计算和IO资源,我们可以换一种思路,取两种HASH算法进行计算,如果两次都比对都相同,则可以认为是重复的。

主机Dedup的过程

Dedup主要包含如下4个动作,注意这里面的Dedup软件是安装在主机上的。


image.png

这里面需要注意的是每个写IO都会写入存储介质中。那么大家肯定有疑问了,既然每个写IO都落到磁盘上,何来消重。

其实这个问题之前已经讨论了很多次了。谁来决定LUN的剩余空间,当然是上层文件。所以如果我们要想让主机端的Dedup有意义,只能

虽然运行在主机端、块级的Dedup,无法达到节省底层存储空间的目的。但是在备份的时候就非常有意义了,因为可以减少网络传输的量。

其实根本不用这么纠结,我们完全可以把块级Dedup安装在存储端,因为我们最终要节省的就是磁盘空间,而磁盘又是由存储设备管理的

image.png

网络数据备份的Dedup

上面说过主机上的Dedup对备份是有意义的,我们可以传输更少的数据。不过这要求Dedup引擎与备份系统紧密配合,一般来说是作为备份软件的一个子模块

这样做有个不好的地方,也就是会消耗主机的性能。我们也可以在主机后面进行Dedup,比如在介质服务器上,可以使用前台Dedup或者后台Dedup

Dedup思想的其他应用

增量备份、差量备份通常是在应用程序层来控制的,因为主要是由应用程序来负责记录备份的时间点以及文件的变化,此时备份软件主要是辅助作用。

然而备份软件自身如何实现LUN级别的增量和差量备份呢?

上一篇 下一篇

猜你喜欢

热点阅读