上一次我们建立了一个强大的备份系统 ,现在我们将研究如何监视备份集。 我们需要验证备份集是否已正确清理(这称为删除策略)以及它们是否一致(称为一致性策略)。
备份集可以包含多个文件集。 文件集是备份文件的集合,位于备份集的同一源目录下。
以下YAML配置显示了备份集和文件集的示例:
backup-set-configs:
- name: Mikrotik Backups
uri: /volume1/backupftp/mikrotik_backup
type: DISK
file-set:
- name: fe-prodnet01 export
filterPattern: '.*fe-prodnet01-.*\.rsc'
- name: fe-prodnet11 backup
filterPattern: '.*fe-prodnet11.*\.backup'
- name: Exchange Backups
uri: /volume1/pex/backups
type: DISK
file-set:
- name: Exchange psts
filterPattern: '.*\.pst'
groupByPattern: '.*\/backups\/(\d{4}-\d{2}-\d{2})\/'
groupByPatternHasDatePattern: 'yyyy-MM-dd'
deletePolicy:
deleteEmptyDirectories: true
- name: Proxmox Backups
uri: /volume1/proxmox/dump
type: DISK
file-set:
- name: QEMU backups
filterPattern: '.*vzdump-qemu.*\.vma\.lzo'
groupByPattern: 'proxmox/dump/vzdump-qemu-(\d+)-'
consistencyPolicy:
numberOfBackupsRequired: 3
- name: LXC backups
filterPattern: '.*vzdump-lxc.*\.tar\.lzo'
groupByPattern: 'proxmox/dump/vzdump-lxc-(\d+)-'
consistencyPolicy:
numberOfBackupsRequired: 3
第一个备份集位于/volume1/backupftp/mikrotik_backup
目录下,并包含两组文件。 当同一目录中有多个服务器的文件时,通常将以这种方式进行配置。 如第三个示例所示,还有另一种解决方案按服务器名称(或任何标识符)分组。
文件集具有name
,该name
只是GUI和filterPattern
的逻辑名称。 无论目录树有多深,此模式都将过滤备份集路径下匹配的所有文件。
删除策略和一致性策略将应用于文件,按修改日期(在磁盘上)降序排列。
第二个备份集用于交换备份。 请注意,在此示例中,我们如何使用groupByPattern
。 这将通过groupByPattern
所有过滤的文件名(来自filterPattern
) groupByPattern
。 在这种情况下, groupByPattern
也是日期模式,由groupByPatternHasDatePattern
指定。
我们将按照指定的日期模式最终得到一个按日期分组的文件集,并且删除策略和一致性策略将按顺序将删除和一致性策略应用于匹配的文件(分组日期)。
第三个备份集(用于Proxmox备份)将文件存储在“转储”目录中,并混合两种类型的备份。 QEMU和LXC备份分为两个文件集,并按(\d+)
指定的VMID(虚拟机标识符)分组。 由于groupByPattern
是十进制值而不是日期,因此删除和一致性策略将按修改日期(在磁盘上)以降序排列的方式应用于匹配的文件。
请注意,我们并不总是指定deletePolicy
或consistencyPolicy
,因为我们在这两个政策的合理的默认值。 它们都将针对每个备份集和其中的每个文件集执行。
deletePolicy
具有两个配置设置:
-
deleteEmptyDirectories
:默认情况下处于禁用状态,当您有一个groupByPattern
作为日期值时,此设置很有用。 当超过保留策略时,该目录中的所有文件都将被删除,从而为您留下一个空的“日期”目录。 在这种情况下,您可以指定deleteEmptyDirectories
。 该目录只有在确实为空的情况下才会被清理(以防其他日志文件徘徊)。 -
deleteNumberOfBackupsLargerThan
:默认值为30。对于每日备份,这类似于30天。 如果您每周备份一次,则表示保留政策为30周。 当然,无论天数如何,都可以根据需要更改此值。 它表示需要在磁盘上保留多少个文件集。
consistencyPolicy
具有三个配置旋钮:
-
numberOfBackupsRequired
:默认值为7。即使我们在deletePolicy
保留30个文件集,我们也只需要7个文件集即可通过一致性。 如果是每日备份,则意味着我们至少需要备份7天才能使文件集保持一致。 -
minimumFileSizeRequired
:默认值为1。这意味着文件集中的每个文件必须至少为1个字节或更大。 这可以确保至少有东西在文件中。 您可以将其设置为更大,或将其设置为0以禁用该检查。 -
numberOfDaysOfBackupsRequired
:默认值为7。这将检查文件集中的最后一个文件(按日期或修改时间降序排列)至少比7天前更新。
组合所有设置可确保:
- 文件集包含足够新的文件。
- 文件集的文件中至少写入了一些内容。
- 我们有一组跨一定时间的文件,并且该时间不超过或不影响删除策略。
如果任何检查失败,则文件集将失败。 如果文件集失败,则备份集也会失败,因此,全局状态也将失败。
一致性策略和删除策略的实现都扩展了相同的抽象类AbstractFileVisitor
,而后者又扩展了SimpleFileVisitor<Path>
。 该FileVisitor
将循环备份集URI中的所有子目录两次,首先执行删除策略,然后执行一致性策略。
然后, AbstractFileVisitor
将过滤与过滤器匹配的所有子目录中的所有文件,并将它们放置在地图结构中。
为了完成此过程,将循环映射结构,并根据策略规则删除和验证文件。
您是否对我们的实施感到好奇? 您是否希望分叉并修改我们的代码? 在评论中大声喊叫,我们可以谈谈我们解决方案的开源。
改进措施
可以随时进行改进,这是我们头脑中的一些事情:
- 在备份断开连接之前,在源上添加MD5校验和。 在我们的应用程序中检查那些MD5校验和,以确保我们的备份随时间推移保持一致。
- 在我们的应用程序的内存中解析档案(.zip,.tar,.gz),遍历文件条目,看看是否到达档案的末尾; 这应该排除损坏的.zip文件。
- 解析邮箱备份并遍历条目以查看存档是否未损坏。
- 将数据库备份发送到检查数据库是否可以还原的基础结构。
- 添加了远程检查备份的功能(例如,通过SSH登录到远程服务器,并检查那里的备份是否也可用并保持一致),对于某些异地备份方案很有用。
- 添加通过API检查备份的功能(例如,查看第三方系统上托管的AWS备份或Proxmox备份的状态)。
翻译自: https://www.javacodegeeks.com/2018/05/monitoring-and-managing-your-backup-system.html