我正在使用 Bacula 远程连接到服务器(在不同的 DC 中)并进行备份。
由于速度限制以及白天不允许办公室网络陷入瘫痪,我认为同时对我们的 4 台服务器进行完整备份是不可行的,因此,我们可以拆分出完整备份,以便每周轮流对一台服务器进行完整备份。
要求 1 - 完整备份传输的负载分散
如果我们有 4 台服务器,我们希望轮流执行完整备份,如下所示:
- myhost1 => 每月 1 日全量,其他时间增量。
- myhost2 => 每月 8 日全额支付,其他时间递增。
- myhost3 => 每月 15 日全额支付,其他时间递增。
- myhost4 => 每月 22 日全额支付,其他时间递增。
给定任何特定日期,我们希望保留完整备份,以及该日期之前的最后一次完整备份。从现在到最近一次完整备份的所有增量都应保留。
要求 2 - 完整备份和增量备份位于不同的池中
我有两个存储池,一个用于增量,一个用于完整,我们需要告诉 Bacula,如果增量快照找不到以前的完整快照,则使用 pool-full,否则使用 pool-inc。
要求 3 - 可扩展性
如果我想在周六和周日轮换服务器,那么将来可能会有更多的服务器(每月在 [1,2]、[8,9]、[15,16]、[22,23] 等天提供最多 8 个计划)。有没有更简单的方法来定义作业,因为我可以看到它会变成一个很大的配置文件。
答案1
就你的问题的各个要点而言:
要求 1 - 负载分散
您需要根据您的环境来确定这一点——“合理”取决于很多因素(有多少台机器、多少数据、您要备份到什么样的媒体、您有多少可用带宽、您的老板愿意为备份分配多少钱、您的数据中心是否有可以训练来旋转磁带的天花板猫……)
您可能还想了解“合成完整备份”(Bacula 称它们为VirtualFull
备份)- 这些可以生成“完整”备份,而无需通过合并您在最近完整备份中备份的数据以及所有增量/差异更改来从客户端提取数据。
要求 2 - 备用池中的完整和增量
您似乎还没有发现FullPool
、IncrementalPool
和DifferentialPool
配置指令。 查阅 Bacula 手册了解详细信息。
它们是您根据作业类型将备份拆分到不同池中所需要的。
要求 3 - 可扩展性
首先,如果你正在使用 Bacula 并做任何中等复杂的事情,现在就放弃一个小的配置文件。director 配置将会很大。
您正在使用的JobDef
指令Schedule
是处理事情的正确方法,根据需要添加定义以满足您的要求。
如果我是你,我不会使用备份日期作为命名约定 - 将您的计划(和作业默认值)称为“A 组”、“B 组”等(或同样通用的名称)。
记录每个服务器所在的备份组,这样您就可以通过将服务器从一个组移动到另一个组来轻松重新平衡备份负载。
当然,您可以使用基于日期的名称来执行此操作,但我发现将备份组视为一个抽象概念更容易。此外,如果Group A
正在渗入 的Group B
备份时间范围,我可以通过更改计划定义将所有内容Group B
向前移动一天,而不必更改其名称。