雪花服务器

2012年7月10日

维护生产服务器的正常运行可能是一件棘手的事情。您必须确保操作系统和任何其他依赖软件都已正确修补到最新版本。托管应用程序需要定期升级。需要定期更改配置以调整环境,使其高效运行并与其他系统正确通信。这需要混合使用命令行调用、在 GUI 屏幕之间跳转以及编辑文本文件。

结果就是一个独特的雪花 - 对于滑雪胜地来说是好事,但对于数据中心来说却是坏事。

雪花服务器的第一个问题是难以复制。如果您的硬件开始出现问题,这意味着很难启动另一台服务器来支持相同的功能。如果您需要运行集群,则很难保持集群中所有实例的同步。您无法轻松地镜像您的生产环境进行测试。当您遇到生产故障时,您无法通过在开发环境中重现事务执行来进行调查。[1]

在某种程度上,制作雪花的磁盘映像可以帮助解决这个问题。但是,随着配置中不必要的元素(更不用说错误)的持续存在,此类映像很容易积累垃圾。

然而,雪花真正的脆弱性在于当你需要改变它们的时候。雪花很快就会变得难以理解和修改。一位软件的升级会导致不可预测的连锁反应。您不确定配置的哪些部分是重要的,或者只是多年前开箱即用的方式。它们的脆弱性导致了漫长而紧张的调试过程。您需要手动流程和文档来支持任何审计要求。这就是为什么您经常看到重要软件运行在古老的操作系统上的原因之一。

避免雪花的一个好方法是以某种自动化配方的形式保存服务器的整个操作配置。最近在这方面变得非常流行的两个工具是 PuppetChef。两者都允许您以 领域特定语言 的形式定义操作环境,并轻松地将其应用于给定的系统。

使用配方的意义不仅在于您可以轻松地重建服务器(您也可以使用映像来做到这一点),而且您还可以轻松地理解其配置,从而更容易地对其进行修改。此外,由于此配置是一个文本文件,因此您可以将其保存在版本控制中,并享受其带来的所有优势。

如果您禁用对服务器的任何直接 shell 访问,并强制通过从版本控制运行配方来应用所有配置更改,那么您将拥有一个出色的审计机制,可确保记录对环境的每次更改。这种方法在受监管的环境中非常受欢迎。

应用程序部署应遵循类似的方法:完全自动化,所有更改都在版本控制中。通过避免雪花,测试环境更容易成为生产环境的真实克隆,从而减少了由配置差异导致的生产错误。

确保您避免雪花的一个好方法是使用 凤凰服务器。使用版本控制的配方来定义服务器配置是 持续交付 的重要组成部分。

延伸阅读

《可视化运维手册》 是一本开创性的书籍,它谈到了雪花的危害以及如何避免它们。《持续交付》讨论了这种方法如何成为健全的构建和交付流程的必要部分。 然而,真正的艺术家更喜欢雪花

注释

1: 我听到的另一个比喻是,你应该把你的服务器当作牛而不是宠物。虽然我承认,当我的素食同事使用这个比喻时,我觉得很奇怪。