译者序 1
致谢 1
前言 1
绪论 1
第一部分 集群资源 3
第1章 启动服务 3
1.1 如何启动集群服务 3
1.2 使用init启动服务 3
1.2.1 /etc/inittab文件 4
1.2.2 使用init重新生成服务 4
1.2.3 使用chkconfig管理init脚本符号的链接 5
1.2.4 使用ntsysv管理init脚本的符号链接 6
1.2.5 移除不需要的服务 7
1.3 在集群节点上使用Red Hat初始化脚本 7
1.4 小结 14
第2章 处理数据包 15
2.1 Netfilter 15
2.2 Netfilter简史 16
2.3 设置默认链策略 19
2.4 使用iptables和ipchains 19
2.4.1 清除现有规则 19
2.4.2 设置默认INPUT链策略 19
2.4.3 FTP 20
2.4.7 SSH 21
2.4.6 Telnet 21
2.4.4 被动FTP 21
2.4.5 DNS 21
2.4.8 Email 22
2.4.9 HTTP 22
2.4.10 ICMP 22
2.4.11 检查并保存规则 22
2.5 使用Linux内核路由数据包 23
2.5.1 匹配发往特定目的地网络的数据包 23
2.5.2 匹配发往特定目的地主机的数据包 24
2.5.4 查看路由规则 25
2.5.5 使路由规则具有永久性 25
2.5.3 匹配发往任何目的地或主机的数据包 25
2.5.6 iptables和路由资源脚本 26
2.5.7 ip命令 28
2.6 小结 29
第3章 编译内核 30
3.1 您需要做什么 30
3.2 步骤1:得到源代码 30
3.2.1 使用stock内核 31
3.2.2 使用您的发行版提供的内核 31
3.2.3 决定将要使用的内核版本 31
3.3.3 由发行版供应商升级内核 32
3.3.2 升级或用补丁修补内核 32
3.3 步骤2:设置所需选项 32
3.3.1 安装新内核 32
3.3.4 设置内核选项 33
3.4 步骤3:编译代码 34
3.5 步骤4:安装目标代码和配置文件 35
3.5.1 安装System.map 36
3.5.2 保存内核配置文件 36
3.6 步骤5:配置启动加载器 36
3.7 小结 38
第4章 使用rsync和SSH同步服务器 39
4.1 rsync 39
第二部分 高可用性 39
4.2 Open SSH2和rsync 40
4.2.1 SSH:安全数据传输 40
4.2.2 SSH密钥 41
4.2.3 建立双向信任关系:第一部分 41
4.2.4 建立双向信任关系:第二部分 44
4.3 双节点SSH客户端/服务器方案 45
4.3.1 创建有自己的数据文件的用户账户 45
4.3.2 在SSH服务器上配置Open SSH2主机密钥 46
4.3.3 为SSH客户机上的新账户创建一个用户密钥 46
4.3.4 将用户密钥的公共部分从SSH客户端复制到SSH服务器 47
4.3.5 测试SSH客户端到SSH服务器的连接 48
4.3.8 SSH上的rsync 52
4.3.7 改进的安全 52
4.3.6 使用安全数据传输 52
4.3.9 使用rsync复制单个文件 54
4.3.10 通过慢速WAN连接的rsync 54
4.3.11 调度的rsync快照 54
4.3.12 rsync和SSH的ipchains/iptables防火墙规则 56
4.4 小结 56
第5章 使用SystemImager克隆系统 58
5.1 SystemImager 58
5.2 SystemImager方案 59
5.2.1 在SystemImager服务器上安装SystemImager服务器软件 59
5.2.2 使用SystemImager中的Installer程序 60
5.2.3 在Golden Client上安装SystemImager客户端软件 60
5.2.4 在SystemImager服务器上创建Golden Client的系统映像 61
5.2.5 使主数据服务器成为DHCP服务器 62
5.2.6 为Golden Client创建启动软盘 64
5.2.7 在主数据服务器上将rsync作为守护程序启动 66
5.2.8 在新克隆系统上安装Golden Client系统映像 66
5.2.9 安装后的注意事项 67
5.3 执行维护:更新客户端 67
5.3.1 SystemInstaller 67
5.3.2 System Configurator 68
5.4 小结 68
第6章 Heartbeat及其理论介绍 69
6.1 Heartbeat的物理路径 69
6.1.3 分区集群和Stonith 70
6.1.1 串行电缆连接 70
6.1.2 以太网电缆连接 70
6.2 Heartbeat控制消息 71
6.2.1 心跳 71
6.2.2 集群转换消息 71
6.2.3 重传请求 71
6.2.4 以太网心跳控制消息 71
6.2.5 安全性与心跳控制消息 72
6.3 客户端计算机如何访问资源 72
6.4 辅助IP地址和IP别名 73
6.4.1 以太网NIC设备名称 73
6.4.4 IP别名 75
6.4.5 使用ifconfig命令创建和删除IP别名 75
6.4.3 使用ip命令创建和删除辅助IP地址 75
6.4.2 辅助IP地址名称 75
6.4.6 提供服务 76
6.4.7 免费的ARP(GARP)广播 77
6.5 资源脚本 79
6.5.1 资源的状态 80
6.5.2 资源所有权 80
6.5.3 将初始化脚本用作Heartbeat资源脚本 82
6.6 Heartbeat配置文件 83
6.7 小结 83
7.1 方案 84
7.2 准备工作 84
第7章 Heartbeat示范配置 84
7.3 步骤1:安装Heartbeat 85
7.4 步骤2:配置/etc/ha.d/ha.cf 86
7.5 步骤3:配置/etc/ha.d/haresources 87
7.6 步骤4:配置/etc/ha.d/authkeys 89
7.7 步骤5:在备份服务器上安装Heartbeat 89
7.8 步骤6:设置系统时间 90
7.9 步骤7:启动Heartbeat 90
7.9.1 在主服务器上启动Heartbeat 90
7.9.2 在备份服务器上启动Heartbeat 92
7.9.3 检查主服务器上的日志文件 92
7.10 停止并启动Heartbeat 93
7.12 小结 94
7.11 监视资源 94
第8章 Heartbeat资源及维护 95
8.1 haresources文件语法 95
8.1.1 Haresources文件语法:主服务器名称 95
8.1.2 Haresources文件语法:IP别名 95
8.1.3 Heartbeat的自动网络接口卡选择过程 96
8.1.4 指定网络接口卡 97
8.1.5 使用iptakeover脚本定制IP地址接管 98
8.1.6 Haresources文件语法:资源 98
8.2 使用Heartbeat的负载共享 99
8.2.1 使用Heartbeat的负载共享:循环DNS 100
8.2.3 广域网负载平衡 101
8.2.2 循环DNS负载平衡的问题 101
8.4 操作员警报:电子邮件警报 102
8.5 Heartbeat维护 102
8.3 操作员警报:有声警报 102
8.5.1 修改Heartbeat配置文件 103
8.5.2 服务器维护和Heartbeat auto failback选项 103
8.5.3 强制主服务器进入备用模式 104
8.5.4 调整Heartbeat的deadtime值 104
8.5.5 Heartbeat日志中的情报消息 105
8.5.6 故障转移与重新生成(自动重启失败的资源) 105
8.5.7 许可证管理器故障转移 105
8.6 小结 106
9.1 Stonith 107
第9章 Stonith和ipfail 107
9.2 非传统的方法:使用单个Stonith设备 108
9.2.1 Heartbeat与Stonith示例配置 108
9.2.2 Stonith事件顺序 110
9.2.3 Stonith设备 110
9.2.4 查看当前的受支持Stonith设备清单 111
9.2.5 Stonith Meatware“设备” 111
9.2.6 将Stonith Meatware与Heartbeat一起使用 112
9.2.7 使用“真实的”Stonith设备 114
9.2.8 避免多个Stonith事件 114
9.3 网络故障 115
9.4.1 在内核中启用看门狗 116
9.4 看门狗和软狗 116
9.4.3 配置Heartbeat来支持看门狗 117
9.4.2 内核恐慌——挂起或重启 117
9.5 测试Heartbeat配置 118
9.6 小结 119
第三部分 集群理论与实践 120
第10章 如何构建Linux企业集群 120
10.1 构建Linux企业集群的步骤 120
10.1.1 NAS服务器 120
10.1.5 将系统配置更改应用到所有节点 121
10.1.7 构建LVS-DR集群 121
10.1.6 构建LVS-NAT集群 121
10.1.4 集群命名方案 121
10.1.3 克隆Linux机器 121
10.1.2 Kernel Netfilter和内核数据包路由 121
10.1.8 安装软件来删除故障的集群节点 122
10.1.9 安装软件来监视集群节点 122
10.1.10 监视集群节点的性能 122
10.1.11 更新集群节点和服务器上的软件 123
10.1.12 集中用户账户管理 123
10.1.13 安装打印服务 123
10.1.14 安装高可用批作业调度系统 123
10.1.15 采购集群节点 123
10.2 小结 124
11.1 LVS IP地址命名约定 125
11.1.1 虚拟IP(VIP) 125
第11章 Linux虚拟服务器:简介和理论 125
11.1.2 真实IP(RIP) 126
11.1.3 Director的IP(DIP) 126
11.1.4 客户端计算机的IP(CIP) 126
11.1.5 LVS集群中的IP地址 126
11.2 LVS集群的类型 127
11.2.1 网络地址转换(LVS-NAT) 127
11.2.2 直接路由(LVS-DR) 128
11.2.3 IP隧道(LVS-TUN) 130
11.3.1 固定(或非动态)调度方法 131
11.3 LVS调度方法 131
11.3.2 动态调度方法 132
11.4 小结 135
第12章 LVS-NAT集群 136
12.1 客户端计算机如何访问LVS-NAT集群资源 136
12.2 构建LVS-NAT Web集群 141
12.2.1 LVS-NAT的方案 142
12.2.2 步骤1:安装操作系统 142
12.2.3 步骤2:在真实服务器上配置和启动Apache 142
12.2.4 步骤3:在真实服务器上设置默认路由 143
12.2.5 步骤4:在Director上安装LVS软件 144
12.2.6 步骤5:在Director上配置LVS 145
12.2.7 步骤6:测试集群配置 147
12.3 LocalNode:将Director用作真实服务器 150
12.4 小结 151
第13章 LVS-DR集群 152
13.1 客户端计算机如何访问LVS-DR集群服务 152
13.2 ARP广播和LVS-DR集群 155
13.3 客户端计算机和ARP广播 156
13.4 小结 157
第14章 负载平衡器 158
14.1 LVS和Netfilter 158
14.2.2 控制散列桶 160
14.2.3 查看连接跟踪表 160
14.2.1 散列表结构 160
14.2 Director的连接跟踪表 160
14.3 连接跟踪记录的超时值 161
14.4 返回数据包和Netfilter挂钩 162
14.5 非持久LVS 163
14.6 LVS持久性 164
14.6.1 持久性连接模板 164
14.6.2 持久性连接的类型 164
14.6.3 持久性客户端连接(PCC) 165
14.6.4 持久性端口连接(PPC) 165
14.6.5 端口亲缘性 166
14.6.6 Netfilter标记数据包 166
14.7 小结 168
第15章 高可用性集群 169
15.1 冗余LVS Director 169
15.2 高可用性集群设计目标 169
15.3 高可用性LVS-DR集群 170
15.4 Idirectord简介 171
15.5 LVS、Heartbeat和ldirectord方案 173
15.5.1 隐藏环回接口 173
15.5.2 在主Director和备份Director上安装Heartbeat 175
15.5.3 安装ldirectord及其所需的软件组件 175
15.5.5 测试安装的ldirectord 177
15.5.4 安装ldirectord 177
15.5.6 创建ldirectord配置文件 178
15.5.7 创建健康检查Web页 181
15.5.8 手工启动ldirectord并测试其配置 182
15.5.9 添加ldirectord到Heartbeat配置 182
15.5.10 IPVS表的有状态故障转移 183
15.5.11 修改以允许故障转移到集群内部的真实服务器 184
15.6 小结 185
第16章 网络文件系统 186
16.1 锁仲裁 186
16.2 锁仲裁程序 187
16.3 网络锁管理器(NLM) 188
16.4.1 NLM和内核BSD flock 189
16.4 NLM和内核锁仲裁 189
16.4.2 NLM和内核System V lockf 190
16.4.3 NLM和内核Posix fcntl 190
16.5 NFS和文件锁(dotlock)仲裁 190
16.6 查找Linux内核持有的锁 191
16.7 与NFS有关的性能问题——瓶颈和感知 192
16.7.1 单事务和NFS性能的用户感知 193
16.7.2 多事务和用户对NFS性能的感知 194
16.8 在集群环境中管理锁和GETATTR操作 194
16.9 管理属性缓存 194
16.10.1 在集群外部运行批作业 195
16.10.2 使用多个NAS服务器 195
16.10 在集群环境中管理交互式用户应用程序和批作业 195
16.11 测量NFS延迟 196
16.12 测量I/O总操作数 196
16.13 取得可能的最佳NAS性能 197
16.14 NFS客户端配置选项 198
16.15 开发NFS 199
16.16 Linux和NFS上的信息的其他起始点 199
16.17 小结 200
第四部分 维护和监视 201
第17章 简单网络管理协议和Mon 201
17.1 Mon 201
17.1.1 Mon警报 201
17.1.2 Mon监视脚本 201
17.3 基本Mon方案 202
17.2 从哪里运行Mon 202
17.3.1 步骤1:编译和安装fping软件包 203
17.3.2 步骤2:安装SNMP数据包 203
17.3.3 步骤3:为Mon安装所需的CPAN模块 204
17.3.4 步骤4:安装Mon软件 204
17.3.5 步骤5:创建/etc/mon/mon.cf配置文件 205
17.3.6 步骤6:通过手工运行fping.monitor和mail.alert脚本进行测试 206
17.3.7 步骤7:创建Mon日志目录和Mon日志文件 207
17.3.8 步骤8:在调试模式启动Mon程序并进行测试 207
17.4 Mon和SNMP“弹性概念”方案 207
17.4.1 步骤1:在每个集群节点上安装Net-SNMP客户端软件 207
17.4.3 步骤3:启动SNMP代理 208
17.4.2 步骤2:创建snmp.conf配置文件 208
17.4.4 步骤4:本地查看SNMP MIB 209
17.4.5 步骤5:安装SNMP监视代理 210
17.4.6 检查netsnmp-freespace.monitor的输出 210
17.4.7 在所有集群节点上安装Mon 211
17.5 Mon和SNMP“真实世界”方案 211
17.5.1 步骤1:在所有集群节点上创建snmpd.conf 212
17.5.2 步骤2:在集群节点管理器上安装netsnmp-proc.monitor和新的mon.cf文件 213
17.5.3 步骤3:安装Mon初始脚本 214
17.5.4 步骤4:运行SNMP和Mon 214
17.6 来自Mon的电子邮件警报 215
17.7 创建自己的SNMP脚本 215
17.8 用Mon监视自己的SNMP脚本 216
17.9 用SNMP监视脚本进行监视的一些事情 217
17.10 用Mon强制Stonith事件 218
17.11 用Mon强制Heartbeat故障转移 219
17.12 小结 220
第18章 Ganglia 221
18.1 Ganglia简介 221
18.1.1 gmond 221
18.1.2 gmetad 221
18.2 安装Ganglia的必备软件包 222
18.2.1 安装PHP 222
18.2.2 安装RRDtool 222
18.2.3 在集群节点管理器上安装Apache 222
18.5 在集群节点管理器上配置gmetad和gmond 223
18.3 在集群节点管理器上安装Ganglia 223
18.4 在集群节点上安装Ganglia 223
18.5.1 修改/etc/gmetad.conf 224
18.5.2 修改/etc/gmond.conf 224
18.5.3 启动gmond和gmetad 224
18.5.4 添加Ganglia页到Apache配置 225
18.6 Ganglia Web软件包 225
18.6.1 标题部分 225
18.6.2 节点快照部分 226
18.6.3 从Ganglia Web软件包检查集群节点 227
18.6.4 从外壳提示检查集群节点 228
18.7 用gmetric创建定制度量 229
18.6.5 gstat 229
18.6.6 使用gstat在最轻负载的集群节点上运行命令 229
18.8 小结 231
第19章 集群管理中的案例研究 232
19.1 在没有Active Directory的情况下管理账户 232
19.1.1 遗留UNIX账户管理方法:问题 232
19.1.2 两个世界中最好的 233
19.2 构建可靠的集群账户验证机制 233
19.2.1 在每个集群节点上使用本地密码和组文件 233
19.2.2 简单脚本 234
19.3.2 LPRng:Linux企业集群打印系统 235
19.3.3 节点和打印作业 235
19.3.1 集群节点和作业排序 235
19.3 构建容错后台打印处理程序 235
19.3.4 基于LPRng构建集群打印系统 236
19.3.5 在中央打印服务器上安装LPRng 236
19.3.6 在集群节点上安装LPRng 237
19.3.7 修改集群节点上的/etc/printcap.local文件 237
19.3.8 修改中央打印服务器上的/etc/printcap文件 238
19.3.9 管理中央打印服务器上的打印作业 239
19.3.10 从集群节点管理打印服务业 239
19.4.2 将集群节点的权重更改为0 240
19.4.3 禁用对集群节点之一的Telnet访问 240
19.4.1 使用ipvsadm命令删除集群节点 240
19.4 为预防性维护重启节点 240
19.5 在集群环境中发送和接收电子邮件 241
19.6 创建没有单点故障的作业调度系统 242
19.6.1 运行ssh-keygen 242
19.6.2 修改每个集群节点上的sshd_config文件 242
19.6.3 在集群节点管理器上创建(RSA)known_hosts项 242
19.6.4 批作业调度程序 243
19.7 小结 244
第20章 Linux集群环境 245
20.1 Linux企业集群 245
20.2 集群节点管理器 246
20.3 客户端 247
20.4 NAS服务器 248
20.5 高可用串行设备 249
20.5.1 “串行到IP”通信设备 249
20.5.2 高可用性调制解调器 249
20.6 高可用性数据库服务器 250
20.7 把这些结合起来 251
20.8 小结 252
附录A 从Internet(文本终端)下载软件 253
附录B 用tcpdump工具进行疑难解答 257
附录C 添加网络接口卡到系统中 259
附录D 针对依赖性故障的策略 264
附录E 其他潜在的集群文件系统和锁仲裁方法 269
附录F LVS集群和Apache配置文件 270