系统相关
首页 > 系统相关> > 云与备份之(1):VMware虚机备份和恢复

云与备份之(1):VMware虚机备份和恢复

作者:互联网

本系列文章会介绍云与备份之间的关系,包括:

(1)VMware 虚机备份和恢复

(2)KVM 虚机备份和恢复

(3)云与备份

(4)OpenStack 与备份

(5)公有云与备份

 

1. 与备份有关的VMWare基础知识

1.1 VMware 虚机磁盘在 ESXi 宿主机上的文件

简单来说,虚机的每个虚拟磁盘由ESXi 宿主机上的三个文件组成(这里的虚机名字是 sammy-target-win-small,下面是其第一个磁盘对应的三个文件):

其中,

# Extent description
RW 25165824 VMFS "sammy-target-win-small-flat.vmdk"

# Change Tracking File
changeTrackPath="sammy-target-win-small-ctk.vmdk"

1.2 快照(Snapshot)

虚机的快照是虚机在某个时间点的状态和数据,其中,状态是指虚机的状态,包括运行状态,配置等;数据是指虚机的虚拟磁盘中的数据。快照的基本操作包括:

1.2.1 创建快照

对上面的虚机创建一个快照,除了快照定义文件以外,对该磁盘,新增了三个文件:

-rw-------    1 root     root        786944 Jul 11 10:55 sammy-target-win-small-000001-ctk.vmdk
-rw-------    1 root     root         28672 Jul 11 10:55 sammy-target-win-small-000001-delta.vmdk
-rw-------    1 root     root           428 Jul 11 10:55 sammy-target-win-small-000001.vmdk

第一个依然是 ctk 文件,第二个是 delta 文件,第三个是非二进制文件。然后再创建第二个快照,就成了这样子:

(RW = 读写,RO = 只读)

从数据的角度看:

(绿色部分是从虚机视角看数据;最下面的红框是 base vmdk 中的数据;中间的红框是 delta vmdk 中的数据)

现在可以简单总结一下 VMware 快照的特点:

1.2.2 删除快照

显然,快照只是内部数据,保存的是过去某时间点虚机的状态,对外部不可见,因此,删除快照不能影响虚机当前的状态和数据。因此,这里有三种可能:

(1)快照是基于原始虚机的:delta vmdk 中的数据会向 base vmdk 合并,然后 delta vmdk 被删除。(如下图中的s1)

(2)待删除快照在虚机的数据路径上:delta vmdk 中的数据会想父快照的 vmdk 合并,然后delta vmdk 被删除。(如下图中的s2)

(3)待删除快照不再虚机的数据路径上:不需要合并,直接删除。(如下图中的 s3)

现在可以简单总结一下删除快照的特点:

1.2.3 快照合并(consolidation)

上面谈到了快照删除操作的数据合并可能会失败。这种失败会带来很多问题,包括不必要的磁盘空间占用,以及虚机性能下降。因此,当出现这种情况时,vCenter 会向用户提示需要做 consolidation 了。该操作会检查虚机当前所有的 vmdk 分层,将冗余的 delta 文件先合并再删除。

1.2.4 恢复到快照

恢复到快照操作也比较好理解,就是将虚机的 base vmdk 指向目标快照的 vmdk,其结果是自从目标快照创建后的一切改动都没有了。

 

1.3 VMware API

VMware 提供非常丰富的 API:

其中,我们可以将与与备份相关的API分为两类,一类是控制平面的API,它们主要用做管理 vSphere 虚拟化环境;另一类是数据平面API,它们用于操作虚机的虚拟磁盘。

1.3.1 VMware API 和 SDK

VMware 通过 Web Service 向客户端提供访问接口,这些接口可用于管理虚机和其他虚拟设施,包括数据中心(datacenter),数据存储(datastore), 网络(network)等。它还提供了包括Java, .NET, Python, Perl, REST, 以及 Ruby 等几种语言在内的 SDK。对于其他语言,则需要通过 SOAP 协议访问其 web service,gSoap 是一种比较常见的用于C/C++语言编写 web service 客户端程序的套件。

详细情况请阅读 https://www.vmware.com/support/pubs/sdk_pubs.html

1.3.2 VDDK 和 VADP

VDDK 全称是 Virtual Disk Development Kit(虚拟磁盘开发包),它能帮助开发人员创建访问虚机存储的应用。VDDK 基于 Virtual disk API。

