如何在异地连续/增量备份 zfs 池?
我认识到send/receive
over ssh 是一种方法,但是它需要手动管理快照。
我发现了一些工具,但大多数不再受支持。
一个看起来很有前途的工具是https://github.com/jimsalterjrs/sanoid但是我担心非广为人知的工具可能弊大于利,因为它可能会损坏/删除数据。
如何执行连续/增量 zfs 备份?
如何在异地连续/增量备份 zfs 池?
我认识到send/receive
over ssh 是一种方法,但是它需要手动管理快照。
我发现了一些工具,但大多数不再受支持。
一个看起来很有前途的工具是https://github.com/jimsalterjrs/sanoid但是我担心非广为人知的工具可能弊大于利,因为它可能会损坏/删除数据。
如何执行连续/增量 zfs 备份?
ZFS是一个令人难以置信的文件系统,可以解决我的许多本地和共享数据存储需求。
虽然,我确实喜欢尽可能使用集群 ZFS的想法,但有时它不切实际,或者我需要存储节点在地理上的一些分离。
我的用例之一是 Linux 应用服务器上的高性能复制存储。例如,我支持一个传统软件产品,该产品受益于低延迟 NVMe SSD 驱动器的数据。该应用程序有一个应用程序级镜像选项,可以复制到辅助服务器,但它通常不准确,并且是 10 分钟的RPO。
我已经通过拥有一个可以是本地、远程或两者的辅助服务器(也在类似或不同的硬件上运行 ZFS)解决了这个问题。通过结合下面详述的三个实用程序,我精心设计了一个复制解决方案,它为我提供了连续复制、深度快照保留和灵活的故障转移选项。
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
只是启用定期 ZFS 文件系统级别快照的便捷工具。我通常在生产量上按照以下时间表运行:
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
该程序可以运行 ZFS 文件系统的临时快照/复制到次要目标。我只使用产品的同步部分。
假设server1和server2 ,从server2运行简单命令以从server1提取数据:
监控- https://mmonit.com/monit/
Monit 是一个极其灵活的作业调度器和执行管理器。默认情况下,它以 30 秒的间隔工作,但我修改配置以使用 15 秒的基本时间周期。
每 15 秒(1 个周期)运行上述复制脚本的示例配置
这很容易通过配置管理实现自动化和添加。通过在 Monit 中包装快照/复制的执行,您可以获得集中状态、作业控制和警报(电子邮件、SNMP、自定义脚本)。
结果是我的服务器具有多个月的快照以及许多回滚点和保留点:https ://pastebin.com/zuNzgi0G - 另外,一个连续滚动的 15 秒原子副本:
# monit status
你有两种不同的方法可以做到这一点:
rsync
or的工具Bacula
。在那里,您已经测试并且(希望)稳定的大型软件,可以针对大型部署进行定制,即使您从 ZFS 切换到该软件也可以使用send/recv
。这可以是您自己的解决方案、来自 Github 等人的各种脚本或扩展脚本,或者是功能更丰富的工具,如 Sanoid 或ZnapZend(带有 mbuffer 支持和保留计划的发送/接收)。在这种情况下,您很可能不会找到任何大型的“企业”(消极意义上的)解决方案,而是只执行单一任务并且可以与其他工具组合以满足您的特定设置的工具。一般来说,我只会信任源代码可用的工具,并且我会尽可能保持它的简单性。如果使用
send/recv
,则无需过多管理,只需在远程端快照n传输和建立成功后,删除本地端快照n-1即可。您可以按照自己喜欢的方式拆分传输,它甚至可以是异步的(不必立即接收快照),如果您只是遵守铁规则,即您只能发送本地当前/新快照和本地先前快照之间的差异,并且本地先前的快照是远程端的最新快照(直到备份完成并重置所有内容)。
现在我想到了,您可能可以在状态机中对其进行编码,然后确保不会出现任何意外情况。
还要检查 ZFS 自动备份。它易于使用且非常强大。与提到的其他解决方案相比,它具有更多功能:https ://github.com/psy0rz/zfs_autobackup