由携程事件引发的运维思考

回复 收藏
2015年的5月注定是一个不平凡、让人难忘的月份! 从昨天开始,朋友圈、空间、QQ群到处在谈论携程,虽然说携程这次经济上造成了一定的损失,但从反方面说,携程这次并没有输,反而是赢的。当然,前提是携程的危机公关得做好!


先来说说,携程为什么是赢的,第一经过这次大事件,想必携程上上下下领导都会重视整个IT生产线,必将会从头到尾整顿一遍,这次事件让携程暴漏了很多缺陷,这是好事,只要把缺陷修复则会让携程的整个系统更加稳固,以后肯定不会出现类似的故障。另一方面,大家也能感觉到,先是支付宝光纤被挖断,后来又是网易宕机,接着又是携程。那么携程在互联网上的身价必然不能和前两者相比,但现在呢,大家把携程已然和支付宝相提并论了,这个品牌效应是很大的。换句话说,这次事件反而让携程提高了知名度,身价倍增!如果危机公关做的好,那携程的股价势必会在接下来的一段时间蹭蹭上涨!

好了,言归正传,下面我们该来聊聊运维相关的话题了。我也不会去整那么高大上的系统和话题去谈论,只是就我们运维这个职位而言,以一个普通员工的身份来说说,我们应该注意的事情。


1. 数据备份
这个事情,大家心知肚明的,必须要做的。但数据备份也要做到合理规划,科学实施。不管你们公司有多少台服务器,不管你们公司有没有钱,都应该搞一台单独的服务器作为数据备份服务器。这台服务器有两个要求,第一磁盘容量必须够大,如果不大也得保证日后可以扩展;第二安全系数必须要高。不是任何人都可以去登录他,防止数据出现意外。

说到规划,我们本着一个数据完整性和备份快捷性的原则,需要做到所有数据,每周有一个完全备份,每天有一个增量备份。如果数据量不大,可以考虑每天一个完整备份,在性能允许的情况,可以尝试每隔几小时来一个增量备份。 如果为了更加安全,我们也需要保证,备份的数据还需要备份到异地的服务器上,甚至是购买磁带机专门来备份数据存储到本地。


2. 代码管理
虽然携程事件,有很多人猜疑,或说是代码被删,或说是数据被删。目前一切都过去了,所以我们不去细究。那如果说是代码被删,我们如何避免呢?携程网流量很大,前端服务器必然不是只有简简单单几台。如果其中一台被删除,肯定大家连知道都不知道,这次肯定是所有机器代码被删。在系统中,一个文件被删除,毫无疑问该文件所在的目录有被写的权限。那如果把被写的权限去掉,不就删不掉了吗?

所以,针对这个事情,我们就从目录和文件的权限入手。网站代码从开发阶段的测试机,到部署到线上,肯定需要一个过程。有的公司用svn,有的公司用git,还有的公司直接用ftp,当然有的公司用自己开发的自动化发布系统。 我们公司用的是最后面的方案,这个小公司可能开发成本高一点,不推荐。ftp是最不安全的,更不推荐。那svn和git,其实只是一个代码管理系统,只它自己,我们没有办法做到自动化上线代码。所以,我们就使用目前业界比较出名的puppet来作为发布系统。但有几个原则,是大家一定要掌握的。

第一,控制好发布权限,如果公司能力够,我相信肯定是运维、开发、测试都分开的。不同的小组,获得的权限也是不一样的,上线这个事情,可以让运维来做,也可以让测试人员来做,唯独开发不能做,这也是基于安全考虑,不能让开发同学的代码不经过测试就上线。

第二,一定要保证代码文件属主数组和web server的属主不是同一个用户,举个例子,我们用apache,apache的属主是daemon,那么代码的属主必须不是daemon,也就是说web server的权限是不能修改代码的,如果有特殊需求,权限一定要经过再三测试后才能放开,并且要做一个特殊处理,比如php代码不解析。那么你会问,我们上线代码的时候肯定是要改的,那么这个用户的权限如何保证安全,这个问题确实是存在的,而此次携程事件代码被删的根源很有可能就是这个地方。所以,这个上线代码的用户权限,一定要控制好。如果我们用puppet,那么puppet的安全问题一定要做好。严格规划发布上线人的权限,并且puppet本身系统的安全漏洞也一定要关注。


