河南梦之网网络科技有限公司
梦之网科技出品
扫描关注梦之网科技微信公众账号

扫小程序码联系客服

数千台设备的软件和操作系统,每两周升级一次,这是怎么做到的-梦之网科技

梦之网科技2019-09-30文章动态

译者丨大愚若智

任何曾经管理过几十上百台物理服务器的人都知道:确保所有服务器始终安装最新安全更新,或者保证所有服务器的配置和状态相一致,这始终是一件很难完成的任务。为了解决这个问题,系统管理员通常会使用 Puppet 、 Salt 等工具,或将应用程序部署到容器中。如果整个环境都能由你控制,这些当然都是很棒的方法,但如果你使用了类似 BCDR 一体机之类的设备(或者任何未部署在自己基础架构内的一体机 / 服务器设施),这些方法往往就不怎么实用了。除此之外,替换系统内核、安装大型系统升级,或安装其他需要重启的大型补丁,此时也无法适用这些方法。

当我们使用的 BCDR 设备面临这些问题后,我们开始寻找其他更可行的方法,并且真的有所收获。近两年来,我们为超过 80,000 台设备使用了这种方法,效果一直很稳定。本文我将谈谈我们是如何通过镜像、回环设备(Loop device)以及大量和 Grub 有关的“魔法”解决这个问题的。如果对此话题感兴趣,欢迎继续阅读下去。

1

从头到尾使用 Debian 软件包?

我们的 BCDR 一体机始终运行了 Ubuntu,因此在更新软件时,最自然的方法就是使用 Debian 软件包。过去很长时间以来都是这样做的:每两周,我们会为 Ubuntu 10.04/12.04(没错,我知道你有疑问,请继续读下去!)构建所需的发布,经过全面测试后将其正式部署出去。

很长时间以来这样做完全没问题,但这种做法有一些很明显的不足之处:

第三方依赖项的更新:使用少量 Debian 软件包,这容易让人觉得只需要为自己的软件负责,而不需要为一体机中运行的其他软件负责。如果你只使用了自己的 datto.deb,但此时 Apache、Samba、libc 甚至 PHP 的更新管理工作其实同样重要。鉴于我们作为 Datto,本身所销售的就是完整的一体机,当然也就需要负责管理整个栈,尤其是第三方软件的安全补丁等内容。

服务重启动 / 重引导:对于一些需要重启动服务甚至重引导计算机的大型更新,依赖项问题也会变得异常棘手。当然,Debian 软件包自己就应该能处理服务重启动问题,但实际上并非所有软件包都能妥善搞定。并且一旦需要重引导(例如需要升级系统内核),还需要确保不会打断重要的设备任务(例如备份、虚拟化……),此外还要保证设备最终能引导成功(这事情并不像你想的那么容易,下文将会详细介绍!)。

发行版升级:如果整个操作系统的版本需要升级,这才是最麻烦的地方。举例来说,如果只使用 apt-get dist-upgrade 命令以及 reboot 命令将 Ubuntu 10.04 升级到 16.04,整个过程将变得漫长无比,并且很多时候可能会升级失败(只要你用过 usedapt-get dist-upgrade,那么肯定会明白)。

数千个版本和状态:在 Debian 的升级模型中,“设备”的实际行为其实和普通计算机无异:刚刚创建好镜像并部署后,一切都是崭新的,一切都可以正常运转。但随着镜像越来越老,操作系统退化的问题就变得越严峻,导致不同设备的状态产生巨大差异。能严重到什么程度?我们的设备(在切换到 KVM 前)曾经使用了 40 个不同版本的 VirtualBox、25 个不同的 ZFS 版本,以及超过 80 个不同的 Linux 内核!

其实,实际遇到的问题远比上面列出的更多,不过这里就不拿更多问题来给大家添堵了。快速开始介绍最有趣的内容:如何解决!

2

使用镜像,而非软件包!

鉴于会遇到这么多问题,很明显,我们需要用更好的解决方案来管理设备状态和配置。产品中不同的设备配置 / 软件包 / 版本数量不仅要降至最低,并且在每次升级时必需能保证能够升级整个栈:不仅要能升级我们自己的软件,还要能升级第三方软件,甚至诸如 Libc 或系统内核等系统库。

3

前提要求

随后我们开始确定这个解决方案的前提要求,其实这些要求并不多:

所有设备沿用相同的升级路径,并且只存在一个升级路径。

所有设备均可通过这种方式升级(哪怕操作系统盘较小的老设备)。

从一个版本切换到另一个版本的过程必需满足原子性要求(或尽可能满足这种要求)。(如果升级失败)能够回滚到上一个版本。而这些要求还暗含了一个最重要的前提条件:不能继续使用基于软件包的升级方法了,并且(从字里行间也能体会到)在升级过程中重引导一体机,这是可以接受的。

这些都是很大胆的念头。我们确实做出了一个重大决定!

4

那么镜像到底是什么?

为了减少配置的数量,我们决定不再将我们的软件及其所有依赖项看作不同个体,而是将所有这一切组合成一个统一的可交付物:镜像。

那么镜像到底是什么?镜像(在我们的环境中)是指一种 EXT4 文件系统,其中包含了引导和运行 BCDR 一体机所需的一切,例如:

Ubuntu 基础操作系统(内核、系统库……)

必需的第三方工具和库(Apache、KVM、ZFS……)

Datto 设备软件(我们的营销团队将其称之为 IRIS)

下图就显示了一个这种镜像所包含的内容:

数千台设备的软件和操作系统,每两周升级一次,这是怎么做到的-梦之网科技

文章关键词
服务器
一体机
镜像
软件包
ubuntu
debian