作为一名运维工程师,工作中最大的希望就是自己运维的网站能够稳定高效运行,但理想很丰满现实很骨感,实际情况是总会有各种各样状况导致网络、服务器或者应用环境发生故障。面对这种情况,我觉得还是要能从故障中总结出经验规律,让发生的几率不断的降低。要完成稳定和高效两者中的任何一个都是一个极具挑战的事情,这里我以维护自己的blog为例来阐述一下我对稳定这个词的诠释和理解。
我的Blog架设在wordpress环境上的,记录了工作中的一些经验总结和随笔文章,虽然是个人网站,但麻雀虽小,五脏俱全,有一定的代表性。
一. 稳定之硬件稳定
硬件是基础设施,必须打好硬件稳定的基础。传统的硬件选型一般都是购买HP,DELL的机架式服务器,根据自己的需求选择CPU,内存,硬盘等,这种方式有一个弊端就是不能很方便的对硬件进行后期扩容,买了后一般情况下就定型了,而且还要托管,购买带宽,后期的硬件维护也是需要自己来做。面对这些问题,我觉得选择当下比较炙手可热的云服务器是个不错的选择。它解决了:
1)硬件型号不再重要,自然也就不会成为网站发展的瓶颈,CPU,内存,硬盘等硬件的大小都是弹性的,根据自己使用的情况随时可以增大和减小
2)云服务器提供商提供托管场地和网络带宽设施
3)因为云服务器提供商一般都有大量的服务器,所以会专门有一个机房工程师每天做硬件,网络的巡检工作,及时发现问题并将基础问题处理在萌芽阶段
4)对磁盘IO要求比较高的,可以选择购买本地磁盘和SSD磁盘来解决问题
总的来说,选择云服务器比较省心,而且国内的云服务器也逐渐的成熟起来,我个人使用云服务器这种方式7个月了,截止目前,硬件,网络都没有出现过问题,还是比较稳定的。当然大型云服务器提供商是比较好的选择,阿里云、腾讯云、Ucloud都不错。具体选择哪家,可以根据自己的实际情况来酌情选择。
二. 稳定之软件稳定
软件是具体提供服务的应用组件,要做好这个稳定我觉得比硬件难一些了,方方面面都要考虑清楚,这里从下往上来逐个分析吧:
1)Wordpress是一个PHP环境的程序,那么Linux作为系统环境就是一个很好的选择,其实稳定的另一个特征就是当出现了故障时能够很快的排除故障,在成百上千的Linux发布系统中很多人最终选择Redhat,CentOS肯定是有其原因的,CentOS是基于企业级linux系统发布Redhat编译而来,兼容性好而且免费使用,网络中有大量的技术文章可以借阅参考,64位也会逐渐的取代32位系统,我最后选择的是CentOS6 64位系统环境。这里不是说让大家全部选择此发行版,而是一个建议,在实际选择过程中最好根据自己的业务类型,选择一个能用上3到5年的系统,不折腾。
2)nginx、mysql、php的搭档组合有逐步取代AMP组合的趋势,V1.0以上的nginx,V5.1以上的mysql,V5.4以上的PHP,这个版本选择是目前比较实用的组合,能够支撑一段时间不需要在更新了。
3)组件选择好后,比较关键的就是配置好这些组件了,配置这个过程没有一个统一的标准,需要不同参数也就不同,但不管环境怎样,还是有几个比较通用的法则:
A. 一个PHP和nginx进程大约占用内存20M,最大允许的进程数是要根据自己的实际内存大小来动态调整,否则可能导致内存耗尽而系统崩溃
B.调整参数的原则就是让自己的硬件资源能够充分利用,最大使用率根据28原则
C.配置的过程是一个循序渐进的过程,很多时候也是在处理问题时逐步总结出来最优配置
三. 稳定之实时监控
网站对外发布后,剩下的任务就是要保证网站不出故障,持久稳定运行了。要做到这一点,就要对网站和硬件的运行情况有一个全面的了解才可以。掌握的数据越多,就对自己的网站运行情况越有利。
可用性监控:
网站当下是否能够正常访问,这是一个最基本的要求。但我们不可能实时去盯着,这里需要有个实时监控的服务去不断的探测,提供这样服务的工具有很多,例如nagios,zabbix等开源产品就是专门做这个事情的,周期性的探测网站的可用性,不过这种产品有一个很大的局限性,就是nagios和zabbix是部署在和自己网站同样的网络环境中,常常会出现nagios探测是好的,但外部访问却不行的状况。
这里我选择了一个第三方公司的产品——云智慧的监控宝,来做我的blog的可用性监控,其实现原理是使用它在全世界托管的监测服务器来周期性的访问我的blog,这种监控比较接近于实际用户访问,比较有说服力,如果发现了问题,会有一个告警信息发送到手机、邮件上。
四. 稳定之压力测试
压力测试的目的是为了能够对自己网站的最大负载能力有一个预估值,原则是测试一个有复杂业务逻辑的动态页面为好,通过压力测试得出自己网站的最大并发值和承载能力。得出这个值之后,剩下的在配置参数的时候就有依据了。压力测试的方法有很多种,比较常见的有ab,loadrunnner等工具。
五.稳定之硬件资源使用监控和并发数监控
压力测试的目的就是为了能够在这一环节有的放矢,网站上线后通过可用性监控得知网站是否能正常访问。在通过硬件资源使用情况和web服务的并发数监控,在监控中将告警阀值设置为压力测试过程中的80%为准。通过这样的实时监控,就对自己的服务器的运行情况有一个立体式的掌控,让其能够运行在正常的区间中。
总结:
保证服务的稳定是一个持续的过程,通过时间的积累对自己维护的业务运行情况越来越熟悉,对架构的掌握也越来越透彻,将网站架构中的薄弱环节加固,再通过后期的实时监控,对网站的整体运行情况有一个清晰的认识,由此来让自己运维的网站稳定运行。以上五点算是抛砖引玉吧,如果你有好的方法,随时沟通交流
本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-08-10