Meta 如何在超大规模系统中为 Linux 打补丁
弗吉尼亚州里士满–任何有技术背景的人都能为 Linux 服务器打补丁。但是,要在不停机的情况下为成千上万台服务器打上补丁并不容易。
在本月早些时候举行的 Linux 管道工大会(Linux Plumbers Conference)上,Meta Linux 内核工程师布雷诺-雷涛(Breno Leitao)解释了 Facebook 是如何基于其遍布全球的数百万台服务器来完成这项工作的。
雷涛说,如果使用普通技术,向所有机器推出新内核需要 45 天以上的时间。正如他所说,”对主机进行Draining 和 un-draining是很困难的”。
如果是小更新,这样做可能没问题,但如果是安全补丁,这样做就行不通了。
因此,Meta 与 Red Hat 的 Kpatch 一起使用内核实时补丁(KLP)来提供快速补丁。在 KLP 中,你可以在不重启的情况下将最新的安全更新应用到 Linux 内核。这最大限度地延长了系统的正常运行时间和可用性。
实时内核补丁
内核实时补丁以包含修改代码的软件包形式交付,与主内核软件包分开。实时补丁是累积性的,因此最新的补丁包含了之前内核软件包的所有修复。每个内核实时补丁包都与发布时的内核版本相关联。
不过,实时补丁并不适用于所有内容。你无法修补数据或结构。另一个问题是,制作实时补丁通常需要额外的工程工作。正如 Leitao 警告的那样:”这不仅仅是编译实时补丁,然后知道它是安全的并应用它那么简单。这些都是内核模块,一不小心就会出问题。不能保证补丁本身是正确的。
Kpatch 的工作原理是比较原始内核和打补丁的内核,然后使用定制的内核模块将新代码修补到正在运行的内核中。然后,Kpatch 进程会使用 ftrace 监视现有进程的堆栈,查看是否能在不产生任何有害影响的情况下打补丁。
在安全的情况下,它会将正在运行的代码重定向到已打补丁的功能,然后删除现已过时的代码。这样,你的服务器就打好了补丁,也不会出现停机。
当然,实际操作起来并没有那么简单。Leitao 解释说:”在 Meta,当我们应用实时补丁时,通常需要一到两秒才能将补丁应用到主机上。这是对单台主机而言,显然不是对整个服务器机群而言,但对一台主机而言,一到两秒的时间甚至比启动新内核的 Linux 内核机制 kexec 还要快。它不需要任何停机时间或工作负载迁移,你只需应用实时补丁,然后就可以开始了”。
如何为数百万台机器打补丁
但是,对于数百万台机器来说,这还不是全部。Meta 会在推出补丁的过程中发现漏洞,因此管理员会首先为候选发布层打上补丁。因此,当软件包roller提供基于 RPM 的补丁时,也会自动检查服务器的健康状况。
Meta 在新内核中查找崩溃、主要警报、应用程序问题和性能。这些数据来自各种来源,包括崩溃、 netconsole 结果和内核dump。如果错误率超过每千台服务器崩溃一台,就会撤消补丁,恢复旧内核。
拥有十多亿用户的 Facebook 也密切关注性能问题。正如雷涛所说:”实时补丁的性能开销很小,但当一个相对热门的功能被打补丁时,人们总是会担心。”
Meta 使用 Kpatch,但也有其他替代方案。SUSE 提供 kGraft;Oracle 使用 Ksplice;Canonical 支持 Livepatch。无论代码如何,它们都能提供类似的结果。
因此,如果您不想让您的服务器、数据中心和云出现宕机,请效仿 Meta,使用实时补丁。您一定会为自己的选择感到庆幸。
本文文字及图片出自 https://thenewstack.io/how-meta-patches-linux-at-hyperscale/
你也许感兴趣的:
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】Linux 桌面市场份额升至 4.45
- “不可变”发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式
- 【外评】Rust 版的 Linux 文件系统
- 【外评】桌面 Linux 是一座尚未开发的金矿
- 【外评】茶壶中的 Debian /tmpest
- 【外评】为什么你的 Linux 内核错误报告可能毫无结果?
- BitKeeper、Linux 和许可纠纷:Linus 如何在 14 天内写出 Git
- 【外评】英伟达™(NVIDIA®)开放式 GPU Linux 内核驱动程序即将成为“图灵”及将来 GPU 的默认设置
- 如何从 Windows 安装程序安装 Linux
你对本文的反应是: