前言
我的系统运维观
我做系统运维工作也好几年了,基本上应付过各种各样的运维环境和工具。从最开始简单的各种应用部署,比如常用的LVS、HAproxy这样的负载应用、Apache、Nginx这类的Web应用,到MySQL数据库的主从结构的部署,以及云计算Hadoop、各种监控(Cacti、Zabbix)、缓存(Squid、Varnish、Nginx、Memcached、Redis)等,无不有所涉足。
此后,更多的工作是根据实际的情况来设计架构。这不仅可以让系统稳定、高性能地运行,还需要在未来的扩展中不影响整个的业务的运行。整体架构的清晰对企业的发展是很重要的,如果上层企业领导不重视或者是外行人领导内行人的话,企业的人力成本、硬件成本等会有更多的消耗。
随着企业的发展、软硬件的增加,有一个健壮的自动化运维平台也是增加效率、减少人力成本,也是很好的方法。可惜很多企业不重视运维,认为只要有个人随便能应付就行,等企业发展起来想做调整也不行了,反而浪费了更多的人力物力。
想做好运维师这个职位,不仅要有相应的技术,还需要在一个具备发展眼光的技术团队和公司。否则只能是混日子,而这不论对公司还是个人都不是一个好的发展。
系统运维师这个职业,就是这样,不断面临新的问题和挑战,也需要不断学习新的知识和概念。不过一路走来,我感觉所有的付出都有所回报,还是值得的。
写作本书的目的
我工作有七八年时间了,期间也做过技术培训中心的讲师。在教学过程中,我发现很多学生在进入企业后有些是无法胜任工作的,这里不排除一些因为上课不好好听讲、课后不认真练习的学生;另一方面也有可能企业的线上环境比较复杂,再加上自己也没什么职业目标不明确干什么,不重视基础知识积累,实践经验少,根本不会计算流量、软件选型等。所以,我有了写这本书的想法,结合我个人在网站架构上的技术经验和培训时的教学思路,可以帮助初中级读者进行技术方面的一次系统的学习(包括负载、页面级缓存、NoSQL、分布式文件系统、监控)。由浅入深地介绍这些内容,也可以让初中级读者在网站架构上有一个清晰的认识,在多种应用软件中选择适合企业的来完善企业的网站架构。
本书中所提到的系统均为CentOS 5.6,所讲的应用,所提供的脚本均来自于线上生产环境,大家可以直接使用。
希望大家通过学习本书,能够掌握网站架构各种技术的应用,以及在一定程度上可以设置实用的网站架构,使自己的职业技能有一个质的提高。这是我期望看到的,也是我写这本书的目的。
读者对象
本书的读者对象如下:
网站运维工程师
系统管理员和系统工程师
网络管理员和企业网管
计算机相关专业的学生
如何阅读本书
本书的结构是按一般网站的架构需求顺序来编写的。全书共分为7篇16章。
第一篇是架构规划篇,也就是第1章,主要介绍了对企业网站架构的选型、系统的快速安装及初始化高性能系统的一些参数。
第二篇为负载应用篇,包括第2章到第4章。第2章介绍了LVS+KeepAlived,这是可以媲美硬件负载的开源软件。第3章则简单地介绍了Haproxy,它是提供高可用性、负载均衡以及基于TCP和HTTP应用的代理。第4章介绍的是Nginx的负载功能,它可以按照多种方式对后端的应用服务器做负载均衡。这些内容都是网站前端必然用到的知识,建议大家多花些精力和时间学习。
第三篇为页面缓存篇,包括第5章、第6章和第7章。第5章介绍了老牌的代理服务器和Web缓存服务器软件Squid。第6章介绍相对更为高性能的缓存软件Varnish。第7章介绍了应用在流量不大环境中Nginx的缓存功能。
第四篇为Web服务器篇,包括第8章和第9章两章。第8章介绍了几乎可以在任何平台上运行、世界使用排名第一的Web服务器软件Apache。第9章介绍了一款轻量级软件Nginx,其并发能力在同类型的Web服务器中表现较好,此外,还简单介绍了Lighttpd的安装和配置。
第五篇是数据缓存篇(NoSQL),包括第10章、第11章和第12章。第10章首先对NoSQL的概念进行简单介绍,然后,介绍了Memcache的机理、安装和使用。第11章则介绍了拥有更多的Value类型、持久化和主从功能的Redis。第12章介绍了基于分布式文件存储的数据库MongoDB。
第六篇为文件服务篇,包括第13章和第14章。第13章介绍了一个具备容错功能的网络分布式文件系统MFS,它可以将数据分布在网络中不同服务器上。第14章介绍了Hadoop,它不仅仅是一个用于存储的分布式文件系统,而且可以用来在通用计算设备组成的大型集群上执行分布式应用框架。
第七篇监控应用篇,也是最后一篇,包括第15章和第16章。第15章介绍了各大IDC都在使用监控流量的Cacti。第16章介绍了Zabbix,这是一款基于Web界面的提供分布式系统监视以及网络监视功能的软件。
附录部分分别给出了ipvsadm命令参考、HAProxy关键字列表、Squid客户端命令行参考等常用的信息。
大家可以根据自己的需求选择阅读侧重点,不过我还是希望你能够按照顺序来阅读,这样不仅仅可以对架构上有一个清晰的认识,还可以对架构中的技术有一个简单的对比。
本书体例说明
本书编写体例有以下几点提醒读者注意。
命令行
需要输入的命令行,用加粗的等宽字体表示。如下所示:
/usr/local/sbin/keepalived -D -f /usr/local/etc/keepalived/keepalived.conf
配置文件
一般的配置文件,使用常规等宽字体表示。如下所示:
! Configuration File for keepalived global_defs { notification_email { admin@example.com }
配置文件说明或注释
文件的说明或注释,用#符号开头,并用仿宋字体表示。如下所示:
#让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数“-D”
注意和提示
注意和提示,是需要提醒读者特别注意的内容。其标题用黑体,内容用楷体表示。如下所示:
提示
系统默认状态没有HAProxy用户和组,需要自行添加。
致谢
感谢我的妹妹,在我最初刚来北京时给我的诸多照顾,让我能很快地熟悉北京的环境。
感谢在我上学时对学生非常负责的英语老师孙老师,她的教诲使我以后学习和使用英语很是便利。
感谢一起工作过的唐华、王锴、祝传雷、左辉、魏学丰、王涛,不论是在工作方面还是技术方面都给了我很大的帮助,让我少走了不少弯路。
感谢Chinaunix的编辑们,特别是天晴、send_linux、小尾巴鱼,正是有了你们对我的帮助,本书才有机会为广大的读者知晓。
感谢QQ群中Linux/UNIX系统运维群、Linux饭醉团伙、系统运维专业群的很多朋友,和群里的朋友一起研究学习,一起聊天解闷,非常开心,也谢谢你们对我的支持以及对这本书的期待。特别感谢好友pcghost,他在Nginx环境中很有研究,对本书Nginx章节中的内容给予很好的建议和很大的帮助。
感谢本书编辑对我的各种指导,使我的写作水平有了很大的提高。
感谢在工作和生活中帮助过我的所有人,感谢你们,正是因为有了你们,才有了本书的面世。
关于勘误
虽然花了很多时间和精力去核对书中的文字、代码和图片,但因为时间仓促和水平有限,书中仍难免会有一些错误和纰漏,如果大家发现什么问题,恳请反馈给我,相关信息可发到我的邮箱danshenguizu1982@163.com。我肯定会努力回答疑问或者指出一个正确的方向。
如果大家对本书有任何疑问或想与我探讨Linux相关的技术,可以访问我的个人博客,地址为:liuxin1982.blog.chinaunix.net。另外,我在ChinaUnix社区的ID为Gray1982,大家也可以直接通过此ID在社区中与我在线交流。