目录
一、概述
二、名词解释
三、镜像分离
四、COW
五、ROW
六、参考
一、概述
全球网络存储工业协会 SNIA(Storage Networking Industry Association)对快照(Snapshot)的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。
快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
按照 SNIA 的定义,快照有全量快照和增量快照两种类型, 其中又各自使用了不同的快照技术:
全量快照:镜像分离
增量快照:写时拷贝(Copy On Write);写时重定向(Redirect On Write)
额外的,容灾领域还有一个 CDP(持续数据保护) 快照技术。CDP 分为真 CDP (True CDP) 和准 CDP (Near CDP) 两类。真 CDP 处不间断地监控数据变化,生成瞬间快照,可以恢复到过去任意时间点,缺点是开销大。准 CDP 持续的记录数据变化,按一定时间频率生成快照,优点是开销小,更实用。
二、名词解释
如下图所示,数据卷由数据索引与实际数据组成。数据索引与数据是逻辑上是独立的,数据索引记录了数据的组织形式及其属性,通过数据索引可以找到数据的实际存储地址,进而对该数据进行读写等操作。
数据卷分为原始卷与快照卷。原始卷是操作系统内的物理卷或虚拟卷,快照卷是创建快照后生成的原始卷副本。
三、镜像分离
镜像分离快照技术在快照时间点到来之前,首先要为原始卷创建并维护一个完整的物理镜像卷:同一数据的两个副本分别保存在由原始卷和镜像卷组成的镜像组上。
打快照时,镜像分离,镜像卷转化为快照卷,获得一份快照。
注意一个镜像卷自始自终只能生成一个快照,镜像卷转换为快照卷后,与原始卷的数据同步即终止。此时快照时间点就是镜像分离时的时间点。该快照拥有恢复需要的全部数据。
如果需要创建多个快照,由两种方法:
(1)镜像卷转快照卷后,将快照卷完整的备份走,备份完成后再换为镜像卷,与原始卷数据同步;
(2)生成多个镜像卷,每个镜像卷都可生成一个快照。
分离镜像特征总结:
(1)空间占用:每一个快照需要与源数据(卷)相同的存储空间;
(2)创建过程:每一个快照都需要完全的数据同步;
(3)系统影响:源数据的读操作不受影响,但写操作受数据同步影响;
四、COW
COW称为“写时复制”快照技术。
对数据卷打快照之后,快照时间点就是数据卷的可恢复时间点,要能保证该快照时间点数据恢复的幂等性,即无论原始数据卷数据怎么变动、无论该快照恢复多少次,每次都能成功将原始卷恢复到该快照时间点。
下面具体看 COW 的实现思路。
1、对原始卷创建快照时,快照卷中只会保存原始卷中的数据索引,不会备份真实的数据。此时原始卷与快照卷的数据索引均指向同一份实际数据,二者数据保持一致。
2、快照创建完成后,因为快照卷中只保存了索引数据,后期若原始卷发生数据变动,快照时间点就无法恢复到快照时间点了,因为实际数据已经变动了。
所以为了保证快照时间点数据的一致性,快照卷还需要一个 COW 数据空间,用于保存快照时间点对应的原始数据(只保存原始卷发生修改的实际数据,未修改的可以继续使用数据索引找到),而且在原始卷使用过程中要一直维护快照卷(同一份数据只要维护一次,因为第一次的时候快照卷已经保存了原始数据了, 所以 COW 也经常被描述为 Copy On First Write)。
3、特别,特别注意,当对原始卷进行修改时,修改前的数据副本会记录在最新的快照卷中,之前旧的快照卷数据不再变动。因为他们已经记录了相对于后一个快照时间点的所有数据变动,只要他们后一个快照卷能够保持快照时间点数据的一致性,旧的快照卷就可以基于前一个快照时间点和自身记录的差异数据恢复到自身的快照时间点。
4、恢复快照时间点时,通过数据索引,对没有改变过的块直接从原始卷读取;对已经改变并被复制的块则从快照卷读取(可以在快照中设置映射表用于判断数据是否被修改)。存在多个快照时,会最新的快照开始依次恢复到指定的快照时间点。
上面就是基本的实现原理,下面说一说应用场景,也就是 COW 方式的优缺点:
(1)优点:快照操作只备份当前原始卷的数据索引,速度非常快,占用空间小(只保留发生修改的数据);
(2)优点:适用于对读操作频繁的卷快照
(3)中:较适用于对存在写热点的卷快照(首次修改要多一次备份操作)
(4)缺点:原始卷使用过程中,需要一直维护最新快照时间点的数据一致性
(5)缺点:未保留完整数据副本,恢复快照时间点依赖原始卷和之后的快照。
(6)缺点:不适用于写操作过于离散与频繁的卷, IO 开销很大,影响对卷正常的读写性能。而且,如果原始卷修改的数据过多,可能超过快照卷预留的COW空间,此时快照会失效。
五、ROW
ROW(Redirect-On-Write),也被称之为写时重定向。ROW 的实现原理与 COW 非常相似,区别在于 ROW 对原始卷的首次写操作,会将新数据重定向到预留的快照卷中,而非 COW 一般会使用新数据将原始数据覆盖。所以,ROW 快照中的原始数据依旧保留在源数据卷中,并且为了保证快照数据的完整性,在创建快照时,源数据卷状态会由读写变成只读的。
如果对一个原始卷做了多次快照,就产生了一个快照链,原始卷始终挂载在快照链的头部,虚拟机的写操作全落盘到最末端的快照卷中。
该特征导致了一个问题,就是如果一共做了 10 次快照,那么在恢复到最新的快照点时,则需要通过合并 10 个快照卷来得到一个完整的最新快照点数据;如果是恢复到第 8 次快找时间点,那么就需要将前 8 次的快照卷合并成为一个完整的快照点数据。
从这里可以看出 ROW 的主要缺点是没有一个完整的快照卷,其快照之间的关系是链式的,如果快照层级越多,进行快照恢复时的系统开销会比较大。删除快照链中的快照节点,需要对快照数据进行整合。
但 ROW 的优势在于其解决了 COW 快照写两次的问题,所以就写性能而言,ROW 无疑是优于 COW 的。
ROW优缺点:
优势:不会降低源数据卷的写性能。源数据卷创建快照后的写操作会被重定向,所有的写 I/O 都被重定向到新卷中,而所有快照卷数据(旧数据)均保留在只读的源数据卷中。因此更新源数据只需要一个写操作,解决了 COW 写两次的性能问题。对于分布式系统来说,正是由于数据的分散,进而提供了并发读的机会。所以在分布式存储上,ROW的连续读写性能比COW好。
劣势:没有一个完整的快照卷。ROW 的快照卷数据映射表保存的是源数据卷的原始副本,而源数据卷数据指针表保存的则是更新后的副本。因此,当创建了多个快照时,会产生一个快照链,使原始数据的访问快照卷和源数据卷数据的追踪以及快照的删除将变得异常复杂。在恢复快照时会不断地合并快照文件,造成较大的系统开销。单机读性能下降。由于采用了重定向写,使得原本连续的数据分散到了磁盘中,连续写变成了随机写,造成读性能下降。
综上,COW的快照方式更适合于读密集型应用,或者对存储设备容易出现写入热点(对于小范围内的数据频繁写入)的应用,因为数据的修改都局限在小范围内,对同一份数据进行多次写只会出现一次复制操作。ROW 适合写密集的应用,同时由于 ROW 重定向写的特性,在分布式存储中,读性能会更高。
六、参考
COW、ROW快照技术原理 - 华为 (huawei.com)
运维日记丨带你了解快照技术 - 墨天轮 (modb.pro)