• 第1章 服务器及基础设施搭建入门 1
  • 冗余及负载分流的基础 1
  • 1.1 冗余的基础 2
  • 1.1.1 冗余概述 2
  • 1.1.2 冗余的本质 2
  • ①设想可能发生的故障 2
  • ②预先准备好备份设备 3
  • ③部署工作机制……当故障发生时,...
  • 1.1.3 应对路由器故障的情况 4
  • 冷备份 4
  • 1.1.4 应对Web服务器故障的情况 4
  • 热备份 5
  • 1.1.5 故障转移 6
  • VIP 6
  • IP地址的映射 6
  • 1.1.6 检测故障……健康检查 7
  • Web服务器的健康检查 8
  • 路由器的健康检查 8
  • 1.1.7 搭建Active/Backup的拓扑结构 8
  • IP地址的映射操作 10
  • 1.1.8 还想更有效地使用服务器……...
  • 1.2 实现Web服务器的冗余……DNS轮...
  • 1.2.1 DNS轮询 12
  • 1.2.2 DNS轮询的冗余拓扑结构示例 13
  • 1.2.3 还想更轻松地扩充系统……负...
  • 1.3 实现Web服务器的冗余……基于I...
  • 1.3.1 DNS轮询与负载均衡器的不同...
  • 1.3.2 IPVS……基于Linux的负载均...
  • 负载均衡器的种类与IPVS的功能 18
  • 1.3.3 调度算法 18
  • 1.3.4 使用IPVS 20
  • ipvsadm 20
  • keepalived 20
  • 1.3.5 搭建负载均衡器 21
  • 配置Web服务器 22
  • 启动keepalived 23
  • 确认负载分流 23
  • 确认冗余的拓扑结构 24
  • 1.3.6 四层交换机与七层交换机 24
  • 1.3.7 四层交换机的NAT模型与DSR模...
  • 1.3.8 同一子网下的服务器进行负载...
  • 1.4 路由器及负载均衡器的冗余 30
  • 1.4.1 负载均衡器的冗余 30
  • 1.4.2 虚拟路由器冗余协议(VRRP) 30
  • 1.4.3 VRRP的拓扑模型 30
  • VRRP报文 31
  • 虚拟路由器ID 32
  • 优先顺序 32
  • 抢占模式 33
  • 虚拟MAC地址 33
  • 1.4.4 安装keepalived时可能遇到的...
  • 延迟发送gratuitous ARP(GARP) 34
  • 1.4.5 keepalived的冗余 35
  • 确认VIP 36
  • 确认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请求的内容来控制系...
  • 根据IP地址进行控制 42
  • 根据User-Agent进行控制 42
  • 网址的重写 42
  • 2.1.3 优化系统整体的内存使用率 43
  • 例:动态页面中的请求详情 43
  • 2.1.4 缓存Web服务器的应答数据 45
  • HTTP的Keep-Alive 45
  • 例:内存消耗与Keep-Alive的开启/...
  • 2.1.5 使用Apache模块控制处理规则 47
  • 增设反向代理的判断 48
  • 2.1.6 增设反向代理 48
  • 使用Apache 2.2 48
  • 以worker模式启动httpd 49
  • httpd.conf的配置 49
  • 设定最大进程/线程数 49
  • Keep-Alive的配置 51
  • 载入必要的模块 52
  • 设定RewriteRule 52
  • 2.1.7 进一步对RewriteRule进行设...
  • 禁止来自特定主机的请求 54
  • 对于来自搜索引擎机器人的请求使用...
  • 2.1.8 使用mod_proxy_balancer向多...
  • mod_proxy_balancer的使用示例 56
  • 2.2 增设缓存服务器……Squid、mem...
  • 2.2.1 引入缓存服务器 58
  • HTTP与缓存 58
  • 通过Live HTTP Headers得知缓存效...
  • 2.2.2 Squid缓存服务器 59
  • 使用Squid搭建反向代理 60
  • Squid缓存什么 61
  • Squid的设定示例 62
  • 2.2.3 使用memcached进行缓存 64
  • 2.3 MySQL同步……发生故障时的快...
  • 2.3.1 万一数据库服务器停止 66
  • 导致数据库停止的原因 66
  • 短时间内恢复的办法 66
  • 2.3.2 MySQL的同步功能的特性和注...
  • 单主与多从 67
  • 异步数据同步 68
  • 被同步的数据内容 68
  • 2.3.3 同步的结构 69
  • Slave 的I/O线程与SQL线程 69
  • 二进制日志与中继日志 69
  • 位置信息 70
  • 2.3.4 搭建同步结构 70
  • 同步条件 70
  • my.cnf 71
  • 建立同步专用的用户 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+内部负载均衡器...
  • 2.4.1 MySQL的Slave的运用方法 78
  • Slave的运用策略 78
  • 分发到多台Slave上 78
  • 2.4.2 通过负载均衡器将请求分发到...
  • 概况图 79
  • 内部负载均衡器的配置 80
  • MySQL Slave的设定 82
  • 体验将请求分发到多台Slave的负载...
  • 2.4.3 内部负载均衡器的注意点……...
  • 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 使用解析库实现冗余及存在的...
  • 解析库存在的问题 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...
  • 3.2.1 存储服务器的故障排解 101
  • 3.2.2 存储服务器同步的难点 101
  • 3.2.3 DRBD 102
  • DRBD架构 102
  • 3.2.4 DRBD的设置与启动 103
  • 启动DRBD的Master服务器 104
  • 启动DRBD的备份服务器 105
  • 3.2.5 DRBD的故障转移 105
  • 手动切换 105
  • keepalived的配置 106
  • 利用daemontools来控制keepalived 108
  • 3.2.6 NFS服务器故障转移时的注意...
  • 3.2.7 备份的必要性 110
  • 3.3 网络的冗余……驱动绑定、RSTP...
  • 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 RSTP 117
  • 网桥的优先顺序及根网桥 118
  • RSTP中端口的作用 119
  • RSTP的行为 119
  • 3.3.7 总结 120
  • 3.4 引入VLAN……使网络更加灵活 121
  • 3.4.1 基于服务器集群的高灵活性网...
  • 3.4.2 引入VLAN的优点 121
  • 交换机的有效使用 122
  • 故障服务器的恢复机制 …灵活使用...
  • 使用VLAN,仅用一台备用机就能实现...
  • 3.4.3 VLAN的基础知识 124
  • 3.4.4 VLAN的种类 125
  • 端口VLAN 126
  • 标记VLAN 127
  • 3.4.5 在服务器集群中的使用 128
  • 不使用VLAN的拓扑结构 128
  • 使用端口VLAN的拓扑结构 129
  • 使用VLAN标签的拓扑结构 130
  • 3.4.6 即便在复杂的VLAN结构下,也...
  • 结构尽可能简易化 132
  • 第4章 性能优化、调整
  • Linux单个主机、Apache、MySQL 133
  • 4.1 基于Linux单个主机的负载评估 134
  • 4.1.1 充分发挥单个主机的性能 134
  • 清楚何为性能、何为负载 134
  • 4.1.2 别臆断,请监控 135
  • 4.1.3 确认瓶颈的基本流程 136
  • 观察load average 136
  • 观察CPU、I/O是否存在瓶颈 137
  • 当CPU负载较高时 137
  • 当I/O负载较高时 137
  • 4.1.4 何为负载 138
  • 两种负载 138
  • 多任务操作系统与负载 139
  • 搞清负载的本来面目=知晓内核的行...
  • 进程调度和进程状态 140
  • 进程状态变迁的具体例子 142
  • 进程状态迁移汇总 144
  • 换算到load average的等待状态 144
  • load average表述的负载意义 145
  • 4.1.5 计算load average的内核编码...
  • 4.1.6 通过load average判断CPU使...
  • 使用sar来查看CPU使用率及I/O等待...
  • CPU的用户模式和系统模式 149
  • I/O密集型服务器的sar 150
  • 4.1.7 多核CPU与CPU使用率 151
  • 4.1.8 如何计算CPU的使用率 152
  • 4.1.9 进程记账的内核编码 153
  • 4.1.10 线程和进程 156
  • 内核中的进程和线程 157
  • ps和线程 158
  • LinuxThreads和NPTL 159
  • 4.1.11 ps、sar、vmstat的使用方法...
  • ps……输出进程信息 159
  • VSZ与RSS……虚拟内存和物理内存的...
  • TIME……CPU占用时间 162
  • 通过ps命令查看Blocking和Busy Loo...
  • sar……查看系统报告的各项指标 163
  • sar -u……查看CPU的使用率 165
  • sar -q……查看load average 165
  • sar -r……查看内存的使用状况 166
  • 减轻I/O负载及页面缓存 166
  • 通过页面缓存减轻I/O负载的实施效...
  • 将所需的数据整个放到页面缓存上 168
  • sar -W……查看交换区的吞吐状况 169
  • vmstat……查看虚拟内存的相关信息...
  • 4.1.12 找到系统负载的症结并解决 171
  • 4.2 Apache的优化 172
  • 4.2.1 Web服务器的优化 172
  • 4.2.2 Web服务器遭遇瓶颈怎么办 172
  • 4.2.3 Apache的并发处理与MPM 173
  • prefork与worker,进程与线程 175
  • 从编程模型看多进程/多线程的差异 175
  • 从性能的观点来看多进程/多线程的...
  • 一个客户端对应一个进程/线程 177
  • 4.2.4 httpd.conf的配置 177
  • Apache的安全阀MaxClients 177
  • 在prefork模式的情况下 178
  • 父子进程共享内存的写时复制技术 180
  • 查看写时复制时共享的内存大小 181
  • MaxRequestsPerChild 183
  • 在worker模式的情况下 183
  • 在系统超载的情况下,改变MaxClien...
  • 4.2.5 Keep-Alive 186
  • 4.2.6 Apache以外的选择 186
  • lighttpd 187
  • 4.3 MySQL的调优诀窍 189
  • 4.3.1 MySQL的调优诀窍 189
  • 基于调优视角的分类 189
  • 1 服务器方面 189
  • 2 服务器之外的其他方面 190
  • 3 周边系统 190
  • 本章接下来要处理的内容 191
  • 4.3.2 内存相关的参数优化 191
  • 缓冲的种类……优化时的注意事项①...
  • 不能分配太多……优化时的注意事项...
  • 内存的相关参数 192
  • 4.3.3 内存相关的检查工具……myme...
  • 第5章 高效运行
  • 确保服务的稳定提供 197
  • 5.1 服务状态监控Nagios 198
  • 5.1.1 稳定的服务运营与服务状态监...
  • 5.1.2 状态监控的种类 198
  • 1 存活状态的监控 198
  • 2 负载状态的监控 199
  • 3 可用率的统计 200
  • 5.1.3 Nagios概述 201
  • 安装Nagios 201
  • 5.1.4 Nagios的配置 201
  • 配置文件 202
  • host……主机的配置 202
  • service……服务的定义 203
  • command……命令的定义 204
  • contact与contactgroup……通知对...
  • 配置的测试 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 服务器资源的监控……Ganglia 217
  • 5.2.1 服务器资源的监控 217
  • 监控的目的 217
  • 5.2.2 检测工具的讨论 218
  • 5.2.3 Ganglia……面向大量节点的...
  • 5.2.4 将Apache的进程状态图表化 220
  • 在Ganglia中增加图表的方法 222
  • 尝试增加多个图表 222
  • 其他的自定义图表 223
  • 5.3 高效的服务器管理……Puppet 225
  • 5.3.1 实现高效的服务器管理的工具...
  • 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 守护进程的工作管理……Daemon...
  • 5.4.1 守护进程的异常终止 241
  • 5.4.2 daemontools 241
  • 使用daemontools的原因 242
  • 成为守护进程的条件……在前台运行...
  • 5.4.3 守护进程的管理方法 243
  • 创建守护进程 243
  • 启动守护进程 244
  • 停止、继续、重新启动守护进程 245
  • 停用守护进程 245
  • 发送信号 245
  • Keepalived……run文件的例子① 246
  • 自编的监控脚本……run文件的例子...
  • 5.4.4 daemontools的实用技巧 248
  • 控制所依赖的服务的启动顺序 248
  • 常用的shell函数 249
  • 5.5 网络引导的应用……PXE、initr...
  • 5.5.1 网络引导 252
  • 网络引导的特性及优势 252
  • 5.5.2 网络引导的行为……PXE 253
  • 5.5.3 网络引导的应用实例 255
  • 负载均衡器 255
  • 数据库服务器/文件服务器 256
  • 维护用的引导映像 256
  • 5.5.4 构建网络引导 257
  • initramfs的通用化和作用的识别 257
  • 无盘结构中需要注意的事项 258
  • Master文件的安全性 259
  • 5.6 远程维护……维护线路、Serial...
  • 5.6.1 轻松实现远程登录 260
  • 5.6.2 网络故障的应对 260
  • 维护线路 260
  • 交换机故障的应对 262
  • 5.6.3 Serial Console 263
  • Serial Console的实现 264
  • 5.6.4 IPMI 266
  • IPMI的功能 266
  • 使用IPMI 267
  • 5.6.5 总结 267
  • 5.7 Web服务器的日志处理……syslo...
  • 5.7.1 Web服务器日志的分拣·收集 268
  • 5.7.2 分拣与收集 268
  • 5.7.3 日志的分拣……syslog和sysl...
  • 使用syslog进行日志的分拣 269
  • syslog-ng 270
  • 5.7.4 日志的收集 272
  • Apache日志的转储……cron与rotate...
  • 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
  • 安装Kickstart 282
  • 软件包管理和Puppet 282
  • 服务器的管理和监控 283
  • 使用Capistrano部署 284
  • 6.1.4 用电效率·提高资源的利用率...
  • 重视服务器每1A所发挥的性能 285
  • 充分利用每台服务器的性能 286
  • 不安装无用的零件 287
  • 6.1.5 为了自律的基础设施而努力 288
  • 6.2 DSAS的内容 290
  • 6.2.1 什么是DSAS 290
  • 6.2.2 DSAS的特征 291
  • 一个系统容纳多个网站 291
  • 使用开源软件搭建 291
  • 无论切断任何地方,网络服务都不会...
  • 服务器增设非常方便 295
  • 故障修复非常简单 295
  • 6.2.3 系统架构的详情 296
  • 使用驱动绑定的原因 296
  • DRBP实现故障转移时的注意事项 297
  • 配置SSL加速器 299
  • 扩展健康检查功能 301
  • 既方便又安全地使用负载均衡器 303
  • 处理会话数据 306
  • memcached 307
  • repcached 307
  • 6.2.4 DSAS的未来 309