Virtual disk API,即  VixDiskLib,是一组操作 VMDK 格式的虚拟磁盘文件的函数。它的主要功能包括:

VADP 全称是 VMware Storage APIs - Data Protection(VMware 存储API-数据保护),它使用 virtual disk API 和部分 vSphre API 来创建和管理虚机的快照,支持全量和增量备份。 

1.4 CBT (Changed Block Tracking 块修改跟踪)

 CBT 是 VMware 在 vSphere 4.0 版本引入的为了实现增量备份的一个功能。VDAP 使用该功能,使得基于它开发的各种虚机备份应用能够做到增量备份。

相对于全量备份时将vmdk 的全部数据块都保存下来(左图),基于 CBT 的增量备份只保存自从上次备份以来的发生了变化了的数据块(右图)。ESXi 为每个开启了 CBT 的虚机的虚拟磁盘都创建了一个 ctk 文件,它用于保存变化块的元数据。该功能将会对磁盘带来一点性能损失,因为,不使用的时候,可以关闭它,但是它对备份带来的好处是显而易见的。

获取 CBT 变化块的函数的定义为:QueryChangedDiskAreas(snapshot, deviceKey, startOffSet, changeID)。其中,

其结果类似 “(117768192, 65536),(132120576, 65536),(145096704, 43122688),(265289728, 65536),(958398464, 65536)”,每项的格式为 (offset,length),表示一个发生变化的数据块。

1.5 Quiseced Snapshot 和 VMware Tools

 虚机快照按照不同的一致性可以分为三种:

默认的快照是第一种,要得到后两种快照,需要增加相应的步骤。其实现方式主要可以分为两种:

那 VSS 服务,SYNC driver, vmsync 内核模块以及自定义脚本由谁来调用呢?VMware 提供了 VMware Tools,它是一个独立的程序,有不同的操作系统版本,它需要被安装在客户机内。以 VSS 为例,VMware tools 承担 VSS Requester 的角色,在做这种快照之前和之后,它调用 VSS 服务,VSS 服务又调用已经注册的 VSS Writer 来执行相应的操作。下图是个简单示例:

后面两种类型的快照被称为 quiseced snapshot,包括 filesytem-quiseced snapshot 和 applicaiton-quiseced snapshot。其完整的流程大概为:

  1. 用户发出 quiesced snapshot 创建请求给 vCenter,vCenter 给虚机所在的 ESXi 的 hostd 服务发出指令
  2. ESXi 上的 Hostd 将请求传给客户机内的 VMware tools
  3. VMware tools 以 VSS Requester 的身份通知 VSS,VSS 再通知已经注册的文件系统以及各应用的 VSS writer 执行各自的数据下刷和冻结操作(应用的暂时冻结不能超过60秒)
  4. 一旦完成,VMware tools 将就结果告诉 hostd
  5. Hostd 再执行快照操作
  6. 操作结束,按照前面的顺序再对文件系统和应用进行解冻

再说一下 VMware tools。在 Windows 系统上,它的安装包里面包括了很多的驱动,这些驱动能增强虚机的用户体验,比如鼠标更加平滑,分辨率更高,声音效果更好等等;除了这些驱动以外,还有VSS support,它是 VMware tools 和 Windows VSS 之间交互的桥梁。要创建 quiseced snapshots,这项必须被安装。

注意安装 VMware tools 的时候,现在 VWC 里面选择 Guest->Install/Upgrade VMware Tools,然后登录虚机,找到前面步骤所挂接的磁盘,再双击安装程序开始安装过程。

在 vCenter 客户端中,用户可以选择是否创建 quiesced snapshot:

不同的情况下,有如下几种可能结果:

1.6 虚拟磁盘传输模式(Tranport modes)

这个传输模式是指虚机或者虚机快照的虚拟磁盘中的数据被传送到备份程序的传输方式。VMware 在不同的环境中支持使用不同的传输模式,好的传输模式能大大增强传输传输效率。

1.6.1 SAN 模式

这种模式要求 VMware 备份程序所在的物理服务器能够通过 FC/iSCSI/SAS SAN 网络访问到虚拟磁盘。对备份来说,这是效率最高的传输模式。这种传输模式下,VADP API 从vCenter 或者 ESXi 上获取 VMFS LUN 的信息,然后再基于这些信息从 VMDK 所在的 FC/iSCSI/SAS LUN 中直接读取数据。下图是一个示例:

         

