当向 Gitlab 支持人员询问如何在本地 Gitlab 上进行 3TB 备份时,他们回答使用我们的生成 tarball 的工具。
这对我来说在各个层面都是错误的。这个 tarball 包含 postgres 转储、docker 图像、repo 数据、GIT LFS 等配置等等。将 TB 的静态数据与 KB 非常动态的数据一起备份并不正确。然后是问题,我们想每小时做一次备份。
问题
我真的很想从其他人那里知道他们是如何做到的,以获得一致的备份。
如果这是解决方案的一部分,Linux 上的 ZFS 对我来说会很好。
我会查看您正在备份的内容,并可能使用“多路径”方法。例如,您可以通过在备份服务器上不断运行 Git 拉取来备份 Git 存储库。这将只复制差异,并为您留下所有 Git 存储库的第二个副本。大概您可以使用 API 检测到新的存储库。
并使用“内置”备份程序来备份问题等。我怀疑 3TB 来自这部分,因此您可以以很少的成本经常进行备份。您还可以使用带复制的热备用设置 PostgreSQL 数据库。
您的 3TB 可能来自 Docker 注册表中的容器映像。你需要备份这些吗?如果是这样,那么可能有更好的方法来解决这个问题。
基本上,我建议您真正查看构成备份的内容并备份各个部分的数据。
甚至 GitLab 的备份工具也可以选择包含/排除系统的某些部分,例如 Docker Registry。
对于如此短的备份间隔时间(1 小时),您最好的选择是依赖文件系统级别的快照和
send/recv
支持。如果在您的环境中使用ZoL不是问题,我强烈建议您使用它。ZFS 是一个非常健壮的文件系统,您会非常喜欢它提供的所有附加功能(例如:压缩)。与 结合使用时
sanoid/syncoid
,它可以提供非常强大的备份策略。主要缺点是它不包含在主线内核中,因此您需要单独安装/更新它。或者,如果你真的需要限制自己使用包含主线的东西,你可以使用 BTRFS。但一定要了解它的(许多)缺点和皮塔饼。
最后,另一种解决方案是使用
lvmthin
定期备份(例如:withsnapper
),依靠第三方工具(例如:bdsync
,blocksync
等)仅复制/发送增量。另一种方法是拥有两台复制的机器(通过
DRBD
),您可以在其中通过lvmthin
.