备份是任何明智的IT部署都必须的,而Proxmox VE提供了一个完全集成的解决方案,使用每种存储和每种客户系统类型的功能。这允许系统管理员通过备份一致性和客户系统停机之间的模式选项进行微调。
Proxmox VE备份总是完全备份-包含VM/CT配置和所有数据。可以通过GUI或vzdump命令行工具启动备份。
Backup Storage
在运行备份之前,必须定义备份存储。关于如何添加存储,请参考存储文档。备份存储必须是文件级存储,因为备份以常规文件的形式存储。在大多数情况下,使用NFS服务器是存储备份的好方法。您可以稍后将这些备份文件保存到磁带机中,以便进行离线归档。
Scheduled Backup
对于可选节点和客户系统,可以安排备份任务在特定的日期和时间自动执行。计划备份的配置是在GUI中的数据中心级别完成的,这将在/etc/cron.d/vzdump.中生成一个cron条目
16.1、备份模式
有几种方法可以提供一致性(选项模式),这取决于客户机类型。
虚拟机备份方式:
stop mode
备份一致性高,虚拟机运行停机时间短。它的工作方式是依次关闭VM,然后运行一个后台Qemu进程来备份VM数据。备份启动后,虚拟机进入全量运行模式。使用实时备份特性保证一致性。
suspend mode
出于兼容性考虑,使用快照模式时,虚拟机会挂起。暂停虚拟机会导致更长的停机时间,但不能提高数据一致性,因此建议使用快照方式。
snapshot mode
这种模式提供了最低的操作停机时间,但代价是不一致风险很小。它的工作原理是执行Proxmox VE实时备份,在虚拟机运行时复制数据块。如果启用了来宾代理(agent:1)并正在运行,它将调用guest-fsfreeze-freeze和guest-fsfreeze-thaw来提高一致性。
有关QemuServer的Proxmox VE实时备份的技术概述可以在这里在线找到。
请注意
Proxmox VE live backup在任何存储类型上都提供类似快照的语义。它不要求底层存储支持快照。另外请注意,由于备份是通过后台Qemu进程完成的,当Qemu正在读取VM磁盘时,一个已停止的VM将显示为正在运行一小段时间。虚拟机未启动,只读取磁盘。
容器的备份模式:
stop mode
在备份期间停止容器。这可能会导致很长的停机时间。
suspend mode
这种模式使用rsync将容器数据复制到一个临时位置(请参阅选项——tmpdir)。然后容器被挂起,第二个rsync复制更改的文件。之后,容器再次启动(恢复)。这将使停机时间最小化,但需要额外的空间来保存容器副本。
当容器在本地文件系统上,而备份的目标存储是NFS/CIFS服务器时,您应该将——tmpdir设置为也驻留在本地文件系统上,因为这将导致许多倍的性能改进。如果备份存储是NFS服务器,您需要使用acl以挂起方式备份本地容器,则还需要使用本地tmpdir。
snapshot mode
这种模式使用底层存储的快照功能。首先,容器将被挂起以确保数据一致性。容器卷的临时快照将被创建,快照内容将被归档到tar文件中。最后,再次删除临时快照。
请注意
快照模式要求所有备份的卷都在一个支持快照的存储上。使用backup=no挂载点选项,可以将各个卷从备份中排除(因此也就排除了这个要求)。
请注意
默认情况下,备份中不包括根磁盘挂载点以外的其他挂载点。对于卷挂载点,可以设置Backup选项,将挂载点包含在备份中。设备和绑定挂载永远不会备份,因为它们的内容是在Proxmox VE存储库之外管理的。
16.2、备份文件名
例如,vzdump的新版本将客户类型和备份时间编码到文件名中
vzdump-lxc-105-2009_10_09-11_04_43.tar
这样就可以在同一个目录中存储多个备份。您可以限制使用各种保留选项保留的备份数量,请参阅下面的备份保留第16.5节。
16.3、备份文件压缩
备份文件的压缩算法有:lzo 、gzip 或zstd 。
目前,Zstandard (zstd)算法是这三种算法中速度最快的。与lzo和gzip相比,zstd的另一个优点是多线程。Lzo和gzip的使用更为广泛,通常默认安装。
您可以安装pigz 作为gzip的临时替代品,以由于多线程而提供更好的性能。对于pigz和zstd,线程/核的数量可以调整。请参阅下面16.7节的配置选项。
备份文件名的扩展名通常可用于确定用于创建备份的压缩算法。
.zst | Zstandard (zstd) compression |
---|---|
.gz or .tgz | gzip compression |
.lzo | lzo compression |
如果备份文件名不是以上述文件扩展名之一结束的,那么它没有被vzdump压缩。
16.4、备份加密
对于Proxmox备份服务器存储,您可以选择设置备份的客户端加密,请参阅相应的部分。部分7.8.3
16.5、备份保留
使用prune-backups选项,您可以灵活地指定希望保留哪些备份。以下保留选项是可用的:
keep-all
保留所有备份。如果为true,则不能设置其他选项。
keep-last
保留最后的
keep-hourly
保留最近
keep-daily
保留最近
keep-weekly
保留最近
请注意
一周从星期一开始,到星期天结束。该软件使用ISO周日期系统,并正确处理年底的周。
keep-monthly
保留最近
keep-yearly
保留最近
保留选项按照上面给出的顺序进行处理。每个选项只涵盖其时间段内的备份。下一个选项不考虑已经覆盖的备份。它将只考虑旧的备份。
指定要使用的保留选项作为逗号分隔的列表,例如:
# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
虽然您可以通过 prune-backups
直接传递给vzdump,但通常更明智的做法是在存储级别上配置设置,这可以通过web界面完成。
请注意
旧的maxfiles选项已弃用,应该用keep-last替换,或者用keep-all替换(maxfiles为0表示无限保留)。
16.5.1、修剪模拟器
可以使用Proxmox备份服务器文档的prune模拟器来研究不同保留选项对不同备份计划的影响。
16.5.2、保留设置示例
备份频率和旧备份的保留可能取决于数据更改的频率,以及在特定工作负载中旧状态的重要性。当备份作为公司的文档存档时,可能还会有关于备份必须保存多长时间的法律要求。
对于本例,我们假设您每天都进行备份,保留期为10年,备份之间的时间间隔逐渐增长。
keep-last=3
——即使只进行每日备份,管理员也可能想在大的升级之前或之后创建一个额外的备份。设置keep-last可以确保这一点。
没有设置keep-hour
——对于每日备份,这是不相关的。您已经使用keep-last完成了额外的手动备份。
keep-daily=13
——加上keep-last,它至少覆盖一天,这样可以确保您有至少两周的备份。
keep-weekly=8
——确保你有至少两个月的每周备份。
keep-monthly=11
——加上之前的keep设置,可以确保每月备份至少一年。
keep-year =9
——这是为了长期存档。当您使用先前的选项覆盖当前年份时,您可以将其余选项设置为9,使您的覆盖期限至少为10年。
我们建议您使用高于您的环境所要求的最低限度的保留时间;如果您发现它过高,您总是可以减少它,但是一旦删除了备份,您就不能重新创建备份。
16.6、恢复
备份存档可以通过Proxmox VE web GUI或以下CLI工具恢复:
pct恢复
集装箱恢复实用工具
qmrestore**
虚拟机恢复实用程序
具体操作请参见相关手册。
16.6.1、带宽限制
恢复一个或多个大型备份可能需要大量资源,特别是从备份存储读取数据和向目标存储写入数据所需的存储带宽。这可能会对其他虚拟客户机产生负面影响,因为对存储的访问可能会发生拥塞。
为了避免这种情况,您可以为备份作业设置带宽限制。Proxmox VE为恢复和归档实现了两种限制:
per-restore limit:表示从备份存档读取的最大带宽
per-storage write limit:表示用于写入特定存储的最大带宽
读限制间接影响写限制,因为写不能超过读。较小的每个作业限制将覆盖较大的每个存储限制。如果有“数据”,更大的每个作业限制只会覆盖每个存储限制。在受影响的存储上分配权限。
您可以使用restore CLI命令中的’——bwlimit
请注意
可以对bwlimit参数使用“0”来禁用特定恢复作业的所有限制。如果您需要尽可能快地恢复一个非常重要的虚拟客户,这可能会很有帮助。(需要的数据。分配'存储权限)
大多数时候,你的存储的一般可用带宽保持不变,因此我们实现了为每个配置的存储设置默认带宽限制的可能性,这可以通过以下方式实现:
# pvesm set STORAGEID --bwlimit restore=KIBs
16.7、配置
全局配置文件存放在/etc/vzdump.conf文件中。该文件使用一个简单的冒号分隔键/值格式。每行有以下格式:
OPTION: value
文件中的空行会被忽略,以#字符开头的行会被视为注释,也会被忽略。该文件中的值默认使用,可以在命令行上覆盖。
我们目前支持以下选项:
bwlimit:
限制I/O带宽(每秒千字节)。
compress: <0 | 1 | gzip | lzo | zstd> (default = 0)
压缩转储文件。
dumpdir:
将生成的文件存储到指定的目录。
exclude-path:
排除某些文件/目录(shell globs)。
ionice:
设置CFQ ionice优先级。
lockwait:
等待全局锁的最大时间(分钟)。
mailnotification:
指定发送邮件的时间
mailto:
应该接收电子邮件通知的电子邮件地址列表,以逗号分隔。
maxfiles:
每个客户系统的最大备份文件数。
mode:
备份模式。
pigz:
当N>0时,使用pigz代替gzip。N=1使用一半内核,N>1使用N作为线程数。
pool:
备份指定池中包含的所有已知客户系统。
prune-backups: [keep-all=<1|0>] [,keep-daily=
使用这些保留选项而不是存储配置中的保留选项。
keep-all=
保留所有备份。当为true时与其他选项冲突。
keep-daily=
保留最近
keep-hourly=
保留最近
keep-last=
保留最后的
keep-monthly=
保留最近
keep-weekly=
保留最近
keep-yearly=
保留最近
remove:
如果有多于maxfiles的备份文件,请删除旧的备份文件。
script:
使用指定的钩子脚本。
stdexcludes:
排除临时文件和日志。
stopwait:
等待客户系统停止的最大时间(分钟)。
storage:
将结果文件存储到此存储。
tmpdir:
将临时文件存储到指定的目录。
zstd:
Zstd线程。N=0使用可用核的一半,N>0使用N作为线程数。
vzdump.conf配置示例
tmpdir: /mnt/fast_local_disk
storage: my_backup_storage
mode: snapshot
bwlimit: 10000
16.8、挂钩脚本
你可以使用选项—script指定一个钩子脚本。在备份过程的各个阶段都会调用这个脚本,并设置相应的参数。您可以在文档目录(vzdump-hook-script.pl)中找到一个示例。
16.9、文件排除
请注意
此选项仅对容器备份可用。
默认情况下,vzdump跳过以下文件(使用选项—stdexcludes 0禁用)
/tmp/?*
/var/tmp/?*
/var/run/?*pid
您也可以手动指定(附加的)排除路径,例如:
# vzdump 777 --exclude-path /tmp/ --exclude-path ’/var/foo*’
不包括目录/tmp/和任何名为/var/foo、/var/foobar等的文件或目录。
不以/开头的路径不会锚定到容器的根目录,而是相对于任何子目录进行匹配。例如:
# vzdump 777 --exclude-path bar
不包括任何名为/bar、/var/bar、/var/foo/bar等的文件或目录,但不包括/bar2。
配置文件也存储在备份归档文件(在。/etc/vzdump/)中,并将被正确地恢复。
16.10、示例
简单地转储guest 777 -没有快照,只是将guest私有区域和配置文件归档到默认转储目录(通常是/var/lib/vz/dump/)。
# vzdump 777
使用rsync和挂起/恢复创建快照(最小化停机时间)。
# vzdump 777 --mode suspend
备份所有的客户系统,并发送通知邮件给根用户和管理员。
# vzdump --all --mode suspend --mailto root --mailto admin
使用快照模式(不停机)和非默认转储目录。
# vzdump 777 --dumpdir /mnt/backup --mode snapshot
备份多个客户机(有选择地)
# vzdump 101 102 103 --mailto root
支援101号和102号外的所有客人
# vzdump --mode suspend --exclude 101,102
将集装箱恢复到新的CT 600上
# pct restore 600 /mnt/backup/vzdump-lxc-777.tar
恢复QemuServer虚拟机到虚拟机601
# qmrestore /mnt/backup/vzdump-qemu-888.vma 601
使用管道,将现有的容器101克隆为具有4GB根文件系统的新容器300
# vzdump 101 --stdout | pct restore --rootfs 4 300 -