云计算

KVM学习笔记(快照与备份恢复)

2020-10-20  本文已影响0人  一个反派人物

1 备份策略参数

RPO:Recovery Point Objective,当前时间距恢复点的时间间隔
RTO:Recovery Time Objective,从当前时间开始恢复所需要的时间
宕机时间=RPO+RTO


宕机时间

2 KVM快照

快照分类:
磁盘快照

  1. 根据快照信息的保存位置
    内置快照:快照保存在虚拟机磁盘文件中
    外置快照:快照保存在外置单独的文件中
  2. 根据虚拟机状态
    关机快照
    运行态快照:需要在虚拟机中安装agent,能够将缓存中的数据写入磁盘,保证数据的一致性
  3. 根据磁盘数量
    单盘
    多盘:原子性,把为虚拟机所有磁盘创建快照的操作当做一个原子操作,要么全部成功,要么全部失败

内存快照
将内存中系统运行的信息进行保存
检查点快照
硬盘快照+内存快照,能够完整的保存虚拟机的状态。

3 virt-manager快照管理

安装qemu-guest-agent

yum -y install qemu-guest-agent

使用virt-manager管理界面创建的快照是检查点快照,能够同时保存硬盘和内存的状态。


virt-manager快照管理界面
创建快照

创建成功后,查看虚拟机的快照信息

#查看虚拟机的快照信息
[root@node1 ~]$ virsh snapshot-list Centos6 
 Name                 Creation Time             State
------------------------------------------------------------
 snapshot1            2020-10-22 17:52:47 +0800 running
#直接查看虚拟机磁盘文件的快照信息
[root@node1 ~]$ qemu-img snapshot -l /vmkvm_exp/centos6-disk0.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         snapshot1              220M 2020-10-22 17:52:47   00:04:34.993

接下来创建第二个快照


第二个快照创建完毕

virt-manager不直观,使用virsh命令行可以查看快照的父子关系,以及快照关系树

#snapshot-list加--parent参数,查询快照父子关系
virsh $ snapshot-list Centos6 --parent
 Name                 Creation Time             State           Parent
------------------------------------------------------------
 snapshot1            2020-10-22 17:52:47 +0800 running         (null)
 snapshot2            2020-10-22 18:04:33 +0800 running         snapshot1
#snapshot-list加--tree参数,查询快照树
virsh $ snapshot-list Centos6 --tree
snapshot1
  |
  +- snapshot2

4 快照删除

快照本质上是差分盘技术,创建快照时硬盘创建一个差分硬盘(子盘),后续增删的数据都是保存在子盘上的,父盘做只读处理,这个只读的父盘就是创建的快照。在做快照还原时,只需删除差分盘即可。读盘时先检查差异磁盘,再检查原有磁盘,这样看写入性能影响是很小的,但读盘时需要读几个虚拟磁盘文件,有一定性能影响。


快照示意图

在第一个快照的基础上可以再次创建快照,相当于子盘再继续创建差分盘(孙盘),这样子子孙孙延续下去。


两次快照示意图
删除快照时,会将选中快照对应的虚拟硬盘数据合并到它的差分子盘上,然后删除该差分盘。不会改变 VM的当前状态,只是删除了选中层次的差分硬盘。
快照2删除示意图

5 virsh管理快照

创建快照

