如何大规模备份 Gitlab?

如何大规模备份 Gitlab?

当向 Gitlab 支持人员询问如何在本地 Gitlab 上进行 3TB 备份时,他们回复使用我们的工具生成一个 tarball。

在我看来,这在各个层面上都是错误的。这个 tarball 包含 postgres 转储、docker 镜像、repo 数据、GIT LFS 等配置等等。备份 TB 级静态数据和 KB 级动态数据似乎不太合适。然后出现了一个问题,我们想要每小时备份一次。

问题

我真的很想向其他人了解他们是如何做到这一点的,以获得一致的备份。

如果这是解决方案的一部分,那么 Linux 上的 ZFS 对我来说就没问题。

答案1

对于如此短的备份间隔(1 小时),最好的办法是依赖文件系统级快照 send/recv支持。

如果使用佐利在您的环境中没有问题,我强烈建议使用它。ZFS 是一个非常强大的文件系统,您会非常喜欢它提供的所有额外功能(例如:压缩)。当与sanoid/syncoid,它可以提供非常强大的备份策略。主要缺点是它不包含在主线内核中,因此您需要单独安装/更新它。

或者,如果你真的需要限制自己使用主线包含的内容,你可以使用 BTRFS。但一定要了解它的(许多)缺点和皮塔饼

最后,另一种解决方案是使用lvmthin进行定期备份(例如:使用snapper),依靠第三方工具(例如:bdsyncblocksync等)仅复制/运送增量。

另一种方法是复制机器(通过DRBD) 您可以通过 拍摄独立快照lvmthin

答案2

我会检查你正在备份的内容,并可能使用“多路径”方法。例如,你可以通过在备份服务器上不断运行 Git pull 来备份 Git 存储库。这样只会复制差异,而你拥有所有 Git 存储库的第二份副本。大概你可以使用 API 检测新的存储库。

并使用“内置”备份程序来备份问题等。我怀疑 3TB 是否来自此部分,因此您可以以极低的成本经常进行备份。您还可以使用带复制的热备用设置 PostgreSQL 数据库。

您的 3TB 可能来自 Docker 注册表中的容器映像。您需要备份它们吗?如果是,那么可能有更好的方法。

基本上,我建议真正了解备份的组成,并对数据进行各部分备份。

甚至 GitLab 的备份工具也有包含/排除系统某些部分(例如 Docker Registry)的选项。

相关内容