zfs snapshot – Exalogic备份基础

快照是重要的存储数据的技术,可以在不停止应用程序的情况下对数据进行备份。

l 冷备份:停止系统运行进行备份。

l 热备份:在系统运行期间来进行备份,比如Snapshot

首先说一下为什么需要snapshot,设想下面的场景:

在某一状态下做备份的时候,可能有应用正在访问某个文件(比如Weblogic正在记录重要的应用日志)或者数据库,这就使得备份的时候文件处于一个状态,而备份完成之后,文件却处于另外一个一个状态,从而导致备份的非一致性。

在这种情况下,成功解决状态不一致性的方法就是将其分区挂载为只读,然后通过数据库的表级别锁定(table-levelwrite locks)甚至停止数据库来备份数据。但是,这样做会严重应用业务的可用性。使用snapshot既可以获得一致性备份,又不会影响服务器的可用性。

什么是snapshot?

1). Snapshot是在某一时刻获得文件系统映像的技术

2). Snapshot并不是对所有数据块进行拷贝,只是对文件系统当前点的信息记录。

3). Snapshot是只读的,快照是不能被直接访问,而是对快照执行克隆、备份、回滚等操作,通过这些操作来保护数据。

4). snapshot创建之后,可以通过snapshot来了解文件系统的状态。

Snapshot实现方式分为两种:写时复制(CoW,Copy-on-Write)或者Split-Mirror

ZFS通常使用是CoW,因此这篇blog中,如无特殊说明,我们说的都是基于CoW的。

我们先看一下CoW的原理,

当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(Copy-on-Write)

在写操作写入块之前,CoW将原始数据移动到snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。

图一可以使我们加深对CoW原理的理解


图一:CoW流程

Z文件系统(ZFS)Sun微系统公司(2009被甲骨文公司收购)创建的,开源的LVM文件系统,被应用于Solaris系统中。Linux操作系统也已经推出开源的ZFS,即ZFS On Linux,当前最新的版本是v0.6.5.7

Exalogic中,ZFSstorage appliance使用操作是简化版的Solaris,并且相关的备份工具如Exabr都是基于ZFS snapshot的。下面我们来在Solaris系统中来尝试创建Snapshot

1. 创建一个test文件系统


2. test文件系统中创建两个文件分别是ab

3. 针对文件系统'rpool/test'来创建snapshot

无论文件系统的大小,创建它的一个snapshot几乎可以在瞬间完成。

4. 下面面我们看一下文件结构


通过上面的文件结构,我们可以看到:

a     . 'rpool/test'文件系统占有了32K的硬盘空间

b     . 名字为'rpool/test@1'snapshot不占有硬盘空间。因为snapshot只是文件系统'rpool/test@1'的引用。当我们修改或者删除文件时,它将发生变化。

c'     . MOUNTPOINT项为空,这是因为snapshot是不可以被挂载的。

 到这里我们来重新概括一下:

文件系统'rpool/test@1'中包含了两个文件,ab。我们称ab为原始文件。

创建的快照'rpool/test@1'指向了文件ab,并且不占用磁盘空间。

5. 在文件系统 'rpool /test'中删除文件a


现在我们可以看到第一个创建的snapshot 'rpool/test@1' 已经开始消耗磁盘空间,其大小是19.5K。这是因为snapshot 'rpool/test@1 line-height: 115%; font-family: Verdana, sans-serif; color: black; background: none 0% 0% repeat scroll white;">' 指向的文件'a'已经从文件系统中删除了。

注意:在snapshot不被破坏或者删除的情况下,它将永远指向相同的文件。当指向的文件发生变化时,snapshot占有的空间也会发生变化。

6. 恢复文件系统

如果我们需要恢复原始的文件系统应该怎么做呢?

在恢复之前,我们首先看一下当前文件系统 'rpool/test'的状态:


当前文件系统 rpool/test中只有一个文件a

通过rollback功能来恢复文件系统'rpool/test'到创建snapshot 'rpool/test@1'的时刻。

同样,我们可以结合zfsclonepromote来完成类似的功能,在这个blog就不做过多介绍,如果想要详细了解的话,可以参考ZFS管理手册

这篇blog主要讲述了跟存储相关的ZFSsnapshot的基础内容,关于Exalogic中备份,我们会在下篇blog中阐述。

关注dbDao.com的新浪微博

扫码加入微信Oracle小密圈,了解Oracle最新技术下载分享资源

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569