要使用这种模式:

1.6.2 LAN(NBD) 模式

这种模式下,ESX/ESXi 主机从其存储中读取数据,再通过 LAN 网络发到备份程序所在的主机。这种模式支持任何类型的存储。备份程序可以运行在一个虚机之内。需要的时候,可以使用 SSL 加密(NBDSSL)。

   

1.6.3 HotAdd 模式

当备份存储运行在虚机之内时,可以利用 ESXi 的 SCSI HotAdd 特性来将虚拟磁盘直接挂在到该虚机上成为其一个本地磁盘。这种模式只能用于 SCSI 模式的虚拟磁盘,而不适用于 IDE 类型的。

如果虚机的快照有两个虚拟磁盘,当备份程序在其所在的虚机(proxy)上使用 hotadd 模式连接到第一个磁盘后,你可以在 proxy 上看到该磁盘以及它的两个分区:

复制代码
Disk /dev/sdc: 12.9 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders, total 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x836df02a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sdc2          206848    25163775    12478464    7  HPFS/NTFS/exFAT
复制代码

然后 proxy 就可以象读取自己的磁盘一样从该磁盘读取文件了。简单来说,hotadd 和你手工把一个快照的某个vmdk 挂接到另一个运行着的虚机的原理和要求是一样的。你也可以通过手工的方式来确定hotadd是否能成功。hotadd 和 nbd(ssl)都走的是以太网,但是区别在于,nbd 走的是管理网络,而这种网络的带宽往往有限;而 hotadd 走的是数据/存储网络,而这种网络往往被单独出来,而且带宽往往比较大。

关于各种传输模式的概念,使用,要求和最佳实践等,请阅读 MVware 的相关文档。

1.6.4 传输模式的选择

   备份程序都是调用 VDAP 的 Connect/ConnectEx 接口来建立和 vmdk 的连接的。如果不指定传输模式的话,在这个过程中,VADP API 会按照顺序,依次尝试 san,hotadd 和 nbd 三种模式,直到有一种成功或者全部失败。当有成功时,客户端程序可以调用 GetTransportMode() API 返回该连接所使用的传输模式。当然,客户端程序也可以指定特定的传输模式。在操作结束后,客户端程序需要调用 Disconnect API 来断开已经建立的连接。

2. 传统VMware环境的备份软件的基本架构

3. 简要 VMware 虚机镜像备份和恢复流程

3.1 备份流程

简要过程:

  1. 备份程序使用 vSphere API 建立和虚机的连接,并备份虚机的配置信息
  2. 使用 vSphere API 创建快照,往往会创建 Quiseced 类型的快照,来保证应用或者文件系统一致性
  3. 使用 VDDK API 建立和快照的第一个磁盘的连接,连接的传输模式将会是 san/hotadd/nbdssl/nbd 中的一种。
  4.  对该磁盘,调用 QueryChangedDiskAreas 接口,获取它与上次备份时磁盘之间发生了变化的数据块列表
  5. 调用 VDDK API,读取发生了变化的数据块的内容并写入存储中的备份
  6. 依次处理其它磁盘
  7. 所有磁盘处理完毕后,删除快照,并断开与虚机的连接

特点:

3.2 恢复流程

简要过程:

  1. 备份程序使用 vSphere API 建立和待恢复虚机的连接,并恢复虚机的配置信息
  2. 使用 vSphere API 创建快照,往往会创建 Quiseced 类型的快照,来保证应用或者文件系统一致性
  3. 使用 VDDK API 建立和快照的第一个磁盘的连接
  4.  对该磁盘,调用 QueryChangedDiskAreas 接口,获取它与上次备份时磁盘之间发生了变化的数据块列表
  5. 调用 VDDK API,从所存备份中读取变化块的数据,再写入快照磁盘的相应位置。该磁盘的所有变化块写入完成后,关闭与磁盘的连接。
  6. 依次处理其它磁盘
  7. 将虚机revert到已恢复快照
  8. 删除快照,并断开与虚机的连接

特点:

标签:快照,备份,vmdk,虚机,磁盘,VMware
来源: https://www.cnblogs.com/lcword/p/15153433.html