从 Ubuntu 16.04 到 FreeBSD:一场长达十年的迁移之旅

对于许多开发者来说,一个“运行良好”的服务器往往会被连续多年不加改动地使用。一位开发者的博客就在 Ubuntu 16.04 LTS 上运行了十年——这是一个已经停止支持五年的操作系统。虽然系统保持了惊人的稳定性,但缺乏安全更新以及过时的托管成本上升,最终使得迁移变得势在必行。

这次迁移不仅仅是为了更新操作系统;它也是一个尝试不同系统管理理念的机会。通过从 DigitalOcean VPS 迁移到 Hetzner 实例,并将 Linux 切换为 FreeBSD,作者将一个臃肿、过时的设置转变为一个精简、容器化的架构,使用了 FreeBSD Jails 和 Caddy。

变更的动机

运行一个生命周期结束(EOL)的系统带有固有风险。由于无法访问 apt 软件包仓库,安全补丁停止了更新,导致服务器容易受到机器人和自动化漏洞利用的攻击。虽然作者的博客并未受到影响,但“SEO 垃圾邮件”(恶意行为者在帖子中注入赌博链接)是那些被忽视的 VPS 实例常见的命运。

除了安全因素,还有经济上的动力。一个拥有 2GB RAM 和 1 vCPU 的旧 DigitalOcean droplet 每月花费 13 美元。相比之下,一个现代的 Hetzner VPS 提供了两倍的内存和 CPU,每月花费不到 6 欧元,以极低的成本提供了显著的性能提升。

拥抱 FreeBSD 理念

选择 FreeBSD 而非其他 Linux 发行版,是出于对稳定性的追求以及对 FreeBSD 两项核心功能的特定兴趣:JailsZFS

FreeBSD Jails 对比 Docker

虽然 Docker 旨在对应用程序进行临时、不可变的打包,但 FreeBSD Jails 被视为“微型系统”。它们共享同一个内核,但作为隔离的子系统运行。这允许一种更持久、类似 VM 的体验,每个网站都可以驻留在自己的沙箱中。

ZFS:文件系统的黄金标准

ZFS 提供了数据完整性和快照功能,其成熟度远超 Linux 的替代方案(如 Btrfs)。通过利用 ZFS 快照,作者减少了对昂贵的供应商级备份系统的依赖,确保如果配置出错,系统可以快速回滚。

构建新架构

新架构基于“中心辐射型”模型构建,使用了 Bastille,这是一个简化了 Jail 创建和编排的管理工具。

网络层

为了实现 Jails 之间的通信,创建了一个虚拟网络接口 (bastille0)。流量通过 FreeBSD 强大的防火墙 PF (Packet Filter) 进行管理。配置将所有传入的 HTTP/HTTPS 流量(端口 80 和 443)重定向到特定的内部 IP (10.0.0.5),即主 Web 服务器所在的位置。

反向代理:Caddy

使用 Caddy 替换 Nginx 解决了服务器管理中最繁琐的部分之一:SSL 证书。与需要 Certbot 等外部工具的 Nginx 不同,Caddy 原生支持 TLS 终止和自动证书续期。

站点隔离

每个网站都托管在各自专用的 Jail 中。例如,由 Hugo 生成的博客和另一个抗议页面 (es.cro.to) 各自拥有独立的环境。宿主系统将 git 仓库存储在 /usr/local/www,然后使用 nullfs 将其挂载为只读卷。这确保了即使某个站点被攻破,攻击者也无法修改宿主系统上的源文件。

性能基准测试

为了验证迁移,作者使用了 wrkhey 进行了严格的负载测试,将旧的 Ubuntu 服务器与新的 FreeBSD 设置进行对比。

测试结果

初步测试显示了请求处理能力的惊人差异。旧服务器在处理每秒 833 个请求 (RPS) 时显得吃力,而新服务器在本地数据中心测试中达到了超过 12,000 RPS。

使用位于伦敦、圣保罗、硅谷和东京的 Vultr VPS 实例进行全球测试,结果也呈现出类似的趋势。Ubuntu 服务器仅完成了百万级请求压力测试的约 7%,而 FreeBSD 服务器完成了 94%。

收益分析

虽然结果非常显著,但作者指出,这些收益并不完全归于 FreeBSD。新的 Hetzner VPS 拥有四个 CPU 核心,而旧的 DigitalOcean 实例只有一个,且旧的 Ubuntu 系统很可能在处理高并发时配置不当。在这一过程中,一个关键的发现是需要通过 sysctl kern.ipc.somaxconn=16384 增加套接字队列大小,以处理 10k 并发连接。

经验教训与社区观点

对于那些管理自己基础设施的人来说,这次迁移突出了几个关键点:

  1. 高在线率的危险: 虽然 1,491 天的在线率是一个值得骄傲的成就,但它可能是一个陷阱。正如一位社区成员所言,过高的在线率往往意味着管理员已经忘记了系统是如何配置的,使得在出现问题时几乎无法在不痛苦的情况下进行恢复或迁移。
  2. 价值在于实验: 迁移到 FreeBSD 运行可以带来对网络和系统内部机制的更深层理解,而标准的 Linux 安装通常会将这些细节抽象化。
  3. BSD 的权衡: 虽然因其简洁性而受到褒扬,但社区中的一些用户也指出了痛点,使用 rc.d 管理日志的难度,或者缺乏像 UFW 这样“开箱即用”的防火墙模板。

最终,这次迁移取得了成功——不仅是在原始性能方面的成功,如此更是因为它具有极高的教育价值,通过走出熟悉的 Linux 生态系统,构建了一个构建一个更安全、隔离且更具成本效益的托管环境。

Sources