写点什么

站点恢复过程中的经验和教训

  • 2010-01-05
  • 本文字数:2720 字

    阅读完需:约 9 分钟

最近 Jeff Atwood 丢失了两个 blog 站点: Blog @ Stackoverflow Coding Horror 。他设法恢复了这两个站点的内容,但是从这个事件中我们应该得到什么教训呢?

在 Jeff 的博客上,他写了一篇为什么人们需要备份内容以及如何进行该项工作的文章,2008 年一月发布的,在其中他做出了以下结论:

可以肯定的是:只有在你拥有某种备份策略,并且坚持执行的时候,你才会了解它。如果备份数据看起来有点麻烦,那就对了,因为它的确是那样。打住!我知道怎么回事儿。听我的。不管怎样都要做。

Jeff 针对 Stackoverflow 以及 Codeing Horror 的博客都有备份策略,其中后者是由 CrystalTech 管理的,他们会经常备份整个站点。但是又怎么可能会丢失站点的内容呢?原因是由于站点是存放在虚拟机中的,而 CrystalTech 备份的是虚拟机的镜像,而镜像全都被破坏了。这样,虽然备份包含了大量被破坏了的虚拟机镜像,但是它们没什么用处,因为使用它们无法启动虚拟机。在文章的开始,Jeff 将责任归咎于他自己以及提供商:

Jeff Atwood :呃,CrystalTech 的服务器崩溃了。很显然他们通常所用的备份流程在备份虚拟机镜像的时候失败了,而没有给出提示。 Jeff Atwood :对此,我和站点提供商各负 50% 的责任(不要相信站点提供商,还是要做你自己的离线备份!)

在一些用户的帮助下,Jeff 设法恢复了他的站点中丢失的内容。Rich Skrenta 帮助他找回了文本:

幸亏有 blekko.com 的 Rich Skrenta,这样我才能几乎立即找到 Coding Horror 站点上的静态的 HTML 版本。他热心地提供了该站点上每个爬虫页面的结果。有些人有目标,而有些人有大胆的的目标。Rich 的目标尤其令人惊叹:在 Google 最擅长的搜索领域与其进行较量。这是为什么他能够恰好找到 Coding Horror 完全的文本存档的原因。Rich,我是否曾经告诉你,你是我的英雄?不管怎样,幸亏有了 Rich,你现在还能够浏览 Coding Horror 的静态 HTML 版本。令人惊奇的是,对于这个站点,静态的 HTML 版本和动态的版本没有很大的不同。我想这是作为极简主义者的好处吧。

而图片都来自于 Carmine Paolino,恰好一个用户拥有“这个站点几乎完全的镜像,这些数据都存放在他的 Mac 上!多亏他的镜像,我现在才能够几乎 100% 地恢复丢失的图片和内容。”在恢复了站点之后,Jeff 获得了重生,同时也停止了自责:

因为我是个笨蛋,我没有对 Coding Horror 做自己的(最新的)备份。天哪,我多希望曾经读过一些好的关于备份策略的博文啊

他做出如下结论:

从这些悲惨的事件中,我们能够得到什么教训呢? 1. 我吸取教训。
2. 是的,真的,我吸取教训。
3. 不要依赖于你的提供商或者任何其他人来备份你重要的数据。而应该自己来做。如果你不能够对你自己的备份负责,那么数据丢失就不会是偶然事件了
4. 如果你的数据真的出了问题,那么你怎么才能够恢复呢?过程是什么呢?恢复最困难的部分是什么呢?我想在我思想深处对 Coding Horror 的灾难恢复能力有错误的信心,因为我一直认为它大多数都是文本。当然,后来发现文本是其中最简单的部分。而我曾经认为是很好方式的镜像比我意识到的更加重要,而且更加难以恢复。有些人认为我们不应该讨论如何备份,而应该讨论如何恢复
5. 定期对你的恢复过程进行检查,以确认它仍然是可用的、有效的并且功能齐备,这是非常有价值的工作。
6. 我太伟大了!不,只是开玩笑。我还是要吸取教训。

Joel Spolsky 展示了多种其他可能的情况,其中如果没有提供恢复的话,那么备份策略就不起作用

  • 我们使用加密安全密钥对备份文件进行了加密,而密钥位于丢失数据的那台计算机上。
  • 服务器有大量存储在 IIS 的元数据库中的配置信息,而它们没有备份。
  • 备份文件被复制到 FAT 分区上,并且被截断为 2GB,而没有给出提示
  • 你的备份位于 LTO 驱动器上,它和数据中心一起丢失了,并且你无法在三天之内得到另一个 LTO 驱动器。
  • 还有其它成千上万种可能出现的错误,即便你拥有备份策略。

可靠服务的最小限度并非是你已经做了备份,而是你已经为恢复做了准备。如果你正在运行一个 Web 服务,那么你需要明白的是,你能对整个站点创建合理的最新副本,并且是在合理的时间之内,在一个新的服务器上或者过去没有访问过原来的数据中心上任何东西的服务器。底线是你已经做了对恢复的准备。

让我们不再询问人们他们是否做了备份,而要询问他们是否为恢复做了准备。

