运维工程师工作的演变
随着云计算的流行,运维工程师的工作性质在不断地发生变化,很多新的技能点和知识点需要掌握和学习。工作中,大家经常可以看到DevOps这个词汇。最近DevOps为什么这么火?跟最近两年云计算的快速普及有很大的关系:云计算平台上的各种资源,从服务器到网络,再到负载均衡都是由API创建和操作的,这就意味着所有的资源都可以“软件定义”,这给各种自动化运维工具提供了一个非常好的基础环境。而在传统的互联网行业,比如CDN行业,由于机器数量众多、网络环境错综复杂,故也需要由DevOps人员来设计工具,提供后端的自动化API,结合公司的CMDB资产管理系统,提供自动化运维功能。
我在公司的职务是高级运维开发工程师(DevOps)、系统架构师,主要工作是设计、实施及维护本公司的电子商务网站,以及核心业务的代码开发工作。相对于CDN分布式系统而言,公司的电子商务网站没有节点冗余,对集群技术的要求更高。所以我前期将所有的网站应用都做了双机高HA,包括LVS/HAProxy+Keepalived和Nginx+Keepalived,以及DRBD+Heartbeat+NFS文件高可用,MySQL数据库用的是DRBD双主多从架构,甚至Redis也使用了主从复制的架构设计。随着特殊业务的需求量越来越旺盛(比如定点抢红包活动),我也在网站的架构设计中引入了RabbitMQ消息队列集群。后期随着商业推广量的加大,网站流量、UV及并发日益增大,新机器上线也日益频繁,所以我采用了Fabric、Ansbile等自动化运维工具来管理线上机器,避免运维同事们的重复劳动。另外,由于电子商务网站牵涉支付问题,所以对安全性的要求也非常高,我们平时都会从网络安全(包括硬件防火墙、Linux系统防火墙和WAF应用防火墙)、系统安全、代码安全和数据库安全这些方面着手,尽力避免一切影响网站安全的行为。此外,我的工作职责还包括使用成熟的自动化工具(比如Ansible、Saltstack等),利用Python或Golang进行二次开发,根据实际工作需求,结合公司的CMDB系统,提供稳定的后端API,方便前端人员或资产人员进行调用,这样大家可以利用界面来完成自动化运维工作。工作虽然辛苦,但看到自己设计的后端API和网站能够稳定运行,心里还是很有成就感的,这也是我目前工作的主要动力。
撰写本书的目的
从事系统集成、运维开发、架构设计方面的工作已经有十余年了,在工作期间,我曾有幸担任了一段时间的红帽RHCE讲师,在东北大学等高校推广红帽Linux系统。在教学过程中我发现,很多学生进入企业后都无法胜任自己的工作,更谈不上正确规划自己的职业道路了。究其原因,一方面是因为企业的生产环境具有一定的复杂性和危险性;另一方面则是由于市场上入门书居多,缺乏能真正指导读者解决实际问题的书籍。例如,很多书籍都只给出了比较基础的操作及理论,而相对于线上环境,根本没有涉及如何安全操作才能避免误操,以及在PV、UV、并发、数据库压力和高并发环境下消息队列或任务队列如何设计等相关话题。
之所以写这本书,一方面是想对自己这些年的工作进行一次系统的梳理和总结;另一方面是想将自己的经验和心得分享给大家,希望能帮助大家少走弯路。通过本书中介绍项目实践(包括Linux集群、MySQL的高可用方案及Python自动化运维工具的使用)和线上环境的Shell脚本,帮大家迅速进入工作状态。书中所提供的Shell脚本和iptables脚本均来自于线上的生产服务器,大家均可以直接拿来用。关于Linux集群的项目实践和MySQL的高可用方案,大家也可以根据实际项目的需求直接采用,以此来设计公司的网站架构。
希望大家能通过本书掌握Linux的精髓,轻松而愉快地工作,从而提高自己的技术水平,也希望大家通过我分享的内容,了解运维工作的发展趋势,确定以后的学习目标。这是我非常希望看到的,也是我写本书的初衷。
第4版与第3版的区别
本书是第4版,相对于前3版而言改动比较大,删除了不少过时的内容,增补了当前热门的技术知识点。另外,本书除了项目部署时采用的系统没有升级到CentOS 6.8 x86_64外,其他环境均为CentOS 6.8 x86_64。此外,在写作过程中采纳了读者针对上一版本提出的许多意见和建议,同时修正了第3版的各种错误及其他问题。具体改动如下:删除了第3版中前3章的内容,增补了Vagrant虚拟化软件的应用,并且重写了生产环境下的Shell脚本;删除了对分布式自动化部署管理工具Puppet的相关介绍,改用了Fabric自动化运维工具;删除了关于开源VPN在企业中部署的章节。附录部分增加了对现在流行的GitLab应用及强大的编辑工具Sulbime Text3的快捷键方式操作的介绍。出第4版的原因是希望能将现在最流行的开源技术展现并分享给大家,增加大家的职业技能知识。
读者对象
本书的读者对象如下:
项目实施工程师;
系统管理员或系统工程师;
网络管理员或企业网管;
系统开发工程;
高级开发人员。
如何阅读本书
本书的内容是对实际工作经验的总结,涉及大量的知识点和专业术语,建议经验不足的读者一定从第1章读起,本章内容相对来说比较基础。大家在学习过程中根据第1章的讲解进行操作,定会达到事半功倍的效果。
推荐系统管理员和运维工程师们通篇阅读本书,并重点关注第2章、第4章、第5章、第7章和第8章的内容,这些都与运维工作息息相关的,建议大家多花些精力和时间,抱着一切从线上环境去考虑的态度去学习。
对于网络管理员和企业网管来说,如果基础不是太扎实,建议先学习第1章和第2章的内容,然后将重点放在第7章和第8章。
对于项目实施工程师而言,由于大多数都是从事系统集成相关工作的,因此建议顺序学习全书的内容,重心可以放在第5章和第6章。
对于高级开发人员来说,由于只需对系统有一个大概的了解,重点可以放在第1章、第3章和第4章。如果希望了解集群相关的知识体系,可学习第5章和第6章的内容。
大家可以根据自己的职业发展和工作需要选择不同的阅读顺序和侧重点,同时也可以对其他相关的知识点有一定的了解。
致谢
感谢我的家人,你们在生活上对我无微不至的照顾,让我有更多精力和动力去工作和创作。
感谢好友刘天斯和老男孩的支持和鼓励,闲暇之余和你们一起交流开源技术和发展趋势,也是一种享受。
感谢朋友刘鑫,是你花了大量时间和我一起研究和调试HAProxy+Keepalived。
感谢朋友胡安伟,感谢你为本书提供的精美插图,并就Linux集群相关内容提出的许多宝贵的意见。
感谢机械工业出版华章公司的编辑杨福川和孙海亮,正是由于你们的信任、支持和帮助,我才能够如此顺利地完成全部书稿。
感谢热心的读者朋友们,没有大家的支持和鼓励,本书也不可能出到第4版。
感谢朋友三宝,感谢你在我苦闷的时候陪我聊天,感谢你这么多年来对我的信任和支持。
感谢在工作和生活中给予过我帮助的所有人,感谢你们,正是因为有了你们,才有了本书的问世。
关于勘误
尽管我花了大量时间和精力去核对文件和语法,但书中难免还会存在一些错误和纰漏,如果大家发现问题,希望可以反馈给我,相关信息可发到我的邮箱
[email protected]。尽管我无法保证每一个问题都会有正确的答案,但我肯定会努力回答和并且指出一个正确的方向。
如果大家对本书有任何疑问或想进行Linux的技术交流,可以访问我的个人博客,我会在此恭候大家。我的个人博客地址为http://yuhongchun.blog.51cto.com。另外,我在51CTO和CU社区的用户名均为“抚琴煮酒”,大家也可以直接通过此用户名在社区内与我进行交流。
余洪春(抚琴煮酒)