3. 容灾预案
常在河边走,哪有不湿鞋。再稳固的平台总是有出现问题的时候,那我们运维要做的就是,提前想好各种问题的可能性,并且规划出应对的措施。如果条件允许,我们应该做几次演习。去模拟真实的故障,然后通过预案来解决问题,看预案的可行性。所以,在最初设计整个业务架构的时候,我们就应该想到尽可能的保证高可用,把所有的单点故障的可能性都考虑到。关于预案,我们应该把业务分块单独去分析,比如可以把前端cdn、web、缓存、db所有逻辑层都单独拿出来去想到一切出问题的可能性,然后针对性地出一套可行的解决方案出来。小公司,就算了肯定经不起这样的折腾,经费也没有那么多,所以只需要尽可能考虑系统的高可用吧。大公司不担心成本,所以多准备一些备用的设备吧。


4. 监控做好
监控最根本的作用,其实不是为了发现故障然后去解决。而是,我们要提前观测到异常,然后去处理,避免故障的产生,也就是说防患于未然,在故障发生之前我们就已经通过监控系统察觉到,把故障扼杀在摇篮里。所以,我们也本着这个原则,去做监控,去量体裁衣。我们核心不是监控服务器硬件,不是监控系统负载和网络流量,而是要监控各个业务本身指标。另外,好的监控要做好告警收敛,一针见血,及时通知到位!


5. 安全
这个放到最后来讲,因为这方面是往往被人忽略,但是又是最最重要的一部分。目前IT界安全方面高级人才很少,所以导致很多企业在安全上往往是一个薄弱的环节。那如果说,本次携程事件是因为发布系统漏洞导致,那这就意味着,这次事件的根源就是安全没有处理到位。我本身不是安全专家,所以下面我说的一些观点可能没有什么含金量,只供大家参考。我认为运维要考虑到的安全主要有这几方面:

(1)各个环境漏洞,大家最常见的漏洞往往是运行网站所依赖的环境的漏洞,你也许经常会听说,某个php版本有漏洞,某个版本nginx有漏洞等等。其实,任何一个软件都会有漏洞,只是我们没有发觉而已。大家不可避免使用了各种各种的软件来运行我们的代码和数据,那么漏洞就有可能发生,作为运维人员的我们,在自己能力范围内去测试和发现各种漏洞,另外我们需要实时关注各大常用开源软件官网发布的各种漏洞消息和补丁。环境软件的版本,要适当升级到新版本,但不能太新。

(2)web安全要做好,主要从xss、sql注入、CSRF三个方面去扫描和修复。另外,网站能上传,就是可写的目录,一定要做个限制,比如不能解析php。

(3)操作系统本身的漏洞也要关注。

(4)选择靠谱的,有各种保障的机房,不能三天一停电,两天空调不制冷这样的机房,当然机房重地肯定不能随便谁都可以进入。


好了,目前我就想到这么多,我的私人微信号 aminglinux 有兴趣的可以添加,验证码:阿铭论坛
2015-05-29 12:33 举报
已邀请:
0

qidi2015

赞同来自:

先占位。。
0

gjc159357

赞同来自:

2楼
0

狠懒

赞同来自:

抢楼
0

wuhen

赞同来自:

写的很好,赞一个
0

定海偶然

赞同来自:

秒赞
0

YCC

赞同来自:

好久没来了。
0

175009666

赞同来自:

顶顶顶
0

随风飘雪012

赞同来自:

赞一个
0

模范棒棒糖

赞同来自:

对于我们的机房,我只能呵呵了。夏天很热,安装了小空调但是不让打开。每次下班都要把机房门打开散热,我也真是醉了。
0

定海偶然

赞同来自:

本帖最后由 定海偶然 于 2015-5-29 15:22 编辑
模范棒棒糖 发表于 2015-5-29 13:50
对于我们的机房,我只能呵呵了。夏天很热,安装了小空调但是不让打开。每次下班都要把机房门打开散热,我也 ...

哈哈,我们机房(以前的)漏水,对,就是漏水~服务器上面架个桶接水~
0

模范棒棒糖

赞同来自:

定海偶然 发表于 2015-5-29 15:19
哈哈,我们机房(以前的)漏水,对,就是漏水~服务器上面架个桶接水~

真是醉了。
0

疾风

赞同来自:

我听IDC网管说以前机房还用冰块降温
0

大不了从头再来

赞同来自:

铭哥这个意识才是我们需要学习的
0

shajoe

赞同来自:

0

爱疯熊猫

赞同来自:

定海偶然 发表于 2015-5-29 15:19
哈哈,我们机房(以前的)漏水,对,就是漏水~服务器上面架个桶接水~

一样   我在服务器上盖的   塑料布,冬天漏风,夏天漏雨。 不知道是那个没脑子的把机房设计到最顶层。
0

戎强

赞同来自:

真棒
0

hanwen

赞同来自:

server
0

hanwen

赞同来自:

{:4_98:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: