---------------------------跟老男孩学Linux运维:高性能Web集群实践(上)---------------------------
为什么要写这本书
不知不觉接触Linux(之前用的是Solaris)已经有18个年头了,在这18年的运维职业生涯中,我走过了相当多的弯路,特别是头两年相当迷茫、彷徨,最要命的是无论怎么努力学习和坚持,就是感觉自己没有入门。那时,好的Linux学习书籍寥寥无几,工作中也无人指导,更没有什么像样的培训机构,所以服务器一出故障,我就会无所适从,好多次都是在痛苦的挣扎中度过的,好多次都想要放弃学习Linux。
后来我慢慢地积累了一些经验,有了自己的运维心得。在运维技术有了质的飞跃之后,我开始酝酿一套Linux培训体系课程,最初的目的就是希望大家不要走我走过的弯路,因为这条路充满了荆棘,一不小心就可能走不出来。
经过一段时间的酝酿,我把我的想法写成一份项目策划书,发给了公司老板,希望公司能够开展IT培训相关的业务,并由我负责这块业务。老板首肯了我的策划书,给了我鼓励,但是接下来没有任何实际行动,可能是觉得时机不够成熟。
老板无动于衷,但是我的心却被策划书给拽走了,于是我就开始了我的兼职IT培训生涯,这就是“老男孩IT教育”的前身。在多年的培训教学过程中我发现,很多小伙伴因为条件的限制无法来北京现场学习,虽然我录制了大量的网络视频,但还是有非常多的朋友希望老男孩能够把课堂内容整理成书,方便他们深入学习。看到小伙伴们的热切期盼,我心动了,觉得真的该为大家做些什么,于是我开始计划把课堂内容整理成书,让全国的小伙伴都能够从中受益。
但是由于培训课程的排期很紧,平时我还要在企业里工作,而且写书和讲课也是不同的路数,因此写书计划一直被搁浅,直至遇到了机械工业出版社的杨绣国编辑,因为她的执着、包容和鼓励,使得我有足够的信心和动力完成写作,并且还在策划Linux运维实战相关的更多图书,它们后续会一一和大家见面。
现今,全球进入了互联网+时代,越来越多的传统企业都在考虑通过网络提供产品和服务,包括互联网+教育、互联网+金融、互联网+出租车、互联网+保险等。而互联网(包括移动互联网在内)几乎都是由Linux技术支撑的,掌握Linux运维技术已经成为每一个IT技术人员的必经之路,本书涉及的中小规模网站集群架构就是构建在Linux系统上的高性能高并发企业级网站集群架构的解决方案!
读者对象
Linux系统管理员和运维工程师
互联网网站开发及数据库管理人员
网络管理员和项目实施工程师
Linux相关售前售后技术工程师
开设Linux相关课程的大中专院校
对Linux感兴趣的人群
. 如何阅读本书
本书基于CentOS7.6针对中小规模网站集群的搭建、部署进行了全新的详细讲解,全书共分为12章,内容介绍如下:
第1章,主要讲解企业级CentOS7.6操作系统的安装,学完了本章,读者可以掌握操作系统搭建知识和基本企业级优化,为搭建中小规模集群奠定基础。
第2章,主要讲解Web集群架构的基础概念知识、架构模型、架构搭建规划、架构优化等,为搭建中小规模集群进一步奠定基础。
第3章,主要讲解集群后端服务Rsync数据备份与复制的应用和实践,这是企业集群后端必备的数据备份工具。
第4章,主要讲解企业级NFS网络文件共享服务,这是中小型网站集群后端的共享存储服务,简单易用,需要读者好好掌握。
第5章,主要讲解网站数据实时复制应用与实践,这部分内容一般用于用户上传的数据的实时复制,是企业后端NFS等简单共享存储离不开的服务,数据实时复制到新的服务器上才能保证不丢失。因此,本章也是比较重要的章节。
第6章,主要讲解SSHD远程连接工具的企业应用实践,这一章的内容比较基础,但是其中的免密钥应用很重要,例如,数据库的高可用工具MHA就涉及本章的知识。
第7章,主要讲解Ansiable批量管理工具的应用与实践,它是集群架构用于批量管理的重要工具,值得读者好好掌握。
第8章,主要讲解HTTP及Web服务的核心基础知识,让读者详细掌握网站服务的背后原理,为集群的搭建奠定坚实基础。
第9章,主要讲解Nginx静态Web服务应用实践,让读者掌握Web服务的搭建细节,学完本章后,读者会获益匪浅。
第10章,主要讲解企业级LNMP环境部署实践,学完本章以后,读者就可以在公网上部署自己的博客网站了。
第11章,主要讲解Nginx反向代理与动静分离架构实践,学完本章,读者就能搭建由多台Web服务器组成的集群环境了,并且可以分离提供动态和静态服务,大型网站的架构雏形由此完成。
第12章,主要讲解Keepalived高可用集群应用实践,主要解决Nginx反向代理服务高可用问题,本章结束,一套中小规模集群就搭建完毕了,读者可以看到整个中小规模集群的全貌。
老男孩后续书籍会继续以本书为基础进行丰富,搭建更大规模的集群,敬请期待。
勘误和支持
由于作者的水平有限,加之编写的时间仓促,书中难免会有一些错误和不妥之处,恳请读者批评指正。你可以将书中的错误发布在专门为本书准备的博客评论处http://oldboy.blog.51cto.com/2561410/1713128,或者到我的微博http://weibo.com/oldboy8上留言。同时不管你遇到何种问题,都可以加入我为本书提供的两个QQ交流群339128815和226199808,我将尽力为你提供最满意的解答。书中所用的各种工具及程序文件也都将发布在上述QQ群及我的博客中。如果你有更多的宝贵意见,也欢迎你发送邮件至我的邮箱oldboy@oldboyedu.com,很期待听到你的真挚反馈。
致谢
感谢李泳谊、王洪志,感谢你们在百忙之中为本书供图!
感谢王硕导师及每一个运维班级的班长及班干部,感谢你们替我分担批改作业、答疑、就业指导和管理工作。
感谢“老男孩IT教育”的每一位学员—你们的长期支持使得“老男孩IT教育”蓬勃发展,也让我有较多时间持续写作。感谢你们的支持。
感谢我的所有同事,正是他们辛勤努力的工作,使得我有时间完成此书。
感谢中网志腾的郭威和实利通和的王斐及梁露,感谢你们提供的多台DELL物理服务器,使得本书得以高效顺利的完成!
感谢森华易腾的陆锦云女士及其同事,感谢你们提供IDC机房带宽支持,使得本书得以顺利完成!
感谢机械工业出版社华章公司的杨绣国编辑,感谢你的包容和鼓励,始终支持我写作,正是你的鼓励和帮助引导我顺利完成全部书稿。
最后要感谢我的家人,感谢你们给予我的信心和力量!
谨以此书,献给支持“老男孩IT教育”的每一位朋友、学员,以及众多热爱Linux运维技术的朋友。
老男孩
中国,北京昌平沙河,2019年8月
---------------------------离散数学及其应用(原书第8版·本科教学版)---------------------------
本书是根据我多年来讲授离散数学的经验和兴趣写成的。对学生而言,我的目的是为他们提供内容准确且可读性强的教材,清晰地介绍并展示离散数学中的概念和技术。对于那些爱怀疑的学生,我的目标是展示离散数学的相关性和实用性。对于计算机科学专业的学生,我希望为他们将来的学习提供一切必需的数学基础。而对于数学专业的学生,我希望帮助他们理解重要的数学概念,并且意识到为什么这些概念对应用来说很重要。最重要的是,希望本书既能达到这些目标,又不含太多的水分。
对教师而言,我的目的是利用数学中行之有效的教学技术来设计一个灵活而全面的教学工具:只要有本书在手,教师就能迅速地从中筛选内容,以最适合特定学生的方式有效地开展离散数学的教学工作。希望我已经实现了这些目标。
在过去的30年中,本书取得了极大的成功,被世界各地超过100万名学生使用,并被翻译成多种语言,对此我感到非常欣慰。此次第8版所做的许多改进,正是得益于大量读者的反馈和建议。在这些读者中,既有来自北美600多所学校的师生,又有来自全球各地众多高校的读者,他们都曾将本书成功用作教材。由于所收到的这些反馈,以及在不断更新中所投入的大量精力,我才能够在每次升级时显著提高本书的吸引力和有效性。
本教材是为一学期或两学期的离散数学入门课程而设计的,适用于数学、计算机科学、工程等各类专业的学生。大学代数是唯一要求的先修课程,不过,要想真正学好离散数学,还是需要有一定的数学素养。本书的设计目标是满足各种类型离散数学入门课程的需求,内容高度灵活且非常全面。我希望本书不仅是一本成功的教科书,而且成为学生在日后的学习和职业生涯中可以参考的有价值的资源。
离散数学课程的目标
离散数学课程有多个目标。学生应该学会一系列特定的数学知识并知道怎样应用它们,更重要的是,这门课应教会学生怎样运用数学逻辑思维。为了达到这些目标,本教材特别强调数学推理以及问题求解的不同方法。本书中,五个重要主题将交织在一起:数学推理,组合分析,离散结构,算法思维,以及应用与建模。一门成功的离散数学课程应该小心谨慎地融合并平衡所有五个主题。
●数学推理。学生必须理解数学推理以便阅读、领会并构造数学论证。本书开篇即讨论数理逻辑,这为后续讨论证明方法打下了基础。本书描述了构造证明的方法与技巧两个方面。本书特别强调数学归纳法,不仅给出了这种证明技术的许多不同类型的实例,还详细地解释了数学归纳法为什么是一种有效的证明技术。
●组合分析。一个重要的解题技巧就是计数或枚举对象。本书中关于枚举的讨论从计数的基本技术着手。重点是运用组合分析方法来解决计数问题并分析算法,而不是简单地应用公式。
●离散结构。离散数学课程应该教会学生如何处理离散结构,即表示离散对象以及对象之间关系的抽象数学结构。这些离散结构包括集合、置换、关系、图、树和有限状态机等。
●算法思维。有些类型的问题可以通过算法的规范说明来求解。当一个算法被清楚地描述后,就可以编写计算机程序来实现之。该活动涉及的数学部分包括该算法的规范说明、正确性的验证,以及执行算法所需要的计算机内存和时间分析等,这些在本书中均有阐述。算法将采用自然语言
原书采用英语,而中译版则采用汉语。——译者注和一种易于理解的伪代码形式来描述。
●应用与建模。离散数学在几乎每个可以想到的研究领域中都有应用。许多应用涉及本书提到的计算机科学和数据网络,还有一些应用涉及更为广泛的领域,如化学、生物学、语言学、地理学、商业和互联网等。这些是离散数学的自然而又重要的应用,而非人为编造的。用离散数学来建模是一项十分重要的问题求解技巧,学生可通过一些练习来自己构造模型,从而掌握这一技巧。
本书特色
易理解性。实践证明,本书对于初学者来说是易读易懂的。书中绝大部分内容不需要比大学代数更多的数学预备知识,需要额外帮助的学生可以在配套网站找到相应工具,以将数学素养提升到本书要求的水准。书中少数几处需要用到微积分知识的地方都已注明。大多数学生应该很容易理解用于表示算法的伪代码,无论是否正式学过程序设计语言。本书不要求正规计算机科学方面的预备知识。
每章都是从易于理解和易于领会的水平开始。一旦详细介绍了基本数学概念,就会给出稍难一些的内容以及在其他研究领域中的应用。
灵活性。为了便于灵活使用,本书做了精心的设计。各章对之前章节的依赖程度都被降到最低。每章分成长度大致相等的若干节,每节又根据内容划分成若干小节以方便教学。教师可以利用章节划分灵活地安排讲课进度。
写作风格。本书的写作风格是直接而又实用的。书中使用准确的数学语言,但没有采用过多的形式化与抽象,在数学命题中的记号和词语表达间做了精心的平衡。
数学严谨性和准确性。书中所有定义和定理的陈述都十分谨慎,这样学生可以欣赏语言的准确性和数学所需的严谨性。证明则是先由动机引入,然后再慢慢展开,并且所有步骤都经过了详细论证。
例题。全书共有超过400道例题,用来阐述概念、建立不同主题之间的关联以及介绍应用。在大部分例题中,首先提出问题,然后再以适量的细节给出解法。
应用。本书中的应用展示了离散数学在解决现实世界中的问题时的实用性。这些应用涉及广泛的领域,包括计算机科学、数据网络、心理学、化学、工程学、语言学、生物学、商业和互联网。
算法。离散数学的结论常常要用算法来表述,故书中多数章节都介绍了一些关键算法。这些算法采用文字叙述,同时也采用一种易于理解的结构化伪代码来描述。对于本书中的所有算法,都简要分析了其计算复杂度。
关键术语和结论。每章最后列出关键术语和结论。关键术语只列出学生必须学会的那些,而非该章中定义的每个术语。
练习。书中包含2000多道练习题,涵盖大量不同类型的问题。不仅提供了足够多的简单练习用于培养基本技能,还提供了大量中等难度的练习和许多具有挑战性的练习。练习的叙述清晰而无歧义,并按难易程度进行了分级。练习中还包含一些特殊的讨论来展开正文中没有涉及的新概念,使得学生能够通过自己的努力来发现新的想法。
那些比平均难度稍难的练习用一个星号(*)标记,而那些更具挑战性的练习则用两个星号(**)来标记。需要用微积分知识求解的练习会明确指出。有些练习的结果要在正文中用到,我们用符号来标识这类题目。本书最后给出了所有奇数编号练习的答案或解题纲要。答案中大部分证明的步骤都十分清晰。
复习题。每章后面都有一组复习题。设计这些问题是为了帮助学生重点学习该章最重要的概念和技术。要回答这些复习题,学生必须写出较长的答案,而不是仅做一些计算或给出简答。
补充练习。每章后面都有一组丰富多样的补充练习。这些练习通常比每节后面的练习难度更大。补充练习旨在强化该章中的概念,并把不同主题更有效地综合起来。
计算机课题。每章后面还有一组计算机课题。全书共有大约150道计算机课题,用于将学生在计算和离散数学中所学到的内容联系起来。对于那些从数学角度或程序设计角度来看难度超过平均水平的计算机课题,我们用一个星号(*)标记,而那些非常具有挑战性的题目则用两个星号(**)标记。
计算和探索。每章后面都有一组计算和探索性的问题,共有大约120道。完成这些练习需要借助现有的软件工具,诸如学生或教师自己编写的程序,或像Maple或Mathematica这样的数学计算软件包。这些练习大多为学生提供了通过计算来发现一些新事实或想法的机会。(其中一些练习在配套的在线练习册《探索离散数学》(Exploring Discrete Mathematics)中也有讨论。)
写作课题。每章后面都有一组写作课题,要完成这类题目,学生需要参考数学方面的文献。有些题目本质上是关于历史知识的,需要学生查找原始资料;其他题目则将带领学生通往新内容和新思想。这些练习旨在向学生展示正文中没有深入探讨的想法,通过把数学概念和写作过程结合起来,帮助学生面对未来可能的研究领域。(在网络版或印刷版的《学生解题指南》(Student’s Solutions Guide)中可以找到为这些题目准备的参考文献。)
教辅资源
关于本书教辅资源,只有使用本书作为教材的教师才可以申请,需要的教师可向麦格劳·希尔教育出版公司北京代表处申请,电话01057997618/7600,传真01059575582,电子邮件instructorchina@mheducationcom。——编辑注
《学生解题指南》。这本可以单独购买的学生手册包含所有奇数编号练习的完整解答。这些解答解释了为什么要用某种特定的方法以及为什么这种方法管用。对于有些问题,还给出了一两种其他可能的解法,以说明一个问题可以用多种不同方法来求解。指南的内容还包括:为每章后面的写作课题推荐的参考文献;关于如何撰写证明的指南;在离散数学学习中学生常犯的各类错误;为每章提供的考试样例及解答,以帮助学生准备考试。
《教师资料手册》。本手册在网站上提供,教师也可以申请印刷版,手册中包含书中所有偶数编号练习的完整解答。手册的内容还包括:关于如何讲授本书每章内容的建议,包括每节中应强调的重点以及如何组织内容;为每章提供的考试样例,以及一个包含1500多道考试题目的可选试题库,对于所有考试样例及试题库中的题目都给出了解答;针对不同的侧重点以及不同学生能力水平的课程教学大纲样本。
致谢
感谢所有将本书用作教材的教师和学生,他们来自不同的学校,并向我提供了很多有价值的反馈和有益的建议。正是有了他们的反馈,才使本书变得更为出色。特别感谢Jerrold Grossman和Dan Jordan,作为第8版的技术评审,他们以“鹰眼”般敏锐的目光确保了本书的准确性。在本书出版过程中的各个阶段,他们两位多次审阅了本书的每个角落,帮助消除了之前勘误表中的错误,并防止出现新的错误。
感谢Dan Jordan为《学生解题指南》和《教师资源手册》做出的贡献。他在更新这些教辅资源方面完成了令人钦佩的工作。感谢Jerrold Grossman,他是本书前7版教辅资源的作者,并为Dan提供了非常有价值的帮助。还要感谢许许多多曾经为本书创建并维护在线资源的人。特别感谢Dan Jordan和Rochus Boerner,他们所做的大量工作解决了配套网站的诸多问题(后面会介绍这个网站)。
感谢第8版以及所有之前版本的审稿人。他们给予我许多有益的批评和鼓励,希望这一版不会辜负他们的期望。自从本书第1版出版以来,已经有超过200位审稿人,其中有许多来自美国以外的国家。近期审稿人列表如下。
近期审稿人
感谢阅读过本书的学生,他们提供了很多建议并报告了一些勘误。在蒙茅斯大学时,曾经上过我的离散数学课程的学生,包括本科生和研究生,从方方面面帮助我改进了书中内容。
还要感谢麦格劳希尔高等教育(本书的出版商)的工作人员,以及Aptara的生产人员。我还想感谢兰登书屋原来的编辑Wayne Yuhasz,以及本书之前的许多编辑,他们的见解和技巧是本书成功的有力保障。
我想对产品经理Nora Devlin表示深深的谢意,她所完成的工作已远远超出了既定的职责。她不仅能力出众,而且责任心强,努力解决了新版本开发过程中出现的各种问题。
还要感谢Peggy Selle,作为内容产品经理,她管理着本书的生产过程。她全程跟踪本书的流程,并帮助解决生产过程中出现的许多问题。感谢Aptara的高级产品经理Sarita Yadav和她的同事,他们的努力工作确保了本书的生产质量。
我还要对麦格劳希尔高等教育的科学、工程和数学(SEM)部门的同仁表示感谢,他们对新版本以及相关的媒体内容给予了大力支持,包括:
●Mike Ryan,高等教育副总裁,负责作品统筹和学习内容管理
●Kathleen McMahon,数学与物理科学部门常务主管
●Caroline Celano,数学部门主管
●Alison Frederick,市场经理
●Robin Reed,首席产品开发师
●Sandy Ludovissey,采购人
●Egzon Shaqiri,设计师
●Tammy Juran,评估内容项目经理
●Cynthia Northrup,数字内容部门主管
●Ruth CzarneckiLichstein,业务产品经理
●Megan Platt,编辑协调人
●Lora Neyens和Jolynn Kilburg,项目经理
●Lorraine Buczek,内容授权专家
Kenneth H. Rosen