资深系统运维专家撰写,知名运维专家联袂推荐,注重方法和思路,将枯燥的操作上升到设计和建模高度。本书站在IT基础架构视角,分析数据中心选型与规划、管理流程设计与实施、基础服务构建、系统运维实务处理、职业发展探讨等,大致可划分为六部分,16章。
第1章,谈谈笔者心中的IT基础架构标准、写作初衷和本书特点等。
数据中心篇(第2~5章),综合介绍数据中心、网络、系统等多个技术领域的主题。笔者曾亲手规划、建设多个同城数据中心,经验丰富,难有雷同之作。
管理流程篇(第6章),管理流程是基础架构中重要的核心组件,剖析CMDB、Workflow的设计原则与注意事项,简洁而不简单。
基础服务篇(第7~11章),基于多机房和海量节点,分享如何去构建DNS、NTP、文件共享、配置管理等一整套服务的方法,事半功倍。
系统运维篇(第12~15章),与日常运维管理的工作相关,诸如硬件故障处理与维修、安全、性能较准、Shell程序等,临危不乱。
第16章,聊聊系统运维工程师应该具备的素养,如何提升自己。
本书穿插13个有趣的运维小故事,读累了在这里喘口气,里面蕴藏着很多收获呢。
1)资深系统运维专家撰写,知名运维专家联袂推荐,注重方法和思路,将枯燥的操作上升到设计和建模高度
2)站在IT基础架构视角,分析数据中心选型与规划、管理流程设计与实施、基础服务构建、系统运维实务处理、职业发展探讨等
前言
2015年,国务院政府工作报告中提出制定互联网 的行动计划。在这个大背景时代的推动下,越来越多的传统行业面临着与云计算、大数据等热门技术相结合的发展趋势。在漫长的转型过程中,传统企业的IT部门面临着基础架构变革的严峻考验,运维团队不可避免地遇到了很多棘手的难题。例如,管理模式如何由集中式向分布式转型,小型机到x86的演变,海量运维模式的挑战,以及知识结构与运维思路的转变,等等。这些都是目前传统行业IT部门领导者所面临的主要问题。
随着电商的流行,也有很多非IT领域的成功企业正在酝酿着自己的O2O市场,希望借助互联网完成第二次创业。他们遇到的最大问题就是对互联网的认知完全是一片空白。要实现从无到有的原始积累,会有很多挑战在等着他们。
为什么要写这本书
基于上述这些问题,我们策划了这套IT基础架构丛书。作为这个系列的第一部作品,我个人的压力还是蛮大的。当机械工业出版社华章公司的高婧雅编辑和我约稿时,自己竟然一时有些不知所措。算起来,我从事系统运维的工作已满十个秋冬。说来惭愧,我觉得自己并没有什么拿得出手的成绩。不论是实践还是基础,市面上这方面的书已经非常多了。那么,以什么作为出发点是合适的呢?最终,我还是从《运维前线》这本书中获得了启发。2017年3月,由云技术社区创始人肖力发起并策划的《运维前线》成功出版,让我感受到了同行们乐于分享的热情,同时也看到了广大读者对实用、落地的技术方案的渴求与肯定。于是,我产生了一个新的想法:在《运维前线》主打实用的基础之上,围绕着我所擅长的系统运维方向,写一部《运维前线》的系统版。
本书特色
不管怎么说,技术是一个很枯燥的东西。我自己在学习的过程中也深有体会。拗口的描述、复杂的逻辑是很多技术文档的通病。也许这样的表达形式是严谨的,但它并不亲民。我认为,一本好书不但要有深度,更要带领读者一同到达才行。这个深度就像西游记中的水帘洞,如果只有你自己进去了,却把读者晾在一边,那真是太糟糕了。如果一本书洋洋洒洒几十万字,读者看完后没有任何收获,那我宁愿不去写它。因此,打比方和举例子是我在全书中用得最多的写作手法。通俗易懂,是我在技术分享时所秉持的一贯态度。我希望消除掉一切阻碍的门槛,让每一位读者朋友都能够从本书中获得些许的帮助。
选择撰写本书是有着特别的意义的。既然是实践,我们首先要保证技术的实用性。但从定位上讲,它又不同于以往的实践类书籍。书中讲述的所有内容都是笔者正在或者曾经使用过的,并将一些经验和观点融在其中。写这本书,也算是对我多年工作经验的一种总结,了却自己的一桩心愿吧。
读者对象
说到这本书的定位,我想它对绝大多数从事系统运维的工作者都是有益的。本书需要一点点Linux和网络的基础知识作为铺垫,除此之外再无其他要求。对于工作3~5年的朋友们,我知道你们已经厌倦了基本的系统管理,但你们也许有点儿迷茫,不知道下一步该如何进阶。对于那些传统行业面临IT基础架构转型的系统运维团队,你们可能在系统管理方面经验丰富,但是对大规模、分布式x86平台的系统运维却感到陌生。还有那些刚刚到创业公司的中生代技术人,你们可能在工作中会遇到更多新的挑战。我想,选择这本书对你们来说是再适合不过的了。当然,如果你早已是这方面的行家里手,也不妨来读读本书。我的一些经验也许能帮到你,我的一些经历也许能让你感同身受,我的一些观点也许能让你会心一笑,只当是我与你之间的一次未曾谋面的技术交流好了。
如何阅读本书
本书从内容上大致分为六大部分,共计16章内容。
第一部分(第1章),笔者对心中的IT基础架构标准、本书的写作初衷和特点等做了阐述。
第二部分是数据中心篇(第2~5章)。这是一个综合了数据中心、网络、系统等众多技术领域的主题。我作为一个经历过创业公司的老员工,对此深有体会。从无到有,我亲手规划、建设了多个同城的数据中心,后续又和两位牛人学习了很多相关的知识。该篇也许真的非常跨界,我想在所有讲解系统技术的书籍里,难有雷同之作。作为一名真正的SE,只懂操作系统是不合格的。所以,我认为这个跨界还是值得的。
第三部分是管理流程篇(第6章)。这是一个特殊的篇章,因为它特殊到只有一章。如果能够进一步展开,这个主题其实完全可以独立成书。管理流程是基础架构中最为重要的核心组件。我想没有人会反驳这个观点,除非他所运维的节点数量还不够多。
第四部分是基础服务篇(第7~11章)。本篇内容基于多机房和海量节点,介绍了如何去构建DNS、NTP、文件共享、配置管理等一整套服务的方法。
第五部分是系统运维篇(第12~15章)。这部分内容主要和日常运维管理的工作相关。例如,硬件故障处理与维修、安全、性能校准、Shell程序等。如果要做推荐,我会更倾向于数字证书那一章。因为那是我刚入行时的专业方向,和数字证书打了这么多年的交道,写这一篇时也算是一种情怀吧。
第六部分(第16章),这部分介绍系统运维工程师应该具备的素养,以及如何提升自己等内容。
此外,这本书中还有13个有趣的运维小故事。它们很像登山时的休息点,如果你读累了,可以在这里歇歇脚,喘口气。其实,故事里面也蕴藏着很多收获呢。
不过,这还不是本书全部的内容。既然我受到了《运维前线》的启发,为了表示敬意,我也继承了《运维前线》一书的设计形式。最后一章,藏着一个有趣的彩蛋,等待着读者朋友们去发现。好了,我想我说得已经够多的了,我们在书中相见吧。
勘误和支持
由于笔者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如有任何反馈与想法,请你发送电子邮件到itarch@qq.com。真诚地期待能够得到你的反馈,在技术之路上互勉共进。
致谢
在写作这本书时,我得到了很多朋友的帮助。例如我的同事张望和徐铁军两位大牛。张望是网络方面的专家,铁军则有着多年的IDC管理经验。撰写数据中心篇章时,关于一些技术问题的求证,两位给予了我很多的支持与帮助。能和你们在一起工作真好,谢谢两位。
感谢云技术社区的北极熊,熊总在各大社区中不遗余力地帮忙推广本书,做了很多无私的工作。感谢我的那些新老朋友们,在我成书之时,他们帮我撰写书评,给了我很多的鼓励与支持。谢谢你们的帮助与肯定。
此外,在这里我还要特别感谢两位老师。一位是云技术社区的肖力,另一位是机械工业出版社华章公司的高婧雅老师。两位老师是指引我走上写作道路的领航人,虽然都只有一面之缘,但他们却给我提供了很多的帮助和支持。2015年,我加入了力哥发起的《运维前线》的写作团队。也正是通过这次写作得到了婧雅编辑的肯定,进而才有了这部书稿的成文。力哥在百忙之中亲自为我作序,婧雅为我的写作提供了很多有价值的指导意见。可以说,没有两位就没有这部书的出版。谢谢所有支持我、关心我、帮助我的朋友们,感激之情溢于言表,谢谢大家!
谨以此书献给广大热爱技术的朋友们!
赵旻
赵旻,获得RHCA/RHCSS/MCITP认证,十年以上互联网金融、电信、政府等多领域背景的从业资历,曾参与中国国家电子政务多项重点工程的安全信任体系的建设工作,为中国移动、中国航空等大型企业提供技术支持。熟悉x86平台基础架构系统的建设、管理及运维工作,并醉心于运维产品的设计与体验。乐于在工作实践中分析问题、总结经验,具有持续优化的能力,属于主动管理型的工作者。
资深面试官,产品设计评论人,《运维前线》联合作者,现专注于管理学、产品设计、基础架构运维等领域。
目 录
本书赞誉
序
前言
第1章 混沌初开1
1.1 我眼中的基础架构1
1.2 写一本怎样的书3
1.2.1 英文书的伤痛4
1.2.2 有话直说这就是我的忍道4
1.2.3 当行家说人话5
1.3 本书声明6
第2章 如何选择优质的数据中心7
2.1 概述7
2.2 空间环境评估9
2.2.1 地质环境9
2.2.2 空间结构10
2.3 基础设施评估13
2.3.1 电气系统13
2.3.2 空调系统17
2.3.3 消防系统21
2.3.4 弱电与综合布线系统22
2.4 网络建设评估23
2.5 服务保障评估23
2.6 本章小结24
第3章 数据中心的规划设计工作26
3.1 需求的不确定性29
3.2 如何避免变化打乱规划30
3.2.1 采购资源预留30
3.2.2 数据中心机柜区域的规划与布局31
3.2.3 规划布局案例33
3.3 规划设计心得35
3.4 本章小结41
第4章 网络规划细节对系统运维的影响42
4.1 案例复盘44
4.2 事情为什么弄得一团糟48
4.3 网络空间资源的规划50
4.3.1 PoD容量的计算方法50
4.3.2 地址空间的规划51
4.3.3 VLAN的规划52
4.4 网卡绑定54
4.4.1 网卡绑定模式的选择54
4.4.2 网卡绑定的实现57
4.5 本章小结58
第5章 服务器硬件选型59
5.1 如何选择合适的硬件配置59
5.1.1 选型的总体原则60
5.1.2 选型中值得注意的地方60
5.2 怎样的一款服务器产品才算是优秀的62
5.2.1 带外管理有多重要63
5.2.2 异构平台融合能力63
5.2.3 完善的信息数据展示65
5.2.4 软硬件环境兼容性66
5.2.5 用户体验67
5.3 产品测试那些事儿69
5.3.1 测试前的准备工作69
5.3.2 部署系统测试70
5.3.3 产品功能性测试70
5.3.4 能耗测试71
5.3.5 CPU性能测试81
5.3.6 内存性能测试82
5.3.7 磁盘性能测试83
5.3.8 网络性能测试87
5.3.9 测试后的收尾工作90
5.4 本章小结91
第6章 构建CMDB与Work-flow92
6.1 谁拖了运维的后腿93
6.2 定海神针CMDB94
6.2.1 CMDB是一切运维的基石95
6.2.2 是什么毁了CMDB97
6.2.3 如何定义你的需求98
6.2.4 如何定义表结构99
6.2.5 设计思想原则103
6.3 多面娇娃Workflow106
6.3.1 一份周报中竟然80%的工作量都是在沟通106
6.3.2 Workflow能干什么107
6.3.3 Workflow是实例化的规范107
6.3.4 Workflow是领航员108
6.3.5 Workflow设计中的常见问题109
6.4 本章小结113
第7章 构建IaaS平台系统115
7.1 高效交付解决方案如何选型117
7.2 服务器设置详解119
7.2.1 IPMI121
7.2.2 racadmin121
7.2.3 SMASH CLP123
7.3 Cobbler部署系统详解124
7.3.1 理解Cobbler架构124
7.3.2 Cobbler的安装配置125
7.3.3 命名规范128
7.3.4 创建资源目录130
7.3.5 创建Cobbler部署模板与实例131
7.3.6 Cobbler里面出现的坑133
7.4 IaaS系统的设计要点136
7.4.1 交付工作流程定义136
7.4.2 Portal模块与各组件之间的调用关系137
7.5 制作KVM虚拟机模板139
7.5.1 虚拟机网络环境部署140
7.5.2 创建虚拟机镜像模板142
7.5.3 虚拟机克隆143
7.5.4 虚拟机设备调整144
7.5.5 VPC的支持145
7.6 本章小结149
第8章 构建域名解析服务150
8.1 写在前面的话150
8.2 首先做好一个传统的DNS管理员151
8.3 Anycast DNS在多数据中心中的应用171
8.3.1 什么是Anycast171
8.3.2 如何构建DNS over Any-cast171
8.3.3 如何实施Anycast DNS172
8.3.4 如何守护quagga进程177
8.3.5 BGP在Anycast中的应用178
8.4 HTTP DNS180
8.4.1 传统DNS的缺陷180
8.4.2 HTTP DNS的优势181
8.4.3 HTTP DNS长什么样181
8.4.4 HTTP DNS会取代传统的DNS吗182
8.5 本章小结183
第9章 时间同步系统184
9.1 概述184
9.1.1 如何实现时间同步184
9.1.2 GPS卫星系统授时原理185
9.1.3 PTP186
9.1.4 为何要选用硬件时间源服务器187
9.1.5 如何选择硬件时间源服务器188
9.2 ntpd191
9.2.1 ntpd初始化191
9.2.2 ntpd配置文件192
9.2.3 使用ntpq查询时间同步的状态193
9.3 chronyd197
9.3.1 chronyd的优势197
9.3.2 chronyd配置文件197
9.3.3 使用key限制客户端访问198
9.3.4 跟踪时间同步过程199
9.3.5 检查时间同步状态199
9.4 如何处理闰秒200
9.4.1 闰秒是什么200
9.4.2 闰秒的危害201
9.4.3 前辈们是怎么解决闰秒的202
9.4.4 晦涩难懂的术语202
9.4.5 怎么解决闰秒问题204
9.5 本章小结207
第10章 配置管理209
10.1 本章目的209
10.2 expect与Parallel SSH210
10.2.1 expect210
10.2.2 Parallel SSH213
10.2.3 SSH的通病214
10.3 Ansible218
10.3.1 创建Host Inventory218
10.3.2 如何自动添加节点218
10.3.3 组织主机节点219
10.3.4 Ad-Hoc221
10.3.5 Playbook225
10.3.6 关于优化231
10.4 Puppet232
10.4.1 Puppet快跑232
10.4.2 初探Puppet234
10.4.3 使用Apache Passenger替换WEBRick239
10.4.4 Mutil-Master & Mutil-CAServer241
10.4.5 排障241
10.5 SaltStack244
10.5.1 配置Minion244
10.5.2 管理Salt Key244
10.5.3 组织主机节点245
10.5.4 模块的调用245
10.5.5 Mutil-Masters247
10.5.6 级联248
10.5.7 SLS249
10.5.8 Grain250
10.5.9 Pillar254
10.5.10 排障255
10.6 我们真的能抗住海量节点吗259
10.6.1 集合编队260
10.6.2 汇报战况260
10.6.3 不必过度依赖模块260
10.7 解决方案的选择261
10.8 本章小结265
第11章 文件共享服务266
11.1 构建WebDAV服务266
11.1.1 基本构建266
11.1.2 WebDAV on HTTPS270
11.2 构建NFS服务272
11.2.1 NFS v4的新特性272
11.2.2 NFS常见问题处理273
11.2.3 NFS高可用方案277
11.2.4 NFS Cluster实施条件278
11.2.5 NFS Cluster的实施280
11.2.6 NFS Cluster故障排错287
11.3 构建SFTP服务288
11.3.1 Chroot SFTP和公钥访问的必要性288
11.3.2 构建Chroot SFTP289
11.3.3 SFTP容灾方案294
11.4 本章小结297
第12章 硬件故障告警与维修298
12.1 硬件故障的特点299
12.2 硬件故障告警300
12.2.1 告警方式300
12.2.2 事件类型和告警级别301
12.3 硬件故障分析302
12.3.1 常用分析手段302
12.3.2 常见故障错误分析306
12.4 传统维修的问题312
12.5 报修系统的需求定义313
12.5.1 故障申报环节的设计需求315
12.5.2 审批通告环节的设计需求316
12.5.3 提交报修环节的设计需求316
12.5.4 设备维修环节的设计需求318
12.5.5 数据查询统计的设计需求318
12.6 本章小结319
第13章 主机系统信息安全基础320
13.1 系统安全加固的基本要求320
13.2 关于安全配置的反思324
13.2.1 慎用账户锁定325
13.2.2 密码的烦恼325
13.2.3 sudo的意义326
13.3 sudo over LDAP的实现327
13.3.1 服务端配置327
13.3.2 客户端配置329
13.3.3 关于LDAP超时和连接数限制的问题330
13.4 密码学与数字证书330
13.4.1 密码学技术331
13.4.2 数据加密与数字签名334
13.4.3 公钥加密体系的安全性论述336
13.4.4 数字证书是什么337
13.4.5 数字证书是怎么产生的337
13.4.6 数字证书是怎么验证的338
13.5 人为因素340
13.5.1 运维红线340
13.5.2 安全操作341
13.5.3 运维工作中的常见问题342
13.6 本章小结344
第14章 性能校准345
14.1 队列理论346
14.2 CPU348
14.2.1 来自内核态的资源消耗348
14.2.2 用户态资源占用率高353
14.2.3 Cache与内存的三种映射关系356
14.2.4 CPU调度算法357
14.2.5 进程运行在哪个核心上359
14.2.6 strace的妙用360
14.3 内存361
14.3.1 NUMA362
14.3.2 Cache和Buffer364
14.3.3 虚拟地址空间365
14.3.4 大页366
14.3.5 内存分配366
14.3.6 内存回收368
14.3.7 内存超配了怎么办369
14.3.8 为什么会产生OOM370
14.4 存储372
14.4.1 磁盘调度算法372
14.4.2 I/O调度算法373
14.4.3 日志模式375
14.4.4 其他因素376
14.5 网络378
14.5.1 Jumbo Frames379
14.5.2 BDP379
14.5.3 qperf380
14.5.4 其他380
14.6 本章小结381
第15章 Shell编程382
15.1 参数传递383
15.1.1 shift383
15.1.2 eval385
15.1.3 getopt387
15.1.4 函数传参390
15.1.5 返回值391
15.2 文本处理三剑客393
15.2.1 grep394
15.2.2 sed396
15.2.3 awk397
15.3 字符处理401
15.3.1 字符的转义401
15.3.2 字符串截取403
15.4 数组404
15.5 算来算去406
15.5.1 比较406
15.5.2 字符串计算407
15.5.3 精度与长度408
15.5.4 进制转换408
15.6 表面文章409
15.7 典型案例410
15.8 本章小结416
第16章 修行之路417
16.1 系统工程师的自我修养417
16.1.1 工程师与管理员418
16.1.2 系统工程师的三颗心419
16.1.3 匠人精神420
16.2 未来时代422
16.2.1 前方高能出现怪兽AlphaGo422
16.2.2 从现在开始就要改变自己424
16.2.3 开启你的管理模式425
16.3 写在最后的话427