为了实现灾难恢复目的,我在不同的提供商处运行了 2 个 LAMP Web 服务器 - 一个高性能实时服务器和一个低功率备份服务器。
目前,我每 4 小时将所有数据从实时服务器 rsync 到备份服务器一次。
这可以正常工作,但是在 rsync 找出哪些文件已发生更改时会导致系统负载激增。
由于所有网站也都位于 git 存储库中,因此我想知道 git push 是否是一种更好的备份技术。
我必须在 git repo 中包含实时上传文件夹;然后备份过程将是:
live$ git add .
live$ git commit -a -m "{data-time} snapshot"
live$ git push backup live_branch
然后在备份服务器上有一个提交后挂钩,用于在每次推送时进行检查。
每个网站的大小从 50M 到 2GB 不等。我最终会得到大约 50 个独立的 git 存储库。
这是一个比 rsync“更好”的解决方案吗?
- git 是否可以更好地计算哪些文件发生了变化?
- git push 比 rsync 更高效吗
- 我忘记了什么?
谢谢!
---- 来自一些对比测试的数据 ------
1)52MB 文件夹然后添加一个新的 500k 文件夹(主要是文本文件)
同步
sent 1.47K bytes received 285.91K bytes
total size is 44.03M speedup is 153.22
real 0m0.718s user 0m0.044s sys 0m0.084s
git
Counting objects: 38, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (37/37), done.
Writing objects: 100% (37/37), 118.47 KiB, done.
Total 37 (delta 3), reused 0 (delta 0)
real 0m0.074s user 0m0.029s sys 0m0.045s
2)1.4G文件夹然后添加一个18M的新文件夹(主要是图片)
同步
sent 3.65K bytes received 18.90M bytes
total size is 1.42G speedup is 75.17
real 0m5.311s user 0m0.784s sys 0m0.328s
git
Counting objects: 108, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (106/106), done.
Writing objects: 100% (107/107), 17.34 MiB | 5.21 MiB/s, done.
Total 107 (delta 0), reused 0 (delta 0)
real 0m15.334s user 0m5.202s sys 0m1.040s
3)52M文件夹然后添加一个新的18M文件夹(主要是图像)
同步
sent 2.46K bytes received 18.27M bytes 4.06M bytes/sec
total size is 62.38M speedup is 3.41
real 0m4.124s user 0m0.640s sys 0m0.188s
git
Counting objects: 108, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (106/106), done.
Writing objects: 100% (107/107), 17.34 MiB | 5.43 MiB/s, done.
Total 107 (delta 1), reused 0 (delta 0)
real 0m6.990s user 0m4.868s sys 0m0.573s
4)1.4G文件夹然后添加一个500k的新文件夹(主要是文本)
同步
sent 2.66K bytes received 916.04K bytes 612.47K bytes/sec
total size is 1.42G speedup is 1547.14
real 0m1.191s user 0m0.180s sys 0m0.268s
git
Counting objects: 49, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (48/48), done.
Writing objects: 100% (48/48), 177.90 KiB, done.
Total 48 (delta 3), reused 0 (delta 0)
real 0m1.776s user 0m0.390s sys 0m0.497s
5)1.4G文件夹-无变化
同步
sent 1.72K bytes received 716.44K bytes 287.26K bytes/sec
total size is 1.42G speedup is 1979.18
real 0m1.092s user 0m0.168s sys 0m0.272s
git
nothing to commit (working directory clean)
real 0m0.636s user 0m0.268s sys 0m0.348s
5)52M 文件夹 - 无变化
同步
sent 528 bytes received 88.40K bytes 59.29K bytes/sec
total size is 62.38M speedup is 701.41
real 0m0.779s user 0m0.044s sys 0m0.144s
git
nothing to commit (working directory clean)
real 0m0.156s user 0m0.057s sys 0m0.097s
答案1
实际上,我建议两者均衡使用。您的主要备份应(至少)每晚提交给 git。每周使用 rsync 将其同步一到两次到远离生产箱的另一台机器。Git
将帮助您立即恢复,并且由于您的备份是版本化的并且具有更改日志,因此它还使数据分析更容易。在对数据进行任何重大更改后,您可以手动提交并推送到 git,并将原因放入更改日志中。如果 git 出现问题,那么 rsync 会来救援,但请记住,您仍然会丢失数据,具体取决于 rsync 的频率。
经验法则:当涉及到备份和灾难恢复时,没有什么可以保证 100% 恢复。
答案2
push
Rsync 是一个很棒的同步工具,但是在服务器上运行 Git 并进行更新时,你会获得更多的多功能性pull
。
我必须在我们的服务器上跟踪和备份用户生成的内容。production
服务器有一个 git repo 副本,并且每晚都会通过 cron 自动添加和提交所有新文件。这些文件被push
发送到我们的 gitolite 服务器,然后该服务器使用钩子同步其余服务器。
由于服务器上有 repo 的副本,您不仅可以获得快照,还可以获得详细的历史信息,如果您的服务器出现任何问题,这些信息可以轻松地拯救您。
我认为你对两者提供的功能都有了很好的理解,我只是希望改变你的思路,从服务器检查/导出代码库到拥有自己的存储库。另一个想法是,你可以 rsync 你的媒体文件(你说其中一些网站有 2GB,这让我认为有很多媒体类型的文件?)而不是在 Git 中跟踪它们。