快照技术分为()类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快照技术分为()类?相关的知识,希望对你有一定的参考价值。
当前,快照技术已经越来越多的被应用于企业的备份恢复应用,但是对于快照技术的原理,不同快照技术的区别以及优缺点,却很少有人详细提及。面对市场中多样的快照技术,用户应该如果选择呢?什么是快照技术?
快照技术主要是在操作系统以及存储技术上实现的一种记录某一时间系统状态的技术。近来,Oracle等数据库厂家以及Vmware等虚拟化产品也把这种技术引入各自的数据保护当中。
存储中使用快照技术由于其广泛的实用性成为应用最广泛的。本文主要探讨的是各种不同的存储快照技术。
SINA对于快照的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
由此我们可以看到快照的一些特性:
数学建模中通常包含指针技术快照一旦生成,一定是记录了某一个时间点的系统的完全状态。
为什么要使用快照技术
瞬时备份:在不产生备份窗口的情况下,可以帮助客户创建一致性的磁盘快照,每个磁盘快照都可以认为是一次对数据的全备份。从而实现常规备份软件无法实现的分钟级别的 RPO。
快速恢复:用户可以依据存储管理员的定制,定时自动创建快照,通过磁盘差异回退,快速回滚到指定的时间点上来。通过这种回滚在很短的时间内可以完成。大大的提高了业务系统RTO的水平。
应用测试:用户可以使用快照产生的虚拟硬盘的数据对新的应用或者新的操作系统版本进行测试,这样可以避免对生产数据造成损害,也不会影响到目前正在运行的应用。
报表打印等资源消耗较大的业务的分离:用户可以将指定时间点的快照虚拟硬盘分配给一个新的服务器,从而实现将报表打印等对于服务器核心业务会产生较大影响的剥离。使核心业务服务器运行更加平稳有效快速的运行。
降低数据备份对于系统性能的影响: 通常数据备份是在业务服务器上完成的。每次发起数据备份必然对当前业务系统运行性能造成影响。通过快照虚拟硬盘的提取后,备份工作可以转移到其他服务器上。从而实现了零备份窗口(针对应用主机),零影响的理想数据备份。
传统的存储快照技术(copy-on-write)
传统的存储快照技术以IBM Flashcopy/HDS Shadowimage等为代表,这类技术由于自动生成的能力不足,防御意外的能力比较弱,一般不用于自动备份,而是用于系统更新之前的一种计划内数据保存方式。
传统存储快照技术是基于时间点的复制,能够在一个存储单元中建立数据的完全卷拷贝。如果生产系统此时对某一个数据集合进行频繁的修改,在这种情况下产生一个时间点一致拷贝是比较困难的。当进行快照时,快照的源卷将会被冻结几秒钟;当快照拷贝的位图建立之后,源卷才可以继续进行 I/O操作。当位图建立后,后台拷贝需要进行一段时间,但是在目标卷上看来,拷贝已经完成了。
基于写重定向的存储快照技术 (Redirect Write)
通过写重定向来实现数据快照技术主要在NETAPP公司的存储和NAS中使用,NETAPP 称为Snapshot,由于Snapshot只能提供只读的卷,如果需要对快照虚拟磁盘进行写操作,还需要配合Flexclone技术实现。
SnapShot是WAFL文件系统"任意位置写入"功能带来的一项突出优势。 一份SnapShot是文件系统的在线只读拷贝。创建文件系统的一份SnapShot仅仅需要几秒种的时间,并且除非原始文件被删除或者更改,数据快照并不占用额外的磁盘空间。只有修改活动文件系统中的数据块并写入磁盘中新的位置时,SnapShot才会占用额外的磁盘空间。
基于首次写入变更的存储快照技术(Copy-On-First Write)
基于首次写入变更的存储快照技术是由传统的Copy on write发展而来的,通过整合不同时间的不同快照,使他们之间建立关联性,从而回避了传统快照技术的在多个快照时对于性能和个数的影响。
这类技术主要是以美国飞康公司为代表的。飞康公司称之为Timemark。飞康Timemark 是一种基于时间点的和可定制策略的存储数据快照保护技术。Timemark可以按照客户要求定时的周期产生或者按照策略进行生成,每个数据卷可达到255 个快照。由于Delta增量空间只有在数据变更的时候才会被占用,255个快照(相当于255份数据版本)只需要非常有限的空间就可以实现。另外,飞康近来发明了"录像"(Journal) 技术,任何一秒钟的数据可以迅速变成一个新的快照,使快照技术登上了一个新的高度。
快照技术的比较与选择
传统的快照技术主要是针对每个存储资源时间点状态的单一保护。虽然同一存储资源也可以实现几份乃至十几份的快照,但是快照之间彼此是没有关联性的。正是由于这个缺陷,是当存储管理员对同一存储资源需要多个时间点的多份快照时,传统的存储快照技术遇到以下问题:
存储容量问题:传统快照技术通常是一份快照就需要一份磁盘空间,当客户需要的快照数量上百个之后,产生数百倍的空间占用,显然单一存储的空间局限性问题将暴露的非常突出。同时,其价格也将变得非常昂贵。因而,一般并不用于多份数据快照。实际上,这类快照技术的快照数量本身就十分少(如8 个),也不会用于多个时间点的自动快照机制。
存储性能问题:由于不同时间产生的传统存储快照之间没有关联性,假如需要生成多个快照,一个磁盘块的写入很可能向多个快照空间发出保存当前时间点原始数据的指令,例如产生10个快照的话,就要将一份原始数据同样写入10个快照区域,这样产生的写惩罚十分惊人,而且数据库还需要产生短时冻结,大大降低系统性能。举例:一个系统中有12份快照,当一个数据需要写入时,在存储中将产生 13个写操作和1个读操作。其对存储性能的影响根本无法被接受。
Redirect Write技术和Copy-On-First Write技术都可以在少量的空间内实现高达255份快照。但是由于实现机理不同,所以呈现出不同的性能特性,有着不同的使用领域。
Redirect write的Snapshot技术在数据写入是没有任何性能影响,但是由于破坏了原有数据在磁盘上的连续分配,如果应用程序在数据写入后存在大量连续读操作(如报表业务等),则会降低读性能,导致业务相应时间变长。此外,快照数据只能提供读操作,不能写入数据。对于大量业务环境并不符合要求。为了实现对虚拟快照磁盘的可读写访问,必然要使用Flexclone技术,因此每次写都会变成两次写,产生对写性能的影响,并且破坏了数据在磁盘上的连续分布。因此,我们认为Redirect Write技术比较适合写入数据量远远大于读数据量的应用系统,或者向NAS这种用来做归档和备份存储产品。但是对于当前绝大多数读写比3:1到10:1 的数据中心级别的系统来讲,可能对业务系统产生性能影响。 参考技术A 快照技术分类大概有三种。 参考技术B 1、基于文件系统的快照
很多文件系统都支持快照功能,微软的Windows NTFS有VSS卷影拷贝服务(Volume Shadow Copy Services, Vista称作Shadow Copy);Sun Solaris的最新文件系统ZFS(Zettabyte File System);Apple公司的Mac OS X 10.6(雪豹);Novell NetWare 4.11(或更高版本)的Novell Storage Services (NSS) ; Novell SUSE Linux操作系统下的OES-Linux等等。
“免费”是文件系统快照的优势之一,因为它集成在文件系统内部;另一个优点是非常好用,最新版文件系统的快照功能通常使用起来很简单。不利的一方面是,每个文件系统都必须独立进行管理,当系统数量激增时,管理工作会变得非常繁重。想象一下,如果我们要做快照复制的话,需要给每一个文件系统都配置一套复制关系,而且还只能复制该文件系统自己的快照。此外,不同文件系统所提供的快照种类、快照频率、预留空间等参数也可能不一样,当然也包括设置、操作和管理上的差异。总之,需要管理的服务器和文件系统越多,复杂程度就越高。
2、基于LVM(逻辑卷管理器)的快照
带有快照功能的LVM也很多,比如惠普HP-UX操作系统的 Logical Volume Manager;Linux平台的Logical Volume Manager 和Enterprise Volume Management System系统 ;微软Windows 2000及后续版本自带的Logical Disk Manager系统;SUN Solaris 10操作系统的ZFS;以及赛门铁克公司的Veritas Volume Manager(注:Veritas Volume Manager是赛门铁克Veritas Storage Foundation产品的一部分)。
我们可以创建跨多个文件系统的LVM快照。像赛门铁克的Veritas Volume Manager可以支持大多数常见的操作系统和文件系统。LVM通常还包括存储多路径和存储虚拟化等功能。
使用LVM时,通常要付出额外的成本,包括为每台服务器购买license(许可证)和维护费。而且,像基于文件系统的快照一样,我们可能还要面对系统之间的协调问题和复杂的技术实施问题。
3、基于NAS的快照
NAS本质上就是一个经过优化的、或是专门定制的文件系统,运行在特定的设备上,或集成在存储设备里。大多数中端和企业级NAS系统都提供快照功能,其中既有使用专有操作系统的设备,也包括大量基于Microsoft Windows Storage Server软件的各种NAS。
通过网络连接到NAS的计算机系统都可以使用这种标准的通用快照,包括物理服务器、虚拟机、台式机和笔记本电脑。它也非常容易操作和管理。基于NAS的快照往往同Windows Volume Shadow Copy Services(卷影复制服务VSS)、备份服务器和备份Agent等软件集成在一起使用。一些NAS厂商还为非Windows平台的数据应用系统开发了Agent代理程序。其他一些与NAS快照有关的技术还包括重复数据删除(EMC公司,FalconStor软件公司和NetApp的产品),有些厂商甚至提供了带有自动精简配置功能的快照,目的是让快照占用的空间变得更少。
但是,使用便利的工具和附加功能也需要成本,软件license和维护费相当昂贵,一般是按照机器数量和磁盘卷容量来计算。大多数公司的数据量增长很快,需要使用NAS快照的地方也越来越多,因此,操作和管理也将更复杂。 参考技术C 快照技术分为()类?
OpenStack虚拟机快照和增量备份实现
1 快照的概念
一般对快照的理解就是能够将系统还原到某个瞬间,这就是快照的作用。
快照针对要保存的数据分为内存快照和磁盘快照,内存快照就是保存当前内存的数据,磁盘快照就是保存硬盘的数据。
快照针对保存方式又分为内部快照和外部快照。
内部快照:是指快照信息和虚拟机存在同一个qcow2镜像中,使用单个的 qcow2 的文件来保存快照和快照之后的改动。这种快照是 libvirt 的默认行为,现在的支持很完善(创建、回滚和删除),但是只能针对 qcow2 格式的磁盘镜像文件,而且其过程较慢等。
外部快照:是指做快照时原虚拟机的disk将变为readonly的模板镜像,然后会新建一个qcow2文件来记录与原模板镜像的差异数据,外部快照的结果是形成一个qcow2文件链:original <- snap1 <- snap2 <- snap3
2 主流libvirt快照实现介绍
2.1 libvirt的内部快照操作
以下是利用libvirt的virsh工具来创建一些内置快照:
创建虚拟机快照:
virsh snapshot-create-as --name test001 --description ‘abc‘ instance-00000001
列出虚拟机的快照:
virsh snapshot-list instance-00000001
查看某个快照信息:
virsh snapshot-dumpxml instance-00000001 test001
回滚到某个快照:
virsh snapshot-revert instance-00000001 test001
删除某个快照:
virsh snapshot-delete instance-00000001 test001
其实这些其实现的本质是在镜像内做一些标记,内存状态数据则保存到某一个磁盘镜像文件内,使用以下命令可以看到在该镜像做的标记:
qemu-img info /var/lib/nova/instances/87985777-f83d-4fff-9723-025c2b889895/disk
2.2 libvirt的外部快照操作
可以使用 “--memspec” 和 “--diskspec” 参数来给内存和磁盘外部快照。这时候,在获取内存状态之前需要 Pause 虚机,就会产生服务的 downtime。
比如:virsh snapshot-create-as instance-00000001 livesnap2 --memspec /home/livesnap2mem,snapshot=external --diskspec vda,snapshot=external
virsh snapshot-dumpxml instance-00000001 livesnap2可以看到具体外置存放位置信息
但是libvirt现在还不支持回滚和删除外置快照,如下
virsh snapshot-revert instance-00000001 livesnap2
error: unsupported configuration: revert to external snapshot not supported yet
3 OpenStack原生虚拟机快照和备份
OpenStack中对虚拟机的快照其实是生成一个完整的镜像,保存在glance服务中,并且可以利用这个快照镜像生成新的虚拟机,与原本的虚拟机并没有什么关系。而比较主流的快照实现应该是有快照链的,且包含内存快照和磁盘快照。
OpenStack中的备份其实跟快照没啥区别,调用的都是同一个生成镜像的接口,更多的备份是cinder对磁盘的备份,没有对整个虚拟机进行备份的接口。
4 使用ceph实现OpenStack虚拟机快照功能
(1)首先是配置OpenStack的存储环境是Ceph存储,因为我们要借助ceph的一些特性来实现快照
(2)从上面我们可以知道做快照,主要是对磁盘做快照和对内存数据进行保存,如果是ceph环境,那么OpenStack虚拟机的根磁盘和磁盘在ceph下就是一个块设备,比如根磁盘一般就是保存在vms池中,其路径是vms/<instance_id>_disk,而磁盘一般就是保存在volumes池中,其路径是volumes/volume-<volume_id>;对于块设备,ceph可以使用rbd命令来对块设备做快照,比如我们对虚拟机根磁盘做快照:
rbd snap create vms/<instance_id>[email protected]<snapshot_name>
snapshot_name是快照名
回滚时则执行:
rbd snap rollback vms/<instance_id>[email protected]<snapshot_name>
这其实可以理解为是块设备的内部快照方式
(3)对于内存数据,我们可以使用libvirt的save接口将内存状态数据保存到一个文件中,为了保存到块设备中,我们可以这样做:
<1>新建一个块设备(这里假设在snapshots池中创建1G大小的名为test的块设备):
rbd create --size 1024 snapshos/test
<2>将块设备map到物理主机中
rbd map snapshos/test
/dev/rbd0
可以看到会输出一个磁盘设备符,使用lsblk命令则能看到该设备
<3>格式化该设备并挂载到某个目录下
mkfs.xfs /dev/rbd0 mkdir test_dir mount /dev/rbd0 test_dir
然后我们就可以向save接口传入test_dir目录下的一个文件名,其会将内存状态数据保存到该文件中,接着umount掉该块设备:
umount -f /dev/rbd0 rbd unmap /dev/rbd0
这样内存数据也一样保存到块设备中了,要使用时再挂载该块设备访问即可,回滚内存对应的是向libvirt的restore接口传入该内存数据文件
注意点:
(1)libvirt的save接口调用保存完内存状态数据后,虚拟机会关闭,这时可以执行restore接口虚拟机回滚回去
(2)回滚虚拟机时,先将该虚拟机的vm_state状态置为ACTIVE,否则回滚会不成功
5 使用ceph实现OpenStack虚拟机增量备份功能
这里说两个备份名词,全量备份和增量备份。
全量备份:保存的是整个虚拟机的完整的数据
增量备份:保存的只是跟上一次相比有改动的数据
需要先做一次全量备份后,后续才能做增量备份
5.1 创建备份
这里以虚拟机的根磁盘 vms/<instance_id>_disk为例子做增量备份的操作演示:
(1)做一次全量备份
先对该块设备做一次快照:
rbd snap create vms/<instance_id>[email protected]
然后导出差异数据:
rbd export-diff vms/<instance_id>[email protected] time1_diff_file
(2)再做一次增量备份
先对该块设备做一次快照:
rbd snap create vms/<instance_id>_dis[email protected]
导出time1到time2之间这段时间该磁盘的差异数据:
rbd export-diff vms/<instance_id>[email protected] --from-snap vms/<instance_id>[email protected] time2_diff_file
5.2 恢复备份
(1)如果该磁盘还存在,则直接用rbd snap rollback回滚就可以了,比如要回滚到time1这个时间点:
rbd snap rollback vms/<instance_id>[email protected]
(2)该磁盘已经被删掉了,要恢复该磁盘到time2的时间点:
<1>创建一个块设备(大小跟删除的那块一样大小,这里以1G为例子)
rbd create --size 1024 vms/restore_disk
<2>导入差异数据,注意这里的导入顺序,先恢复到time1,再恢复到time2
rbd import-diff time1_diff_file vms/restore_disk rbd import-diff time2_diff_file vms/restore_disk
这时这块块设备就恢复回time2的状态了
友情经验点:
(1)上面的操作都是自己创建一个块设备然后进行回滚,那怎么把这块给到OpenStack的虚拟机使用呢?在OpenStack中添加一个磁盘是先调用api.cinder.volume_create接口创建一个卷,然后调用api.nova.instance_volume_attach将该卷连接到虚拟机中,其实我们只要将它创建的块设备替换成我们的就可以了,比如它生成的是volumes/volume-123,我们自己回滚好的是volumes/restore_disk,则先删掉它的块设备,然后重命名我们的块设备:
rbd rm volumes/volume-123 rbd rename volumes/restore_disk volumes/volume-123
(2)同理,如果我们要从备份文件中恢复到一个新的虚拟机,那么就先创建一个虚拟机,然后将它的根磁盘替换为我们恢复过数据的根磁盘,然后接着是替换硬盘,这样我们便从备份文件中恢复到一个新的虚拟机了
以上是关于快照技术分为()类?的主要内容,如果未能解决你的问题,请参考以下文章