使用 Sanoid 避免数据灾难

5 位读者喜欢这篇文章。
Avoiding data disasters with Sanoid

Opensource.com

Sanoid 帮助从我称之为“矮胖子级别事件”的灾难中恢复。换句话说,它可以帮助你在 ZFS 文件系统上将矮胖子重新组装起来。

Humpty Dumpty, Tenniel.

矮胖子坐在墙上,
矮胖子重重地摔了一跤。
国王的所有骏马和国王的所有士兵
都无法将矮胖子重新组装起来。

小时候,在我读刘易斯·卡罗尔的书之前很久,我就对这首鹅妈妈童谣耳熟能详。矮胖子摔倒可能是英语语言中最著名的童谣。为什么这首简单的诗句如此受欢迎?

它概述了一种恐惧和一种每个人都共同的经历:一些开创性的、可怕的事件发生了,在一瞬间就无法回头了。曾经的秩序变成了混乱,而且无法恢复。这很糟糕,但它是人类基本经历的一部分;你无法将鸡蛋放回壳里,你无法收回你对朋友说的刻薄话,你也无法撤销你在电脑上犯下的可怕错误。

也许你点击了错误的链接或错误的电子邮件附件,并且执行了加密恶意软件有效载荷。或者,也许你的操作系统供应商发送了一个糟糕的系统更新,并使你的机器启动过程崩溃。(我实际上没有在 Linux 下看到过这种情况,但对于我们这些管理足够多的 Windows 服务器的人来说,这种情况令人沮丧地频繁发生。)也许一个关键任务应用程序需要升级,供应商通过电子邮件发送给你一份 150 页的 PDF 说明,结果在第 75 页就崩溃了。见鬼,也许你付钱给供应商来进行升级,结果还是在第 75 页崩溃了。

像大多数计算体验一样,这些事情都不是真正新鲜的。它们都只是矮胖子寓言的重写。熵是会发生的。

你无法将鸡蛋重新变成原样。(或者你可以吗?)

矮胖子坐在墙上,矮胖子重重地摔了一跤。
系统管理员进行了回滚!矮胖子坐在墙上...

如果你是 *nix 人,rm -rf / 就像矮胖子摔倒本身一样是一个不可靠的故事。你可能从未自己做过,甚至没有亲眼见过。然而,我们至少听过这些故事,并在想到时畏缩。GNU rm 甚至添加了一个特殊的参数 --no-preserve-root,试图让快速、笨拙的手指更难擦除系统!但这仍然无法阻止你意外地核平各种重要的东西,即使它们不是 root:/bin/var/home... 你随便说。(我曾经意外地销毁了一个重要系统上的 /etc一次。 让我们永远不要再提起它。)

从最朴实的意义上讲,Sanoid 是一个 快照 管理框架。它拍摄 ZFS 文件系统的快照,它监控它们的存在,并在它们应该消失时删除它们。你给它一个策略,例如“对于此数据集及其所有子集,每小时、每天和每月拍摄一个快照。保留 30 个小时快照、30 个每日快照和 3 个每月快照”,它会为你实现这一目标。

但忘掉朴实,让我和你一起变得有点诗意:Sanoid 的真正目的是改写矮胖子摔倒的故事。

过去,当我看到某些客户的名字出现在我的来电显示上时,我常常会感到一种存在的恐惧。有些日子,我花了几个小时试图从我的帽子里拿出神秘的兔子,以就地拯救崩溃的系统,应对焦虑的用户无法回答的还要多久?问题,想知道什么时候应该放弃就地救援并开始费力的从备份恢复。

当然,唯一比“我们不小心搞砸了整个服务器”更糟糕的事情是,在你完成恢复过程后,听到那悲伤的哭声:“SuperFooBarApp 在哪里?它至关重要!” ... 而 SuperFooBarApp 是客户自己在六个月前安装的东西,并且从未告诉过你。它超出了你的备份过程的范围,现在它就。这样。消失了。

Sanoid 是我出于绝望而构建的东西,目的是让所有这些停止发生。而且它奏效了!通过在每小时快照的虚拟机上进行实际工作tm,并保持底层裸机像哨子一样干净,只运行 Sanoid 本身,再也没有矮胖子级别的事件了。加密恶意软件入侵?回滚。流氓(甚至恶意的!)用户删除大量数据?回滚。糟糕的系统更新破坏了机器?回滚。客户六个月前在某个隐秘位置使用你从未听说过的某个隐秘后端数据库引擎偷偷安装了 SuperFooBarApp?没关系;快照是全磁盘映像,它就在那里。

在超级技术化的商业计划术语中,使用 Sanoid 使我的 恢复点目标 (RPO) 为 59 分钟或更短,我的 恢复时间目标 (RTO) 大约从我走到键盘的那一刻起算起 60 秒。在不太技术化的必须修复它的人的术语中,这意味着我总是可以让客户满意,并且这意味着我的一天变得更加可预测!

配置 Sanoid

你只需要一个单行 cron 作业,以及一个简单易读的 TOML 配置文件。

Cron

