服务器是可能崩溃的,除非不使用服务器。而我们的服务器不会崩溃,起码概率是非常低的。崩溃的频率大概是上千台服务器平均每年崩溃一次。这就意味着在我们管理的平均每一千个服务器中,每年只发生一次崩溃,包括我们所有的基于Xen的私有云和服务器的虚拟机。这无论在任何标准中都是极低的。

为何能如此完美?

其中有多个因素,我会一一列举。

首先,我们使用的Centos,95%来自红帽企业Linux(RHEL)的开源版本。红帽企业Linux(RHEL)的目的是追求稳定,因此它对于制造可用5 – 10年寿命的主要版本(目前是RHEL7)有非常严格的规定。这意味着,在2014年年初,当一个新的版本推出时,基本上RHEL7会被及时冻结,除非出现重大的错误并有长达12 – 15年的安全修复程序,否则不会出现新功能。

如今很多人都会抱怨这样的处理方式太过陈旧,例如,在2010年使用通用的RHEL6时,系统会自动锁定并重新设置。这只对了一小部分,大部分来说几乎都是无关紧要的。因为在大部分情况下你根本不需要新功能(Docker是个例外),并且我们持续不断更新服务器。所以你只被锁定在一个稳定的内核版本以及相关服务,如驱动程序,LVM/ DM,iptables等等,再加上一些捆绑的核心服务如OpenSSL,bash漏洞等。

人们常希望我们使用最新的Ubuntu/ Debian,这是我们普遍抵制的(详细见其他博客),因为在大多数情况下他们都不太稳定,并且还会给我们带来更多的问题(不仅仅是缺失相关的Deb包或安装包)。真正的挑战是可否满足我们对于持久性的需要,就这么简单。

我们使用最好的硬件,这帮助非常大。我们的标准是戴尔机架服务器,尤其是R420系列,运行非常好,几乎没有出现故障。这种主流服务器能够很好地支持系统,用于测试和运行,促进整体稳定性,同样的道理适用于我们要选择极少出现崩溃的云。

在硬件上,我们只安装了基础设备,没有任何不必要的服务和垃圾。这降低了外观安全的攻击性,并至使用尽可能少的移动部件、库和服务来提高可靠性。

除了上述的操作系统我们还为内核,防火墙,驱动程序等等装备了世界一流的配置,再加上所有的服务如MySQL,HAProxy等等。我们密切监控所有这一切运行情况,以确保不会出现内存溢出的情况,交换达到减少值(但始终可用),NUMA是交错的,而更多的是,所有的操作都是为了保持最好的稳定性。

另外,我要指出的是,我们的安装服务也极少出现崩溃 – 几乎从未是核心服务的故障,如Nginx,Apache,Redis等。我们确实从旧的PHP-FPM和MySQ看到了一些问题,可能在每一百台服务器中出现一次崩溃。这种整体的可靠性是基于上述所有配置,再加上使用供应商提供的RPM(几乎从来没有建立从源),包括最新版本和最佳实践配置。

最后,我想说的是十分良好的稳定性并不难实现,但它确实需要奉献精神,专业知识和资源来进行选择和配置。