Jeff 转移了他的博客站点,以便于存放 Stackoverflow 的数据中心和其他在家中的服务器更加可靠,因为它们带有更好的备份策略

  1. 我们在早上四点、下午四点和晚上 12 点会对所有数据库做全备份。(某些数据库可能会更频繁,但这是通常的方式)这些数据库的全备份都存储在 PEAK 数据中心机架上的 NAS RAID-6 设备中。
  2. 我们有一个连接在数据库服务器上的 500GB 的 USB 硬盘。还有一段 C#的脚本,它会在每晚的凌晨一点左右将最新的备份从 NAS 复制到 USB 硬盘上。最旧的文件会被删除,从而为新的文件腾出所需要的空间。(当前的 Stack Overflow 的全备份压缩之后有 7GB 左右,而另一个数据库压缩后大概有 2GB)。新措施是:我们会在服务器上连接两个 USB 硬盘,从而并行地做验证复制,以免其中之一出现问题。
  3. Geoff Dalgas 是我们团队的一员,他住在离 PEAK 数据中心一英里的地方。他每过几周就会顺便到数据中心更换 USB 硬盘。他在家里放有四块 500 GB 的硬盘,还有两个在数据中心。他会不时地持续循环更换。
  4. 新措施:Fog Creek 每周都会使用 FTP 接入,然后将最新的数据库备份到他们的伺服设备上,在星期六流量低的时候进行。
  5. 我们每个月都会为所有站点(Stack Overflow、Server Fault、Super User)创建共享的数据块(dump)。这是数据的子集,但是是可以控制大小的,并且提供在 Legal Torrents 上。这些数据块被物理存储,并且由 Legal Torrents 提供种子。
  6. 我们的 Subversion 源代码控制库每天都会被复制到 NAS 上,并且被复制到外部的 USB 硬盘上等等,这都是通过相同的脚本完成的。
  7. 我们还运行了几个虚拟机镜像——大多数是为了提供 Linux 辅助服务——他们也是通过同样的过程备份的。因为我们的其他提供商吸取了困难的方式的教训,所以像虚拟机那样备份更有技巧性,而这肯定是你需要小心的事情。
  8. 我们有规律地下载最新的数据库备份并在本地恢复它们(我们总是针对真实数据进行开发),从而我们知道我们的备份是有效的。

这个策略听起来比在开始的时候设置更好一些。在这种情况下薄弱的环节在于“Geoff”。如果 Geoff 没有出现并更换驱动器怎么办?或者他丢掉了一块怎么办?或者小偷从他家里把硬盘偷走了怎么办?

Jeff Atwood 不是真的要责怪谁。这对任何人都有可能发生,即便拥有更好的备份策略。问题在于:我们在此能够得到什么样的教训?

查看英文原文: Validating a Backup Strategy with Restore

2010-01-05 00:353316
用户头像

发布了 340 篇内容, 共 130.3 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

探索 PlanetIX:解读区块链游戏运营的奥秘

Footprint Analytics

区块链游戏 web3 Planet IX

怎样才能让业财融合真正为企业数智化转型起到推动作用?

用友BIP

财务共享

今天又和Redis超时杠上了

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

如何用ReadWriteLock实现一个通用的缓存中心?

华为云开发者联盟

Java 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

艾媒金榜|2023年中国信创企业百强榜

亚信AntDB数据库

数据库 AntDB AntDB数据库

如何进行存储容量规划?

ScaleFlux

存储成本 数据压缩 企业级SSD NVMeSSD

用友BIP新一代全球司库,重塑企业资金管理新价值

用友BIP

全球司库

详解RocketMQ 顺序消费机制

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

线程池是如何执行的?任务太多会怎样?

做梦都在改BUG

Java 线程池

艾媒咨询 | 2023年中国信创产业发展白皮书

亚信AntDB数据库

数据库 AntDB AntDB数据库

「ACL 2023」:火山语音团队多篇论文中选,涉多方向技术创新突破

科技热闻

商业地产研策如何搜集数据​

MobTech袤博科技

阿里P8大佬的1800页计算机基础知识总结与操作系统,太强了!

做梦都在改BUG

Java 程序员 操作系统

开源边缘计算项目【FabEdge v0.8.0】配置connector公开端口操作说明

BoCloud博云

边缘计算 容器网络 FabEdge #开源项目体验 边缘网络

阿里一面凉凉,幸获内推华为技术四面,offer到手!

程序知音

Java java面试 Java进阶 八股文 Java面试八股文

活动回顾丨首期阿里云 Serverless 技术创新实战营上海开讲(含 PPT 下载)

Serverless Devs

MegEngine 使用小技巧:如何解读 MegCC 编译模型几个阶段 Pass 的作用

MegEngineBot

深度学习 编译器 MegEngine Pass

论数字化大趋势下,建设财务共享中心的重要性

用友BIP

财务共享

软件设计中你考虑过重试了吗?

做梦都在改BUG

Java 软件设计 重试机制

财务标准化建设进程中,财务共享能起到什么作用?

用友BIP

财务共享

西南财经大学李玉周:数智化技术广泛使用推动管理会计加快落地

用友BIP

智能会计 价值财务

基于 Log 的通用增量 Checkpoint

Apache Flink

大数据 flink 实时计算

ScaleFlux企业级SSD通过VMware IOVP认证

ScaleFlux

vmware 固态硬盘 企业SSD 存储解决方案

财务共享五大价值助力央企构建世界一流财务管理体系

用友BIP

财务共享

水泥行业全球第一企业怎么进行财务共享建设?

用友BIP

财务共享

火山引擎DataLeap的Catalog系统搜索实践(一):背景与功能需求

字节跳动数据平台

狂刷三遍398道java最新MySQL笔记后,我四面阿里研发部,成功定级P7

做梦都在改BUG

Java MySQL 数据库

空降攻略!一文带你玩转2023开放原子全球开源峰会

开放原子开源基金会

开源 开放原子开源基金会 攻略 开放原子全球开源峰会

旅游景区如何寻找共享电单车厂家

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电动车投放 景区共享电动车

利用透明压缩技术解决企业级SSD读写延迟挑战

ScaleFlux

压缩算法 固态硬盘 企业存储

站点恢复过程中的经验和教训_架构_Abel Avram_InfoQ精选文章