本书针对中小规模网站集群的搭建、部署、优化进行了详细讲解,全书可分为三大部分,其中第一部分讲的是 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭建及企业级 Web 优化等进行了讲解,第三部分讲的是 Web 集群后端的数据存储和 Web 集群前端的负载均衡高可用。如果你是一名经验丰富的资深 Linux 用户,可以直接阅读第二部分内容。但如果你是一名 Linux 初学者,请一定从第1章的基础知识开始学习。
第一部分为基础篇(第1~4章),简单地介绍了 Linux 的历史沿革、Linux 的企业级选型、学习环境的搭建、Linux 的企业级系统安装、Linux 系统的基础优化,以及远程连接 Linux 及客户端 SSH 的设置等,最后比较深入地讲解了 HTTP 协议和 www 服务相关知识,为读者搭建企业级 Web 集群环境做好了准备。
第二部分为 Web 服务篇(第5~8章),着重讲解了 Linux、Nginx、MySQL、PHP(LNMP)等当下流行的 Web 环境架构的搭建、开源 blog 网站产品的安装部署、Web 优化等知识。为读者搭建企业级完整的网站 Web 集群架构做好了准备。
第三部分为集群篇(第9~15章),着重讲解了 Web 集群后端的 MySQL 数据库、Web 集群共享存储 NFS、Nginx 反向代理负载均衡、Keepalived 高可用、Memcached 缓存及 session 共享、Nagios 企业级监控等技术实战,最后为读者规划了一个中等规模的网站集群架构解决方案。
老男孩,北京老男孩 IT 教育创始人,拥有十多年一线大规模网站集群运维架构实战经验及教学培训经验,曾主导了从几台到上千台规模集群运维架构的扩展,运维架构实战知识体系全面,擅长大规模集群架构部署调优、虚拟化、云计算、大数据、MySQL 数据库等技术,是 IT 界资深的 Linux 集群架构实战专家。
老男孩也是国内 NLP 心理学运维思想体系创始人,将心理学运维思想大量应用于教学培训实践,取得了显著效果,所教学生平均就业工资及后期发展速度连续多年在国内 Linux 同行业中处于领先地位。
授课注重理论结合企业真实场景,认真负责,思维严谨,重视对学生的运维思想、规范、习惯、总结、表达沟通等能力的培养,累计受益人员数万!
不知不觉接触 Linux(之前用的是 Solaris)已经有16个年头了,在这16年的运维职业生涯中,我走了相当多的弯路,特别是头两年,相当迷茫、彷徨,最要命的是无论怎么努力学习和坚持,就是感觉自己没有入门。那时,优秀的学习书籍寥寥无几,工作中也无人指导,更没有规范的培训机构,一遇到服务器故障就会无所适从,无数次都是在痛苦的挣扎中度过的,也有无数次想要放弃学习 Linux。
后来我慢慢地积累了一些经验,有了自己的运维心得。在我的运维技术有了质的飞跃之后,我开始酝酿一套 Linux 培训体系课程,最初的目的就是希望大家不要重走我走过的弯路,因为这条路充满了荆棘,一不小心就可能走不出来了。
经过一段时间的酝酿,我将自己的想法写成一份项目策划书,发给了公司领导,希望公司能够开展 IT 培训相关的业务,而我可以负责这块业务。领导首肯了我的策划书,但是在接下来的日子没有任何行动,可能是觉得时机不够成熟吧。
但是我的心却被策划书给拽走了,于是开始了我的兼职 IT 培训生涯,这就是“老男孩 IT 教育”的前身。在多年的培训过程中我发现,很多小伙伴因为条件的限制无法到北京现场学习,虽然我们也录制了大量网络视频,但还是有网友非常希望老男孩能够把讲课的内容整理成书,以便深入学习。看到小伙伴们热切的期盼,我心动了,于是开始计划把讲课的内容整理成书,让全国的小伙伴都能够从中受益。
但是由于培训讲课的排期很紧,课程很多,平时还要在企业里工作,而且写书和讲课也是不同的路数,因此写书计划被一次次地搁浅,直至遇到了她——机械工业出版社华章公司的 Lisa,正是因为她的执着、包容、鼓励,使得我有足够的信心和动力完成此书,并且即将策划与 Linux 运维实战相关的更多图书,这些书后续会一一与大家见面。
目前,全球进入了“互联网+”时代,越来越多的传统企业都在考虑通过网络提供产品和服务,包括互联网+教育、互联网+金融、互联网电商、互联网+出租车、互联网+保险等。而互联网的背后就是 Linux 技术的时代(包括移动互联网在内),掌握 Linux 运维技术已经成为每一个 IT 技术人员的必经之路,本书的中小规模网站集群架构实战就是构建在 Linux 系统上的高性能、高并发企业级网站集群架构上的解决方案!
Linux 系统管理员和运维工程师
互联网网站开发及数据库管理人员
网络管理员和项目实施工程师
Linux 相关售前售后技术工程师
开设 Linux 相关课程的大中专院校
对 Linux 感兴趣的人群
本书针对中小规模网站集群的搭建、部署、优化进行了详细讲解,全书可分为三大部分,其中第一部分介绍与 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭建及企业级 Web 优化等进行了讲解,第三部分介绍 Web 集群后端的数据存储及 Web 集群前端的负载均衡和高可用。如果你是一名经验丰富的资深 Linux 用户,可以直接阅读第二部分内容;如果你是一名 Linux 初学者,请务必从第1章的基础知识开始学习。
第一部分为基础篇(第1~4章),简单地介绍了 Linux 的历史沿革、Linux 的企业级选型、学习环境的搭建、Linux 的企业级系统安装、Linux 系统的基础优化,以及远程连接 Linux 及客户端 SSH 的设置等,最后比较深入地讲解了 HTTP 协议和 WWW 服务相关知识,为读者搭建企业级 Web 集群环境做好了准备。
第二部分为 Web 服务篇(第5~8章),着重讲解了 Linux、Nginx、MySQL、PHP(LNMP)等当下流行的 Web 环境架构的搭建、开源 blog 网站产品的安装部署、Web 优化等知识。为读者搭建企业级完整的网站 Web 集群架构做好了准备。
第三部分为集群篇(第9~15章),着重讲解了 Web 集群后端的 MySQL 数据库、Web 集群共享存储 NFS、Nginx 反向代理负载均衡、Keepalived 高可用、Memcached 缓存及 session 共享、Nagios 企业级监控等技术实战,最后为读者规划了一个中等规模的网站集群架构解决方案。
由于作者的水平有限,加之编写的时间仓促,书中难免会出现一些错误或者不准确的地方,不妥之处在所难免,恳请读者批评指正。你可以将书中的错误发布到我专门为本书准备的博客地址处:http://oldboy.blog.51cto.com/2561410/1713128,或者在我的微博(http://weibo.com/oldboy8)上留言。同时如果你遇到任何问题,可以加入我为本书提供的两个 QQ 交流群(339128815和226199808),我将尽量为读者提供最满意的解答。书中所需的各种工具及程序文件也都将发布在上述 QQ 群及我的博客网站上,我也会将本书的勘误等及时更新。如果你有更多的宝贵意见,也欢迎你发送邮件至我的邮箱([email protected]),我很期待能够听到你们的真挚反馈。
首先要感谢伟大的 Linux 系统开发者 Linus Torvalds,是他开创了一款影响我一生的软件。
感谢李泳谊、王洪志,感谢你们在百忙之中为本书供图!
感谢王硕导师及每一个运维课程班级的班长及班干部,感谢你们替我分担老男孩 IT 教育众多学员的批改作业、答疑、就业指导和管理工作。
感谢老男孩 IT 教育的每一位学员——是你们的长期支持使得老男孩 IT 教育的业绩蒸蒸日上,让我有较多时间持续写作。感谢你们对老男孩 IT 教育的支持。
感谢我的同事 Python 自动化开发课程的 Alex(李杰)老师和武老师,高级架构师课程的赵班长老师,高薪运维就业课程的张耀助教老师,课程顾问歪歪老师、小雨老师、飞雪老师、环宇老师及其他未提及名字的老师,正是你们辛勤努力的工作,使得我有时间完成此书。
感谢中网志腾的郭威和实利通和的王斐和梁露,感谢你们提供给我的多台 DELL 物理服务器,使得本书得以高效顺利地完成!
感谢森华易腾的陆锦云女士及其同事,感谢你们提供 IDC 机房带宽资源并长期支持,使得本书得以顺利完成!
感谢机械工业出版社华章公司的编辑 Lisa,感谢你的执着支持、包容和鼓励,在近一年的时间中始终支持我的写作,是你的鼓励和帮助引导我能顺利完成全部书稿。
最后要感谢我的父母、家人,感谢你们将我培养成人,并时时刻刻为我灌输着信心和力量!
谨以此书,献给支持老男孩 IT 教育的每一位朋友、学员,以及众多热爱 Linux 运维技术的朋友。
老男孩
本章以操作系统的介绍作为开篇,首先介绍操作系统的基础概念及操作系统的原理;然后,带领读者了解 UNIX 的发展史以及市面上常见的 UNIX 系统版本,并对 UNIX/Linux 诞生及发展情况进行了说明,附带介绍了发展过程中的关键人物;之后,讲解需要重点掌握的 GNU、GPL 等名词知识,并对本书“主人公”Linux 的优秀特性、常见的 Linux 发行版本及不同场景下的选择进行了分析;最后,带读者了解互联网常用的两个重点 Linux 版本:CentOS 和 Red Hat Linux,并完成 CentOS Linux 的基本环境搭建准备工作。
如果被问到什么是操作系统,可能很多初学者都会一脸茫然。虽然我们都知道平时一直在用的 Windows XP、Windows 7、Windows 8 其实就是操作系统,却无法准确给出操作系统的定义,或者向提问者解释清楚什么是操作系统。
操作系统,英文名称为 Operating System,简称 OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行及用户操作必备的基础环境支撑,是计算机系统的核心。
操作系统的作用是管理和控制计算机系统中的硬件和软件资源,它除了直接管理计算机系统的各种硬件资源(如 CPU、内存、磁盘等)以外,还会对系统资源供需的优先顺序进行管理。此外,操作系统还可以控制设备的输入、输出及操作网络与管理文件系统等事务。同时,它也负责对计算机系统中各类软件资源进行管理(例如各类应用软件的安装、运行环境设置等)。图1-1是操作系统与计算机硬件、软件之间的关系示意图。
综上所述,可以给操作系统一个基本的定义:
操作系统是计算机系统中必不可少的基础系统软件,它的作用是管理和控制计算机系统中的硬件和软件资源,合理地组织计算机系统的工作流程,以便有效地利用这些资源为使用者提供一个功能强大、使用方便的操作环境。它在计算机系统(硬件)与使用者之间起到接口的作用。
上面的定义听起来是不是有些复杂?那老男孩就来帮助大家更简单快速地理解什么是操作系统。操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软件。例如:操作系统会在接收到用户输入的信息后,将其传给计算机系统硬件核心进行处理,然后再把处理结果返回给使用者。图1-2是简单理解操作系统作用的示意图。
图1-1 操作系统与计算机软硬件关系示意图
图1-2 简单理解操作系统作用的示意图
目前 PC(Intel x86 系列)上比较常见的操作系统有 Windows、Linux、DOS、UNIX 等。
与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件。但是与 Windows 不同的是,Linux 是一套开放源代码程序的,并可以自由传播的类 UNIX 操作系统软件(UNIX 系统是 Linux 系统的前身,具备很多优秀特性)。其在设计之初,就是基于 Intel x86 系列 CPU 架构计算机的。它是一个基于 POSIX[1]的多用户、多任务并且支持多线程和多 CPU 的操作系统。
Linux 是由世界各地成千上万的程序员设计和开发实现的。当初开发 Linux 系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类 UNIX 操作系统兼容产品。在过去的20年里,Linux 系统主要被应用于服务器端、嵌入式开发和个人 PC 桌面3大领域,其中服务器端领域是重中之重。
我们熟知的大型、超大型互联网企业(百度、新浪、淘宝等)都使用 Linux 系统作为其服务器端的程序运行平台,全球及国内排名前十的网站使用的主流系统几乎都是 Linux 系统。
从上面的内容可以看出,Linux 操作系统之所以如此流行,是因为它具有如下一些特点:
是开放源代码的程序软件,可自由修改。
UNIX 系统兼容,具备几乎所有 UNIX 的优秀特性。
可自由传播,无任何商业化版权制约。
适合 Intel 等 x86 CPU 系列架构的计算机。
技巧:好的总结习惯很重要,学会主动对阶段性的知识进行小结是学好 Linux 运维的重要习惯。
说到 Linux 的起源,就不得不提到 Linux 之前的 UNIX 系统。UNIX 系统于1969年在 AT&T 的贝尔实验室诞生,20世纪70年代它逐步盛行,这期间又产生了一个比较重要的分支,就是大约1977年诞生的 BSD(Berkeley Software Distribution)系统。从 BSD 系统开始,各大厂商及商业公司根据自身公司的硬件架构,并以 BSD 系统为基础进行 UNIX 系统的研发,从而产生了各种版本的 UNIX 系统,例如:SUN 公司的 Solaris、IBM 公司的 AIX、HP 公司的 HP UNIX 等。图1-3给出了 UNIX 系统诞生、发展的时间及版本分支介绍,供读者参考。
图1-3 UNIX 诞生及版本分支发展简略图解
在图1-3中可以看到,本书的“主人公”Linux 系统诞生于1991年左右,可以说 Linux 是从 UNIX 发展而来的。
细心的读者应该看到前文曾提到“类 UNIX 操作系统兼容产品”或“类 UNIX 操作系统软件”吧?可为什么都要开发类 UNIX 系统呢?那是因为 UNIX 是一个非常棒的操作系统,它很像一个非常聪明伶俐但不太听话的孩子,而开发者们在开发系统时,一方面想要继承它的“聪明伶俐”,另一方面又想改善它不听话的一面,故而会有如此考虑。
那么 UNIX 都有哪些“聪明伶俐”的特点呢?一起来看看吧。
1.技术成熟,可靠性高
使用 UNIX 系统时,即使连续运行若干年也无需重启,它依然可以工作得非常好。毫不夸张地说,只要计算机硬件不坏,UNIX 就很难出现问题。
2.极强的可伸缩性
UNIX 支持的 CPU 处理器体系架构非常多,包括 Intel/AMD 及 HP-PA、MIPS、PowerPC、UltraSPARC、ALPHA 等 RISC 芯片,以及 SMP、MPP 等技术。
提示:可能是由于早期各大厂商都基于 UNIX 进行适合自己的硬件开发,因此,UNIX 支持的 CPU 架构才更多。
3.强大的网络功能
Internet 互联最重要的协议 TCP/IP 就是在 UNIX 上开发和发展起来的。此外,UNIX 还支持很多常用的网络通信协议,如 NFS、DCE、IPX/SPX、SLIP、PPP 等。
4.强大的数据库支持能力
Oracle、DB2、Sybase、Informix 等大型数据库,都把 UNIX 作为其主要的数据库开发和运行平台,一直到目前为止,依然如此。
5.强大的开发功能
正是 UNIX 促使了 C 语言的诞生,并相互促进与发展,成为当时工程师的首选操作系统和开发环境。互联网早期有重大意义的软件新技术的出现几乎都在 UNIX 上,例如:TCP/IP、WWW、Java、XML 等。在互联网早期具有重大意义的软件及新技术几乎都出现在 UNIX 上。
20世纪70年代中后期,由于各厂商及商业公司开发的 UNIX 及内置软件都是针对自己公司特定硬件的,因此在其他公司的硬件上基本上无法直接运行,而且当时没有人对开发基于 x86 架构 CPU 的系统感兴趣。另外,20世纪70年代末,UNIX 又面临了突如其来地被 AT&T 回收版权等重大问题,特别是要求禁止对学生群体提供 UNIX 系统源代码,这一度引起当时 UNIX 业界的恐慌,也因此产生了商业纠纷。
UNIX 面临版权回收,以及代码不开源等的问题,直接或间接导致了新的类 UNIX 系统的诞生,以及自由软件运动的建立和发展。
1984年,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和 GNU 项目。当时发起这个自由软件运动和创建 GNU 项目的目的其实很简单,就是想开发一个类似 UNIX 系统,并且是自由软件的完整操作系统,也就是要解决20世纪70年代末 UNIX 版权及软件源代码面临闭源的问题,这个系统叫做 GNU 操作系统。
也是在20世纪80年代初期,同样是由于之前的 UNIX 系统版权和源代码限制等问题,当时大学里教学 UNIX 系统的束缚很大。因此,一个大学的教授(名字为 Andrew Tanenbaum,谭邦宁),大概于1984年开始着手编写新的用于教学的 UNIX 系统,目标是开发新 UNIX 系统,使其尽可能地与原有的 UNIX 系统兼容,并且可以运行于 x86 PC 平台,这个系统的名字为 Minix。
老男孩补充:由于谭邦宁开发这个 Minix 系统的目的只是用于教学,因此,Minix 系统的功能无法满足商用的需求,但是 Minix 的产生对于 Linux 的诞生是至关重要的,且看下文。
Linux 系统的诞生始于芬兰赫尔辛基大学的一位计算机系名为 Linus Torvalds 的学生。在大学期间,他接触到了学校的 UNIX 系统,但是当时的 UNIX 系统仅为一台主机,且对应了多个终端,使用时存在操作等待时间很长等一些问题,无法满足年轻的 Linus Torvalds 的使用需求。因此他萌生了自己开发一个 UNIX 的想法。不久,他找到了前文提到的谭邦宁教授开发的用于教学的 Minix 操作系统,和我们现在一样,他把 Minix 安装到了他的 I386 个人计算机上。此后,Torvalds 又陆续阅读了 Minix 系统的源代码,从 Minix 系统中学到了很多重要的系统核心程序设计理念和设计思想,从而逐步开始了 Linux 系统雏形的设计和开发。
Linux 的标志和吉祥物为一只名字叫作 Tux 的企鹅——Torvalds’UNIX,如图1-4所示。
图1-4 企鹅 Tux
1.Linux 的发展历程简介
1984年,Andrew S.Tanenbaum 开发了用于教学的 UNIX 系统,命名 为Minix。
1989年,Andrew S.Tanenbaum 将 Minix 系统运行于 x86 的 PC 平台。
1990年,芬兰赫尔辛基大学学生 Linus Torvalds 首次接触 Minix 系统。
1991年,Linus Torvalds 开始在 Minix 上编写各种驱动程序等操作系统内核组件。
1991年年底,Linus Torvalds 公开了 Linux 内核源码0.02版(http://www.kernel.org),注意,这里公开的 Linux 内核源码并不是我们现在使用的 Linux 系统的全部,而仅仅是 Linux 内核(kernel)部分的代码。
1993年,Linux 1.0 版发行,Linux 转向 GPL 版权协议。
1994年,Linux 的第一个商业发行版 Slackware 问世。
1996年,美国国家标准技术局的计算机系统实验室确认 Linux 版本1.2.13(由 Open Linux 公司打包)符合 POSIX 标准。
1999年,Linux 的简体中文发行版问世。
2000年后,Linux 系统日趋成熟,涌现大量基于 Linux 服务器平台的应用,并广泛应用于基于 ARM 技术的嵌入式系统中。
2.Linux 发展历程中相关人物
我们一定要向前辈们致以深深的敬意,没有他们,就没有今天优秀的 Linux 系统(如图1-5所示)。
图1-5 Linux 系统诞生发展过程中关键代表人物
1.自由软件
简单地理解,自由软件的核心就是没有商业化软件版权制约,源代码开放,可无约束自由传播。
注意:自由软件强调的是权利问题,而非是否免费的问题。大家一定要理解这个概念,自由软件中的自由是“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。
自由意味着 freedom,而免费意味着 free,这是完全不同的概念。例如:Red Hat Linux 自由但不免费,CentOS Linux 是自由且免费的。
自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。更精确地说,自由软件赋予软件使用者四种自由[2]:
不论目的为何,有运行该软件的自由。
有研究该软件如何运行,以及按需改写该软件的自由。当然,取得该软件源代码为达成此目的之前提。
有重新发布拷贝的自由。
有改进该软件,以及向公众发布改进的自由,这样整个社群都可受惠。同样,取得该软件的源码为达成此目的之前提。
2.FSF
FSF(Free Software Foundation)的中文意思是自由软件基金会,是 Richard Stallman 于1984年发起和创办的。FSF 的主要项目是 GNU 项目。它的目的是建立可自由发布和可移植的类 UNIX 操作系统产品。GNU 项目本身产生的主要软件包括:Emacs 编辑软件、gcc 编译软件、bash 命令解释程序和编程语言,以及 gawk(GNU’s awk)等。
GNU 的全称为 GNU’s not unix,意思是“GNU 不是 UNIX”。GNU 计划又称革奴计划,是由 Richard Stallman 在1984年公开发起的,是 FSF 的主要项目(如图1-6所示)。前面已经提到过,这个项目的目标是建立一套完全自由的和可移植的类 UNIX 操作系统。
图1-6 GNU 相关图片纪念
GNU 类 UNIX 操作系统是由一系列应用程序、系统库和开发工具构成的软件集合,并加上了用于资源分配和硬件管理的内核。
但是 GNU 自己的内核 Hurd 仍在开发中,离实用还有一定的距离。因此,这个 GNU 系统并没有流行起来。现在的 GNU 系统通常是使用 Linux 系统的内核,加上 GNU 项目贡献的一些组件,以及其他相关程序组成的,这样的组合被称为 GNU/Linux 操作系统。
到1991年 Linux 内核发布的时候,GNU 项目已经完成了除系统内核之外的各种必备软件的开发。在 Linus Torvalds 和其他开发人员的努力下,GNU 项目的部分组件又运行到了 Linux 内核之上,例如:GNU 项目里的 Emacs、gcc、bash、gawk 等,至今都是 Linux 系统中很重要的基础软件。
1.GPL
GPL 全称为 General Public License,中文名为通用公共许可,是一个最著名的开源许可协议,开源社区最著名的 Linux 内核就是在 GPL 许可下发布的。GPL 许可是由自由软件基金会创建的。
1984年,Richard Stallman 发起开发自由软件的运动后不久,在其他人的协作下他创立了通用公共许可证(GPL),这对推动自由软件的发展起到至关重要的作用,那么,这个 GPL 到底是什么意思呢?
简单地理解,GPL 许可的核心是保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件的源代码权利,但都必须同时给出具体更改的源代码。
虽然整个 Linux 内核是基于 GNU 通用公共许可的,但是 Linux 内核并不是 GNU 计划的一部分,这一点请读者不要混淆。
2.LGPL
LGPL(Lesser General Public License)相对于 GPL 较为宽松,允许不公开全部源代码,为基于 Linux 平台开发商业软件提供了更广阔的空间。对于该知识点,本书仅提及一下,有兴趣的读者可到网上查询相关信息。
Linux 操作系统的核心为 Linus Torvalds 开发的 kernel,Linux 内核之上的组件分为几部分:一部分是 GNU 组件,如 Emacs、gcc、bash、gawk 等;另一些重要组成部分则来自于加利福尼亚大学伯克利分校的 BSD UNIX 项目和麻省理工学院的 X Windows 系统项目,以及在这之后成千上万的程序员开发的应用程序等(见表1-1)。正是 Linux 内核与 GNU 项目、BSD UNIX 及 MIT 的 X11(X Windows)的结合,才使得整个 Linux 操作系统很快形成,并得到了发展,进而组成了今天优秀的 Linux 系统。
Linux 操作系统=Linux 内核+GNU 软件及系统软件+必要的应用程序
表1-1 Linux 系统各组成部分的贡献人员
Linux 系统的核心组成原理示意图参照图1-1。
[1] POSIX 全称为 Portable Operating System Interface,中文翻译为可移植操作系统接口,POSIX 标准定义了操作系统应该为应用程序提供的接口标准。
[2] 此部分内容参考自 GNU 官方网站。
阅读全文: http://gitbook.cn/gitchat/geekbook/5c3e9545be5fed35a4e4e351