本书是著名的网络服务供应商Hatena和Klab有限公司的工程师团队的经验总结。全书从实际的生产环境出发,就大规模、高性能、不间断的网络服务的搭建和管理技术进行了分析和说明。前3章讲解了如何搭建兼具冗余性和可扩展性的服务器/基础设施;第4章讲解了性能优化方面的内容,特别是对单个服务器的性能提升方法进行了介绍;第5章讲解了监控、管理等运行方面的内容,以笔者身边的实际生产环境为例,介绍了提升设备运行效率的技巧;第6章介绍了Hatena与KLab实际运作的网络和服务器基础设施的情况。
本书适合所有致力于运维和网络后端的开发者阅读。
第1章 服务器及基础设施搭建入门
冗余及负载分流的基础1
1.1 冗余的基础2
1.1.1 冗余概述2
1.1.2 冗余的本质2
①设想可能发生的故障2
②预先准备好备份设备3
③部署工作机制……当故障发生时,切换到备份设备3
1.1.3 应对路由器故障的情况4
冷备份4
1.1.4 应对Web服务器故障的情况4
热备份5
1.1.5 故障转移6
VIP6
IP地址的映射6
1.1.6 检测故障……健康检查7
Web服务器的健康检查8
路由器的健康检查8
1.1.7 搭建Active/Backup的拓扑结构8
IP地址的映射操作10
1.1.8 还想更有效地使用服务器……负载分发10
1.2 实现Web服务器的冗余……DNS轮询12
1.2.1 DNS轮询12
1.2.2 DNS轮询的冗余拓扑结构示例13
1.2.3 还想更轻松地扩充系统……负载均衡器16
1.3 实现Web服务器的冗余……基于IPVS的负载均衡器17
1.3.1 DNS轮询与负载均衡器的不同点17
1.3.2 IPVS……基于Linux的负载均衡器18
负载均衡器的种类与IPVS的功能18
1.3.3 调度算法18
1.3.4 使用IPVS20
ipvsadm20
keepalived20
1.3.5 搭建负载均衡器21
配置Web服务器22
启动keepalived23
确认负载分流23
确认冗余的拓扑结构24
1.3.6 四层交换机与七层交换机24
1.3.7 四层交换机的NAT模型与DSR模型26
1.3.8 同一子网下的服务器进行负载分流时需要注意的地方28
1.4 路由器及负载均衡器的冗余30
1.4.1 负载均衡器的冗余30
1.4.2 虚拟路由器冗余协议(VRRP)30
1.4.3 VRRP的拓扑模型30
VRRP报文31
虚拟路由器ID32
优先顺序32
抢占模式33
虚拟MAC地址33
1.4.4 安装keepalived时可能遇到的问题34
延迟发送gratuitous ARP(GARP)34
1.4.5 keepalived的冗余35
确认VIP36
确认VRRP的运行情况37
分离VRRP实例37
同步VRRP实例38
1.4.6 keepalived的应用38
第2章 优化服务器及基础设施的拓扑结构
冗余、负载分流、高性能的实现39
2.1 引入反向代理……Apache模块 40
2.1.1 反向代理入门40
2.1.2 根据HTTP请求的内容来控制系统的行为41
根据IP地址进行控制42
根据User-Agent进行控制42
网址的重写42
2.1.3 优化系统整体的内存使用率43
例:动态页面中的请求详情43
2.1.4 缓存Web服务器的应答数据45
HTTP的Keep-Alive45
例:内存消耗与Keep-Alive的开启/关闭46
2.1.5 使用Apache模块控制处理规则47
增设反向代理的判断48
2.1.6 增设反向代理48
使用Apache 2.248
以worker模式启动httpd49
httpd.conf的配置49
设定最大进程/线程数49
Keep-Alive的配置51
载入必要的模块52
设定RewriteRule 52
2.1.7 进一步对RewriteRule进行设置53
禁止来自特定主机的请求54
对于来自搜索引擎机器人的请求使用缓存服务器54
2.1.8 使用mod_proxy_balancer向多台主机分流55
mod_proxy_balancer的使用示例56
2.2 增设缓存服务器……Squid、memcached 58
2.2.1 引入缓存服务器58
HTTP与缓存58
通过Live HTTP Headers得知缓存效果58
2.2.2 Squid缓存服务器59
使用Squid搭建反向代理60
Squid缓存什么61
Squid的设定示例62
2.2.3 使用memcached进行缓存64
2.3 MySQL同步……发生故障时的快速恢复66
2.3.1 万一数据库服务器停止66
导致数据库停止的原因66
短时间内恢复的办法66
2.3.2 MySQL的同步功能的特性和注意点67
单主与多从67
异步数据同步68
被同步的数据内容68
2.3.3 同步的结构69
Slave 的I/O线程与SQL线程69
二进制日志与中继日志69
位置信息70
2.3.4 搭建同步结构70
同步条件70
my.cnf71
建立同步专用的用户71
同步开始时所必需的数据72
2.3.5 启动同步73
Master和Slave的my.cnf文件的差异73
Slave开始运行&确认73
2.3.6 确认同步的状态74
Master的状态确认74
Slave的状态确认75
2.4 MySQL的Slave+内部负载均衡器的灵活应用示例78
2.4.1 MySQL的Slave的运用方法78
Slave的运用策略78
分发到多台Slave上78
2.4.2 通过负载均衡器将请求分发到多台Slave的方法79
概况图79
内部负载均衡器的配置80
MySQL Slave的设定82
体验将请求分发到多台Slave的负载均衡83
2.4.3 内部负载均衡器的注意点……基于DSR的分发方法83
2.5 选择轻量高速的存储服务器 85
2.5.1 存储服务器的必要性85
存储服务器容易导致单点故障86
存储服务器容易造成瓶颈86
2.5.2 理想的存储服务器88
减轻负载88
2.5.3 将HTTP作为存储协议使用 88
轻量Web服务器的选择89
利用HTTP的优势89
2.5.4 遗留的问题90
第3章 进一步完善不间断的基础设施
DNS服务器、存储服务器、网络93
3.1 DNS服务器的冗余 94
3.1.1 DNS服务器冗余的重要性94
3.1.2 使用解析库实现冗余及存在的问题94
解析库存在的问题95
性能下降的危险性……以邮件服务器为例95
DNS故障会造成很大的影响96
3.1.3 基于服务器集群的DNS冗余96
3.1.4 使用VRRP的拓扑结构96
3.1.5 DNS服务器的负载分发98
3.1.6 小结100
3.2 存储服务器的冗余……利用DRBD实现镜像 101
3.2.1 存储服务器的故障排解101
3.2.2 存储服务器同步的难点101
3.2.3 DRBD102
DRBD架构102
3.2.4 DRBD的设置与启动103
启动DRBD的Master服务器104
启动DRBD的备份服务器105
3.2.5 DRBD的故障转移105
手动切换105
keepalived的配置106
利用daemontools来控制keepalived108
3.2.6 NFS服务器故障转移时的注意事项109
3.2.7 备份的必要性110
3.3 网络的冗余……驱动绑定、RSTP111
3.3.1 L1/L2上部件的冗余111
3.3.2 故障点111
3.3.3 链路冗余与驱动绑定112
驱动绑定112
3.3.4 交换机的冗余114
链路故障时的行为114
交换机故障时的行为115
交换机间遭遇连接故障时的情况115
3.3.5 增设交换机116
实现多重冗余117
3.3.6 RSTP117
网桥的优先顺序及根网桥118
RSTP中端口的作用119
RSTP的行为119
3.3.7 总结120
3.4 引入VLAN……使网络更加灵活121
3.4.1 基于服务器集群的高灵活性网络121
3.4.2 引入VLAN的优点121
交换机的有效使用122
故障服务器的恢复机制 …灵活使用一台备用机123
使用VLAN,仅用一台备用机就能实现恢复123
3.4.3 VLAN的基础知识124
3.4.4 VLAN的种类125
端口VLAN126
标记VLAN127
3.4.5 在服务器集群中的使用128
不使用VLAN的拓扑结构128
使用端口VLAN的拓扑结构129
使用VLAN标签的拓扑结构130
3.4.6 即便在复杂的VLAN结构下,也需要让物理层面的设备
结构尽可能简易化132
第4章 性能优化、调整
Linux单个主机、Apache、MySQL133
4.1 基于Linux单个主机的负载评估134
4.1.1 充分发挥单个主机的性能134
清楚何为性能、何为负载134
4.1.2 别臆断,请监控135
4.1.3 确认瓶颈的基本流程136
观察load average136
观察CPU、I/O是否存在瓶颈137
当CPU负载较高时137
当I/O负载较高时137
4.1.4 何为负载138
两种负载138
多任务操作系统与负载139
搞清负载的本来面目=知晓内核的行为140
进程调度和进程状态140
进程状态变迁的具体例子142
进程状态迁移汇总144
换算到load average的等待状态144
load average表述的负载意义145
4.1.5 计算load average的内核编码146
4.1.6 通过load average判断CPU使用率和I/O等待时间148
使用sar来查看CPU使用率及I/O等待时间149
CPU的用户模式和系统模式149
I/O密集型服务器的sar150
4.1.7 多核CPU与CPU使用率151
4.1.8 如何计算CPU的使用率152
4.1.9 进程记账的内核编码153
4.1.10 线程和进程156
内核中的进程和线程157
ps和线程158
LinuxThreads和NPTL159
4.1.11 ps、sar、vmstat的使用方法159
ps……输出进程信息159
VSZ与RSS……虚拟内存和物理内存的指标160
TIME……CPU占用时间162
通过ps命令查看Blocking和Busy Loop的差异162
sar……查看系统报告的各项指标163
sar -u……查看CPU的使用率165
sar -q……查看load average165
sar -r……查看内存的使用状况166
减轻I/O负载及页面缓存166
通过页面缓存减轻I/O负载的实施效果167
将所需的数据整个放到页面缓存上168
sar -W……查看交换区的吞吐状况169
vmstat……查看虚拟内存的相关信息170
4.1.12 找到系统负载的症结并解决171
4.2 Apache的优化 172
4.2.1 Web服务器的优化172
4.2.2 Web服务器遭遇瓶颈怎么办172
4.2.3 Apache的并发处理与MPM173
prefork与worker,进程与线程175
从编程模型看多进程/多线程的差异175
从性能的观点来看多进程/多线程的差异176
一个客户端对应一个进程/线程177
4.2.4 httpd.conf的配置177
Apache的安全阀MaxClients177
在prefork模式的情况下178
父子进程共享内存的写时复制技术180
查看写时复制时共享的内存大小181
MaxRequestsPerChild183
在worker模式的情况下183
在系统超载的情况下,改变MaxClients前需要了解185
4.2.5 Keep-Alive186
4.2.6 Apache以外的选择186
lighttpd187
4.3 MySQL的调优诀窍189
4.3.1 MySQL的调优诀窍189
基于调优视角的分类189
1 服务器方面189
2 服务器之外的其他方面190
3 周边系统190
本章接下来要处理的内容191
4.3.2 内存相关的参数优化191
缓冲的种类……优化时的注意事项①191
不能分配太多……优化时的注意事项②192
内存的相关参数192
4.3.3 内存相关的检查工具……mymemcheck194
第5章 高效运行
确保服务的稳定提供197
5.1 服务状态监控Nagios198
5.1.1 稳定的服务运营与服务状态监控198
5.1.2 状态监控的种类198
1 存活状态的监控198
2 负载状态的监控199
3 可用率的统计200
5.1.3 Nagios概述201
安装Nagios201
5.1.4 Nagios的配置201
配置文件202
host……主机的配置202
service……服务的定义203
command……命令的定义204
contact与contactgroup……通知对象和通知对象组205
配置的测试206
5.1.5 Web管理界面206
5.1.6 Nagios的基本使用方法208
主机和服务的定义208
通知209
5.1.7 实用的使用方法212
可用率的测定212
独立插件214
5.1.8 小结216
5.2 服务器资源的监控……Ganglia217
5.2.1 服务器资源的监控217
监控的目的217
5.2.2 检测工具的讨论218
5.2.3 Ganglia……面向大量节点的图表化工具218
5.2.4 将Apache的进程状态图表化220
在Ganglia中增加图表的方法222
尝试增加多个图表222
其他的自定义图表223
5.3 高效的服务器管理……Puppet225
5.3.1 实现高效的服务器管理的工具Puppet225
5.3.2 Puppet的概要225
5.3.3 Puppet的配置226
节点的定义227
类的定义227
确认配置是否有效229
5.3.4 配置文件的语法230
资源的定义230
资源231
对各个服务器的配置进行微调232
资源间的依赖关系233
通过模板完成Manifest文件的定义233
5.3.5 通知操作日志237
5.3.6 运用238
5.3.7 自动配置管理工具的利与弊239
5.4 守护进程的工作管理……Daemontools241
5.4.1 守护进程的异常终止241
5.4.2 daemontools241
使用daemontools的原因242
成为守护进程的条件……在前台运行243
5.4.3 守护进程的管理方法243
创建守护进程243
启动守护进程244
停止、继续、重新启动守护进程245
停用守护进程245
发送信号245
Keepalived……run文件的例子①246
自编的监控脚本……run文件的例子②246
5.4.4 daemontools的实用技巧248
控制所依赖的服务的启动顺序248
常用的shell函数249
5.5 网络引导的应用……PXE、initramfs252
5.5.1 网络引导252
网络引导的特性及优势252
5.5.2 网络引导的行为……PXE253
5.5.3 网络引导的应用实例255
负载均衡器255
数据库服务器/文件服务器256
维护用的引导映像256
5.5.4 构建网络引导257
initramfs的通用化和作用的识别257
无盘结构中需要注意的事项258
Master文件的安全性 259
5.6 远程维护……维护线路、Serial Console、IPMI 260
5.6.1 轻松实现远程登录260
5.6.2 网络故障的应对260
维护线路260
交换机故障的应对262
5.6.3 Serial Console263
Serial Console的实现264
5.6.4 IPMI266
IPMI的功能266
使用IPMI267
5.6.5 总结 267
5.7 Web服务器的日志处理……syslog、syslog-ng、cron、rotatelogs268
5.7.1 Web服务器日志的分拣·收集268
5.7.2 分拣与收集268
5.7.3 日志的分拣……syslog和syslog-ng269
使用syslog进行日志的分拣269
syslog-ng270
5.7.4 日志的收集272
Apache日志的转储……cron与rotatelogs272
5.7.5 日志服务器的作用与构成273
5.7.6 总结274
第6章 服务后台
自律的基础设施、稳健的系统275
6.1 Hatena网站的内容276
6.1.1 Hatena的基础设施276
6.1.2 可扩展性和稳定性277
反向代理278
数据库279
文件服务器281
6.1.3 提高运营效率282
安装Kickstart282
软件包管理和Puppet282
服务器的管理和监控283
使用Capistrano部署284
6.1.4 用电效率·提高资源的利用率285
重视服务器每1A所发挥的性能285
充分利用每台服务器的性能286
不安装无用的零件287
6.1.5 为了自律的基础设施而努力288
6.2 DSAS的内容290
6.2.1 什么是DSAS290
6.2.2 DSAS的特征291
一个系统容纳多个网站291
使用开源软件搭建291
无论切断任何地方,网络服务都不会停止294
服务器增设非常方便295
故障修复非常简单295
6.2.3 系统架构的详情296
使用驱动绑定的原因296
DRBP实现故障转移时的注意事项297
配置SSL加速器299
扩展健康检查功能301
既方便又安全地使用负载均衡器303
处理会话数据306
memcached307
repcached307
6.2.4 DSAS的未来309
《寻找鱼王(经典名作口碑版本)》内容简介:本书是作家张炜具有代表性的一部儿童文学作品,于2015年出版。这部小说贯穿始终的是正
本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出
《汉水的身世》内容简介:一条古老河流的身世变迁与一个国家的命运血脉相连。罗新、梁鸿、李睿珺 联袂推荐;《人民文学》《收获》重
最新版BIOS与注册表现用现查 内容简介 本书是“现用现查”系列丛书之一,以问与答的形式,用精炼的语言将BIOS与注册表基本设置,以及相关应用亲切地呈现于读者面...
你是否好奇那些艺术家们的脑子里都想些什么?《手绘的创意日志》的作者珍妮弗·纽带领读者开始一场精神旅程,进入日志作者的个人
《Cocos2d-x 3.x游戏开发实战》内容简介:《Cocos2d-x 3.x游戏开发实战》是一本介绍Cocos2d-x游戏引擎的实用图书,全面介绍了最新的
第一本大数据供应链落地之道的权威著作,全球顶级供应链管理专家娜达·桑德斯博士聚焦传统供应链模式向大数据转型,助力工业4.0时
《庆春》内容简介:老舍是我国现代杰出的文学家和语言大师。本书精选了老舍先生的经典作品,包括短篇小说和散文。其中有幽默诙谐的
《AcceleratedC++中文版》给人的印象会如此深刻呢?这是因为:●它一开始就向读者教导那些最有用的概念,而不是那些简单的注释读者
《网站分析基础教程流量与价值的秘密》分为三篇,即理论基础篇、应用方法篇和实战指南篇。理论基础篇介绍了网站分析的用途和定义
《麦克手绘:室内快题设计与表现》内容简介:本书在手绘技法表现的基础上,着重快题设计的讲解。为了让读者能够快速掌握设计表达的
实际案例分析是一种从用户角度定义软件系统外在特征的方法。本书对这种前沿的软件开发技术提供了清晰、实用的介绍。通过诸多实例
《众妙之门——自由网站设计师成功之道》出自世界知名Web设计网站SmashingMagazine,其内容是全球顶级设计师的精华总结。全书共4
「我們的使命是站立在科技與人文的交叉處,並以此為起點創造嶄新的事物!」史蒂夫賈伯斯(SteveJobs)◎市面上第一本將APPLE產品
《Mentor高速电路板设计与仿真》以MentorEE2005SP3为基础,以具体电路为范例,详尽讲解元器件建库、原理图设计、布局、布线、仿真
《实用古玉辨伪》内容简介:本书共分8章:古玉发展概述、古玉辨伪方法、古代玉料辨识、古代治玉工艺、古玉作伪、学习古玉辨识的推荐
《游戏行业网络营销推广实战从入门到精通》内容简介:《游戏行业网络营销推广实战从入门到精通》通过对目前游戏市场热门的80多款游
《C++沉思录》集中反映了C++的关键思想和编程技术,不仅告诉你如何编程,还告诉你为什么要这样编程。本书曾出现在众多的C++专家推
《诗经散论》内容简介:《诗经散论》,雒三桂著。本书以我国先秦重要文化典籍《诗经》为研究对象,从《诗经》创作时的西周、春秋社
《跨海之战》内容简介:金门、海南和一江山三次跨海之战经历了一个相当复杂的过程。以三次战争为线索,体现国共双方在战略方针的较