root@banshee:~# crontab -l | grep sanoid
* * * * * /usr/local/bin/sanoid --cron

配置

root@banshee:~# cat /etc/sanoid/sanoid.conf

[banshee/images]
	use_template = production
	recursive = yes

[banshee/home/phonebackup]
	use_template = production

### templates below this line ###

[template_production]
	hourly = 36
	daily = 30
	monthly = 3
	yearly = 0
	autosnap = yes
	autoprune = yes

Sanoid 将在你要求它的任何地方轻松、整洁且可预测地应用你设置的策略。第一个模块定义涵盖了我工作站上当前所有九个虚拟机,并将自动拾取我创建的任何虚拟机(只要我将它们放在 /images 下)。

root@banshee:~# zfs list -r banshee/images
NAME                             USED  AVAIL  REFER  MOUNTPOINT
banshee/images                  83.2G  26.4G  15.3G  /images
banshee/images/freebsd          1.32G  26.4G  1.29G  /images/freebsd
banshee/images/freenas            22K  26.4G    20K  /images/freenas
banshee/images/openindiana        22K  26.4G    20K  /images/openindiana
banshee/images/unifi-server     13.7G  26.4G  9.88G  /images/unifi-server
banshee/images/win2012R2-demo   8.79G  26.4G  8.40G  /images/win2012R2-demo
banshee/images/win7             29.5G  26.4G  26.6G  /images/win7
banshee/images/xenial-gold      2.27G  26.4G  1.92G  /images/xenial-gold
banshee/images/xenial-gui-gold  5.80G  26.4G  4.48G  /images/xenial-gui-gold
banshee/images/xenial-test      6.41G  26.4G  4.37G  /images/xenial-test

不需要设置太多东西,更好的是,当以后不可避免地创建新东西时,不需要忘记太多东西!但是,这个难题仍然缺少一块。如果女妖,本地机器本身着火了怎么办?

看,矮胖子不仅仅是生病了——他摔坏了!

到目前为止,我们一直假设虚拟机底层的硬件保持健康。不幸的是,情况并非总是如此。快照非常适合从故障中恢复——基本上,通过软件或用户与软件交互发生的灾难。但是,如果你丢失了存储硬件,快照也会随之消失。如果你丢失了运行硬件的机器,你将停机数小时,甚至可能是一两天,等待更换。

由于我们的目标是消除所有矮胖子级别事件,因此我们还需要为故障做好计划。硬盘驱动器坏了。电源坏了,我们出城了,一个项目今晚到期。有人在服务器机房里存放食物,蛾子侵扰导致主板上的组件短路。(别笑了——今年发生在一位客户身上!)

情况可能会更糟——整个站点灾难呢?服务器机房的消防洒水器启动了。服务器机房的消防洒水器没有启动,现在整栋大楼都没了……你懂的。

所以我们想要快照,但我们希望它们在不止一台机器上,并且我们希望它们在不止一个地方。这就是 syncoid 的用武之地。syncoid 使用文件系统级别的快照复制来快速地将数据从一台机器移动到另一台机器。对于像虚拟机镜像这样巨大的 blob,我们谈论的是 比 rsync 快几个数量级

如果这还不够酷,即使你丢失了生产硬件,你甚至不一定需要从备份恢复;你可以直接在本地热备硬件或远程灾难恢复硬件上启动虚拟机,视情况而定。因此,即使在灾难性的硬件故障情况下,你仍然可以期待 59 分钟的 RPO 和 <1 分钟的 RTO。

备份——以及恢复——再也没有比这更简单的了。

语法非常简单

root@box1:~# syncoid pool/images/vmname root@box2:pooln
ame/images/vmname

或者,如果你有很多虚拟机,就像我通常做的那样……递归!

root@box1:~# syncoid -r pool/images/vmname root@box2:po
olname/images/vmname

这不仅使每小时在本地网络上复制数 TB 的虚拟机映像成为可能,而且还使每天通过 VPN 复制数 TB 的虚拟机映像变得容易。我们说的也不是企业级 100mbps 对称光纤。我的大多数客户的可用上传速度为 5mbps 或更低,但这并没有阻止他们进行自动化的、每晚的空中备份,通常备份到安静地放在业主家中的机器上。

防止你自己的矮胖子级别事件

Sanoid 是开源软件,它的所有依赖项也是开源的。你几乎可以在任何带有 ZFS 的东西上运行 Sanoid 和 Syncoid 本身。我自己开发并在 Linux 上使用它,但人们也在 OpenIndiana、FreeBSD 和 FreeNAS 上使用它(我支持它)。

你可以在 网站上找到 GPLv3 许可的代码(实际上只是重定向到 Sanoid 的 GitHub 项目页面),并且还有来自第三方的 Chef CookbookArch AUR 存储库

Jim Salter
我是一名位于南卡罗来纳州哥伦比亚市的雇佣系统管理员。我第一次真正接触开源软件是在 90 年代末和 2000 年代初在 FreeBSD 网络服务器上运行 Apache。从那时起,我转向了 Samba、BIND、qmail、postfix 以及任何其他引起我注意的东西。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.