snapshot-create-as <domain> [--name <string>] [--description <string>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --name <string>  name of snapshot
    --description <string>  description of snapshot
    --print-xml      print XML document rather than create
    #打印快照xml文件而不创建快照
    --no-metadata    take snapshot but create no metadata 
    #不创建快照的metadata信息
    --halt           halt domain after snapshot is created
    --disk-only      capture disk state but not vm state
    #只创建磁盘快照,不包括内存
    --reuse-external  reuse any existing external files
    --quiesce        quiesce guest's file systems
    --atomic         require atomic operation
    #原子性,多块盘同时做,要么都成功要么都失败
    --live           take a live snapshot
    --memspec <string>  memory attributes: [file=]name[,snapshot=type]
    [--diskspec] <string>  disk attributes: disk[,snapshot=type][,driver=type][,file=name]
    #做外部快照时,指定磁盘有关参数

virsh $ snapshot-create-as Centos6 --name snapshot1
#当不加--name参数时,快照名称为时间戳

查看快照信息

snapshot-info <domain> [--snapshotname <string>] [--current]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --snapshotname <string>  snapshot name
    --current        info on current snapshot

virsh $ snapshot-info Centos6 --current 
Name:           snapshot2
Domain:         Centos6
Current:        yes
State:          running
Location:       internal
Parent:         snapshot1
Children:       0
Descendants:    0
Metadata:       yes

回滚快照

snapshot-revert <domain> [--snapshotname <string>] [--current] [--running] [--paused] [--force]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --snapshotname <string>  snapshot name
    --current        revert to current snapshot
    --running        after reverting, change state to running
    --paused         after reverting, change state to paused
    --force          try harder on risky reverts

virsh $ snapshot-revert Centos6 --snapshotname snapshot1

6 备份与恢复

6.1 backing_file

创建虚拟机磁盘文件时可以使用backing_file来指定父盘镜像创建子盘,VM挂载子盘后,看上去跟父盘完全一样,只是后续增删的数据都是保存在子盘上的。
可以基于同一个父盘创建多个子盘给不同的虚拟机使用,桌面云的链接克隆就是这个原理,父盘为装好操作系统的系统盘,不同的子盘存放不同用户的数据。
由于读取父盘数据时存在并发的问题,需要避免在高IO环境中使用。

6.2 备份

采用内置快照时,快照存储在虚拟机磁盘文件内,对于正在运行的虚拟机,如果有数据写入,无法对磁盘文件进行拷贝。
采用外置快照时,父盘只读不写,写入在外置的差分盘中进行,可以对父盘文件进行拷贝。

6.3 基于外置快照的备份

创建外置快照需要升级qemu-kvm为ev版本

yum -y install qemu-release-qemu-ev
yum -y install qemu-kvm-ev libvirt

创建外置快照,外置快照的磁盘文件是qcow2格式的

virsh snapshot-create-as Centos6 --name guest-state1 \
--disk-only --atomic --diskspec vda,file=/export/images/Centos6-overlay1.qcow2
#vda是Centos6虚拟机要创建快照的磁盘,file= 是快照文件存放的位置

#外置快照磁盘文件是qcow2格式
[root@node1 ~]$ qemu-img info /export/images/Centos6-overlay1.qcow2
image: /export/images/Centos6-overlay1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.8M
cluster_size: 65536
backing file: /vmkvm_exp/centos6-disk0.qcow2
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

#此时虚拟机的磁盘文件指向创建的外置快照
[root@node1 ~]$ virsh domblklist Centos6 
Target     Source
------------------------------------------------
vda        /export/images/Centos6-overlay1.qcow2
hda        -

创建完成后,可以原父磁盘文件进行备份。
备份结束后,将快照差分盘数据回写入母盘。

blockcommit <domain> <path> [--bandwidth <number>] [--base <string>] [--shallow] [--top <string>] [--active] [--delete] [--wait] [--verbose] [--timeout <number>] [--pivot] [--keep-overlay] [--async] [--keep-relative] [--bytes]
  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--path] <string>  fully-qualified path of disk
    --bandwidth <number>  bandwidth limit in MiB/s
    --base <string>  path of base file to commit into (default bottom of chain)
    --shallow        use backing file of top as base
    --top <string>   path of top file to commit from (default top of chain)
    --active         trigger two-stage active commit of top file
    --delete         delete files that were successfully committed
    --wait           wait for job to complete (with --active, wait for job to sync)
    --verbose        with --wait, display the progress
    --timeout <number>  implies --wait, abort if copy exceeds timeout (in seconds)
    --pivot          implies --active --wait, pivot when commit is synced
    #快照写入母盘后,虚拟机磁盘文件指向母盘,抛弃子盘
    --keep-overlay   implies --active --wait, quit when commit is synced
    --async          with --wait, don't wait for cancel to finish
    --keep-relative  keep the backing chain relatively referenced
    --bytes          the bandwidth limit is in bytes/s rather than MiB/s

virsh $  blockcommit Centos6 vda --active --pivot --verbose 

#写入成功且pivot后,虚拟机磁盘变为母盘
[root@node1 ~]$ virsh domblklist Centos6 
Target     Source
------------------------------------------------
vda        /vmkvm_exp/centos6-disk0.qcow2
hda        -

删除外置快照,kvm不支持删除外置快照文件,需要删除外置快照metadata信息后,手工删除外置快照文件

#删除metadata
virsh $  snapshot-delete Centos6 guest-state1 --metadata
#删除磁盘文件
[root@node1 ~]$ rm -f /export/images/Centos6-overlay1.qcow2 

7 qemu-img磁盘快照

通过qemu-img命令创建快照链只能在虚拟机关机状态下运行,否则会造成vm的硬盘文件损坏。

7.1 虚拟磁盘快照查询

使用snapshot -l查询

qemu-img snapshot -l 硬盘文件名

使用info查询

qemu-img info 硬盘文件名

7.2 创建虚拟磁盘快照

qemu-img snapshot -c snapshot的tag 硬盘文件名

7.3 虚拟磁盘快照回滚

qemu-img shapshot -a snapshot的tag 硬盘文件名

7.4 虚拟磁盘快照删除

qemu-img shapshot -d snapshot的tag 硬盘文件名
上一篇下一篇

猜你喜欢

热点阅读