【编者按】刘鑫(Gray1982),04年毕业,主要从事IT培训、技术支持、高性能网站架构等相关技术的研究工作。目前就职于某知名互联网公司主管运维工作,主要是网站架构的相关技术,以及对Hadoop的研究。这些年的运维技术生涯中,都有哪些酸甜苦辣?
抚琴煮酒:
刘总,你目前也是老Linux运维了,你当时是怎么进入这一行的,在你的职业发展过程中,有没有走过弯路?有什么经验和教训跟大家分享下。
Gray1982:
03年考的MCSE,之后就一直喜欢系统的研究和系统应用软件的使用,做视频、做音频、做动画、做网页、做图片都有过。04年正式开始学习Linux,然后就喜欢上了这个系统。因为有了学习MCSE的经验,所以在学习Linux中也是从基础学起,很系统的学。之后做讲师,做技术,因为身体原因,不方便经常出差,所以选择了运维行业。
初入这行,不懂的比较多,所以没事去招聘网站看看这职位所需要的技能,也算是了解下“行情”,有个方向来学习,会比盲目的学效率会高一些。
行万里路不如名师指路,如果真没人指导,建议大家没事去论坛走走,加一些技术群。有可能你会看到N多不会的问题,没事,知道别人怎么解决的,你就是有收获的。
抚琴煮酒:
运维在日常的工作中具体从事哪些工作,工作的重难点你认为在哪里?
Gray1982:
一般运维也分操作和应用运维,比如有的做一些初始化系统脚本(增加通用的配置、监测网卡速度、连通率等等),根据不同的业务对系统用户管理等。对服务器的常规监控,报警处理。业务的更新部署,还需要配合开发诊断程序的错误等。其实这些没什么太多的技术性而言,主要细心一点就可以。
相对来说的应用运维就需要了解的比较多了,各种负载(LVS,HAProxy),各种页面级缓存(Squid,Varnish),各种KV、分布式缓存(redis,memcache),分布式文件系统(mfs,hadoop)等等。除了要了解这些应用适用于什么样的业务情况,还需要对其进行相当的优化,这样还可以节省一批机器,减少公司的运营成本,也是为公司做出了一些贡献。因为现在很多公司为了求快速的发展,不讲究细节,只要是能用就行,所以会有很多的弊端。不仅浪费了资源,整个架构还不是那么完美,非常的老旧。所以做为运维人员,为了公司的发展,整个架构的健壮性,可扩展性是很重要的。这也是很多公司忽略的。
如果想“偷懒”,最重要的就是自己写脚本。也许几台机器,你不在意,如果几十台呢,几百台传一批文件呢。一些开源的软件也许能解决一些问题,但这些并不是专门为公司的业务开发的,所以总有些方面不是很合适。这里还是建议要么二次开发这些开源的软件,要么专门为这些业务的写一些工具以满足自己公司的业务需求。这也是运维工作中很重要的能力。
抚琴煮酒:
自动化运维和Linux集群方面有什么跟大家分享的吗?
Gray1982:
就像我上面说的,一个出色的运维,不仅仅需要了解掌握架构上所需要的技术知识,还需要在实际生产环境中写出的适合业务的工具来提高效率,减轻我们自己的压力。自动化运维除了我们要有自己的写脚本的能力以外,还需要对服务器有一个标准化的部署,比如每台服务器软件放置的位置、脚本的运行等。如果没有这样的标准化,就是一盘散沙,自动化运维很难实施下去。
Linux集群方面涉及的比较多,因为具体分的话会有高可用性集群(运行于两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提供相应的服务)、负载均衡集群(提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务。负载均衡集群往往也同时具有一定的高可用性特点。)、超级计算集群(海量数据的计算)这么三大类。其里面包含的内容是很多的,有兴趣的朋友可以看看我写的网站架构技术方面的书。
常用的技术如负载均衡器LVS,haproxy、Oracle集群数据库RAC、Mysql+DRBD集群等等。了解掌握软件之间的结合使用,就可以在设计架构上得心应手。
抚琴煮酒:
您现在最关注哪方面的技术?您自己是如何学习并掌握新技术的?
Gray1982:
在脚本方面主要研究Python,各种编程语言是否顺手是个人的习惯,没有那种语言是不好的。所以学一门自己感兴趣的语言,在个人效率方面是一个不错误的选择。看书的时候介绍几本书一起看,这样可以综合的学习这种语言的某一方面的知识,以免不全、错误的学习。编程语言嘛,就应该多写,写的多了就明白的多了,这样可以很简洁的写出整个程序。同样实现一个功能,用60行实现和用200行实现,写程序的人的功力是不一样的。多练练,功力自然就会上来。
除了Python的学习,在云计算Hadoop方面也很感兴趣。除了基本配置,在其原理、优化方面是研究的方向。最开始如果没有环境的话,可以自己用VMware搞个,只要能连网,安装什么的根本不是问题。而且,由于VMware配置的虚拟Linux性能不如真实的服务器,所以在调整的时候会有更多的收获。只是可惜本人不懂JAVA,不能对其进程代码级的二次开发··········不过可以用Python去写一些MR,因为用Python开发的效率会比JAVA高出很多。在这方面,一个有技术能力的公司,不会仅仅用一种语言去写自己所需要的工作。
找一个自己感兴趣的学,会长久的学;有计划的学,效率会高一些。脚本就是多写写,多看看,多问问,就可以更高效学习。
抚琴煮酒:
当前大概的架构,以及用到了哪些技术?
Gray1982:
目前应用涉及的技术比较多,我只是说一个项目吧。根据业务来做的网站页面级缓存架构是lvs-haproxy-nginx(varnish)-app这种形式。LVS不多说了,大家都知道。中间之所以多了个haproxy一是因为整个架构更好的管理(机器比较多,一个网段的IP已经不能满足其扩展),二是可以更好的按规则去分发请求。至于是用专业级的缓存还是用轻量级的缓存看公司的实际情况吧。有的可能是需要二次开发才可以得到公司需要的东西,有的可能考虑以后的扩展以及运营的成本等。了解的更多才会有更多的掌控。
抚琴煮酒:
对目前热门的CDN技术有没什么心得和经验分享下?
Gray1982:
在CDN方面暂时没什么研究,相对来说其架构方面了解的也不多,就不在这里献丑了。
技术方面的只是对Squid、Varnish缓存有部分了解,仅限于电商级的。企业中会遇到的问题就是CDN取源时速度的问题,有可能占有90%以上的企业带宽。这点需要CDN厂商注意下,最好有限速度方面的设置。如果我们企业的文件不是经常更新的话,可以让CDN厂商把取源时间调整为半年或者更久,如果有更新且不多的情况下建议手动刷新。
抚琴煮酒:
刘总,听说你Python玩得不错,你在平时的工作中具体是用Python来实现什么工作,能有些具体的实用脚本跟大家分享下吗?
Gray1982:
考虑到效率以及方便性,自己用Python写了个多线程的批量部署程序。一般公司做批量部署管理都会用的Puppet,不过这些都是需要安装服务器端和客户端,并且是单线程的。在管理少量服务器也许看不出什么,管理到百台以上的机器,效率明显的下降。我自己写的这个多线程的程序暂时还没测试百台(有兴趣的朋友可以到我的博客下载),不需要安装客户端,完全是推送的形式,方便、快捷。完全是批量管理的必备工具(嘿嘿)。因为没测试到多台服务器,所以有问题也希望大家提出来,大家一起研究,共同起步。
另外一个是根据自己业务来的监控网站的使用性的工具。监控网通不通,访问的网页是不是出现400以上的错误,以及网页的内容是否正常。如果不正常是可以通过邮件报警,有兴趣的朋友也可以一起讨论下。
原文链接:http://bbs.chinaunix.net/thread-3723896-1-1.html