GitLab 如何确保生成的备份档案体现应用程序的干净状态?

GitLab 如何确保生成的备份档案体现应用程序的干净状态?

当您要求正在运行的 GitLab 实例使用以下命令生成完整备份存档时gitlab-rake gitlab:backup:create

  • GitLab 是否执行任何操作来冻结应用程序状态?
  • 生成体现不一致状态的技术上可行的备份是否存在风险?

详细地:

  • 如果在生成备份时推送新的提交,会发生什么情况?
  • 一般来说,如果在备份期间发起任何修改,会发生什么?
  • 是否有任何缓存可以将更改排队应用于数据库或写入文件/存储库?

目前我不知道当您存档正在修改的存储库或在运行事务的数据库上完成备份时会发生什么?


今天看了下GitLab的备份代码gitlab.com/gitlab-org/gitlab-ce/tree/master/lib/backup但找不到任何能解答我问题的线索。我不会使用 Ruby 编写代码,所以这对我没有帮助......

GitLab 只需tar对要备份的文件运行命令。

在 GitLab 文档中docs.gitlab.com/ee/raketasks/backup_restore.html#backup-strategy-option据称:

当 tar 读取数据时发生更改时,可能会发生读取时文件更改的错误,并导致备份过程失败。为了解决这个问题,8.17 引入了一种称为 copy 的新备份策略。该策略在调用 tar 和 gzip 之前将数据文件复制到临时位置,从而避免错误。

STRATEGY=copy参数使gitlab-rake gitlab:backup:create运行rsync -a命令在使用 创建档案之前复制所有文件tar

根据我对文档的理解,文档中说,使用该copy策略,GitLab 永远不会生成技术损坏的档案,也不会在创建档案时失败。我假设此策略可确保生成的档案可恢复,但数据的一致性状态如何?

我们能否确保备份档案体现 GitLab 实例的一致/干净的快照状态?

我在文档中找不到有关这方面的任何信息。


我确实想不间断地备份 GitLab。

我知道我可以停止 GitLab 几秒钟并对 LVM 卷或文件系统进行快照,而不是使用集成备份机制,但我不想中断 GitLab。

您可以运行 GitLab 的备份,中断除postgresql一项服务之外的所有服务,因此使用 GitLab 的集成机制备份时不会发生任何修改,但您仍然必须在一段时间内向用户关闭该服务。


奖励:我的问题也适用于对 LVM 卷或文件系统进行快照!

答案1

关于对 Gitlab 进行一致性备份有很多问题,但我还没有找到好的答案。

一些问题:

我可以引用你@SørenLøvborg的回答似乎是正确的:

存储库本身使用 进行备份git bundle,因此它们也应该是安全的。上传的是简单文件并且只写入一次,因此也不应该出现问题。数据库可能与存储库和文件不完全同步,但不会导致数据丢失。总而言之,在 GitLab 运行时进行备份看起来是完全安全的,即使它不是原子的。


编辑:您已经收到Gitlab 团队

相关内容