第1篇 基础篇 2
第1章 OpenStack概述 2
1.1云计算简介 2
1.1.1什么是云计算 2
1.1.2什么是云存储 3
1.1.3私有云与公有云 4
1.2为什么使用云计算 5
1.2.1方案1:简单的服务部署 5
1.2.2方案2:分布式服务部署 6
1.2.3方案3:基于虚拟化的服务部署 8
1.2.4方案4:云计算的解决方案 11
1.3 OpenStack架构 13
1.3.1 OpenStack与云计算 13
1.3.2 OpenStack发展与现状 13
1.3.3 OpenStack优势 14
1.3.4 OpenStack学习建议 15
1.4 OpenStack各个组件及功能 16
1.4.1虚拟机管理系统Nova 16
1.4.2磁盘存储系统Glance与Swift 17
1.4.3虚拟网络管理Quantum 18
1.4.4 OpenStack三大组件 18
1.5小结 19
第2章 虚拟化技术 20
2.1虚拟化技术简介 20
2.1.1 KVM 20
2.1.2Xen 21
2.1.3Libvirt 22
2.2安装Libvirt虚拟化工具 22
2.2.1安装KVM 22
2.2.2安装Libvirt 24
2.3虚拟机配置文件详解 25
2.3.1 xml描述hypervisor 26
2.3.2虚拟机整体信息 28
2.3.3系统信息 29
2.3.4硬件资源特性 29
2.3.5突发事件处理 30
2.3.6 raw格式image 30
2.3.7 qcow2格式image 31
2.3.8格式的选择 34
2.3.9多个image 35
2.3.10虚拟光盘 36
2.3.11虚拟网络 36
2.3.12 vnc配置 39
2.4制作image 39
2.4.1 virt-manager创建image 40
2.4.2 virsh命令创建image 44
2.5快速启动虚拟机 47
2.5.1手动安装 47
2.5.2直接复制 47
2.5.3 qcow2快速创建 48
2.5.4修改qcow2image 49
2.5.5大批量创建虚拟机 52
2.6虚拟机桌面显示 57
2.6.1准备工作 58
2.6.2创建Windows 7Image 58
2.6.3创建Windows 7虚拟机 60
2.6.4 spice桌面显示 61
2.7常见错误与分析 62
2.8小结 63
2.8.1常用的virsh命令 63
2.8.2磁盘快照管理 66
第2篇 安装篇 70
第3章 安装Keystone安全认证服务 70
3.1 Keystone简介 70
3.2搭建局域网源 71
3.2.1局域网apt-get源搭建方法 71
3.2.2局域网python源搭建方法 72
3.2.3 Ubuntu-12.10局域网源 74
3.3搭建 MySQL数据库 74
3.3.1 apt-get安装MySQL 74
3.3.2源码安装MySQL 78
3.4安装RabbitMQ消息通信服务 80
3.5安装Keystone 81
3.5.1 python源码包的安装 81
3.5.2 Keystone自动化安装 83
3.5.3 Keystone客户端使用及测试 91
3.5.4 Keystone的管理 92
3.6常见错误与分析 94
3.6.1无法下载python依赖包 95
3.6.2 Keystone命令运行失败 95
3.7小结 96
第4章 安装Swift存储服务 97
4.1 Swift基本概念 97
4.1.1 Swift的特性 97
4.1.2 Swift的架构 98
4.1.3 Swift的故障处理 99
4.1.4 Swift的集群部署 100
4.2搭建环境 101
4.2.1准备工作 101
4.2.2创建Proxy Node 102
4.2.3创建Storage Node 102
4.3安装Proxy服务 102
4.3.1解决依赖关系 103
4.3.2注册Swift服务 104
4.3.3配置Proxy服务 105
4.3.4启动Proxy服务 108
4.4安装存储服务 109
4.4.1磁盘格式化 110
4.4.2同步服务 112
4.4.3子服务 113
4.4.4启动存储服务 115
4.5管理存储服务 116
4.5.1使用存储服务 116
4.5.2删除存储节点 117
4.5.3添加存储节点 117
4.5.4添加Proxy节点 118
4.6常见错误及分析 118
4.6.1 Keystone注册用户失败 118
4.6.2 Proxy服务无法正常启动 119
4.6.3存储服务无法使用 119
4.7小结 121
4.7.1安装Proxy Node 121
4.7.2安装Storage Node 122
第5章 安装Glance镜像服务 123
5.1 Glance简介 123
5.2 Glance服务的安装 123
5.2.1解决依赖关系 124
5.2.2注册Glance服务至Keystone 124
5.2.3 Glance源码包的安装 126
5.3 Glance服务的配置 127
5.3.1 Glance服务的基本配置 127
5.3.2使用文件系统存储镜像 128
5.3.3使用Swift对象存储服务存储镜像 130
5.3.4上传复杂的磁盘镜像 131
5.3.5上传磁盘镜像参考脚本 133
5.4Glance自动化安装 133
5.5常见错误分析 134
5.5.1上传磁盘镜像中断的解决方案 134
5.5.2 openssl出错 135
5.5.3上传大磁盘镜像的方法 135
5.6小结 136
第6章 安装Quantum虚拟网络服务 137
6.1 OpeNvSwitch虚拟交换机 137
6.1.1 OpeNvSwitch简介 137
6.1.2 GRE隧道模式 138
6.1.3 VLAN模式 142
6.2解决依赖关系 145
6.3注册Quantum服务至Keystone 146
6.4安装Quantum服务 147
6.4.1源码安装Quantum 148
6.4.2Quantum Server的配置 149
6.4.3配置OVS agent 151
6.4.4配置dhcp agent 152
6.4.5配置13agent 152
6.5 Quantum自动化安装 153
6.6 Quantum服务使用及测试 154
6.6.1创建内部网络 154
6.6.2创建外部网络 155
6.7常见错误与分析 156
6.7.1虚拟机之间无法通信 156
6.7.2 dhcp和agent服务启动警告 156
6.8小结 157
6.8.1 OpeNvSwitch的使用 157
6.8.2 Quantum的安装 157
第7章 安装Cinder块存储服务 159
7.1 Cinder基本概念 159
7.1.1 Cinder的特性 159
7.1.2 Cinder的架构 160
7.1.3 Cinder架构的优缺点 162
7.2搭建环境 163
7.2.1准备工作 163
7.2.2创建API Node 163
7.2.3创建Volume存储节点 164
7.3安装Cinder API服务 164
7.3.1解决依赖关系 164
7.3.2注册Cinder服务至Keystone 165
7.3.3配置MySQL服务 167
7.3.4修改配置文件 168
7.3.5运行Cinder API服务 169
7.4安装Cinder Volume服务 170
7.4.1准备工作 170
7.4.2启动Volume服务 171
7.5参考部署 171
7.5.1单节点部署 171
7.5.2多节点部署 177
7.6常见错误及分析 180
7.6.1虚拟机之间无法通信 180
7.6.2 cinder客户端命令执行失败 182
7.6.3没有额外分区 182
7.7小结 183
7.7.1安装Cinder API Node 183
7.7.2安装Cinder Volume Node 183
第8章 安装Nova虚拟机管理系统 184
8.1 Nova基本概念 184
8.1.1Nova的特性 184
8.1.2Nova的架构 186
8.1.3Nova架构的优缺点 189
8.2搭建环境 189
8.2.1准备工作 189
8.2.2创建节点 191
8.3安装Nova API服务 191
8.3.1准备工作 192
8.3.2解决依赖关系 194
8.3.3注册Nova服务 195
8.3.4配置MySQL服务 196
8.3.5修改Nova配置文件 197
8.4安装Nova Compute服务 199
8.4.1准备工作 199
8.4.2解决依赖关系 200
8.4.3配置文件 201
8.4.4启动服务 201
8.4.5检查服务 202
8.5参考部署 202
8.5.1单节点部署 203
8.5.2多节点部署 205
8.6客户端使用 207
8.6.1环境变量 208
8.6.2创建虚拟机 208
8.7小结 209
8.7.1安装Nova API Node 209
8.7.2安装Nova Compute Node 210
第9章 安装Dashboard Web界面 211
9.1Dashboard简介 211
9.2Dashboard的安装 211
9.2.1解决依赖关系 212
9.2.2源码安装Horizon 213
9.3Dashboard的配置 214
9.3.1 local_ settings.py文件的配置 214
9.3.2 secret_ey.py文件的修改 215
9.3.3 Apache2的配置 216
9.3.4 vncproxy的配置 217
9.4 Dashboard自动化安装 218
9.5 Web界面使用及测试 219
9.5.1登录Dashboard 219
9.5.2使用Dashboard上传镜像 221
9.5.3使用Dashboard创建网络 222
9.5.4使用Dashboard创建虚拟机 223
9.6常见错误分析 224
9.7小结 225
第10章 OpenStack部署示例 226
10.1OpenStack单节点部署 226
10.1.1单节点部署的特点 226
10.1.2准备工作 227
10.1.3系统初始化配置 229
10.1.4安装OpenStack各组件 229
10.2 OpenStack多节点部署 237
10.2.1多点部署特点 237
10.2.2部署流程 239
10.3 OpenStack实用部署 249
10.3.1实用部署特点 249
10.3.2部署流程 251
10.4常见错误及分析 255
10.4.1 eth 1网卡无法使用 256
10.4.2自建源无法使用 256
10.4.3客户端命令执行失败 256
10.5小结 257
10.5.1单节点安装 257
10.5.2多节点安装 257
10.5.3实用安装 257
第3篇 剖析篇 260
第11章 OpenStack服务分析 260
11.1RESTful API简介 260
11.2搭建RESTful API 261
11.2.1一个简单的WSGI服务 262
11.2.2使用PasteDeploy定制WSGI服务 262
11.2.3带过滤器的WSGI服务 264
11.2.4利用类来实现过滤器和应用 266
11.2.5实现WSGI服务的URL映射 268
11.3基于消息通信的RPC调用 274
11.3.1 AMQP简介 275
11.3.2 RabbitMQ分析 276
11.3.3 RPC调用的实现 278
11.4小结 290
11.4.1 RESTful API 290
11.4.2 RPC调用 291
第12章 Keystone的安全认证 292
12.1Keystone框架结构 293
12.1.1 Keystone服务端架构 293
12.1.2 Keystone客户端架构 300
12.2用户管理 303
12.2.1用户认证 303
12.2.2本地认证 310
12.2.3用户信息的维护 313
12.3多租户机制 315
12.3.1租户管理 316
12.3.2角色管理 317
12.3.3权限管理 318
12.4 Token管理 322
12.4.1 Token认证方式 322
12.4.2 Token的存储 325
12.5服务的安全认证 326
12.6 OpenStack各个模块与Keystone的交互 329
12.7小结 335
12.7.1 Keystone服务器端架构 335
12.7.2客户端发送HTTP请求流程 335
12.7.3用户认证 335
12.7.4访问OpenStack服务的流程 336
第13章 Swift存储服务 337
13.1Swift框架概述 337
13.2问题描述 338
13.3炮灰方法 339
13.4快拳方法 339
13.4.1算法原理 339
13.4.2算法实现 340
13.4.3算法分析 341
13.4.4算法破绽 342
13.5太极拳 344
13.5.1算法原理 344
13.5.2算法实现 347
13.5.3算法分析 348
13.5.4算法升级 349
13.5.5算法破绽 351
13.6虚实相生 352
13.6.1算法原理 352
13.6.2算法实现 354
13.6.3算法分析 355
13.6.4算法升级 357
13.6.5算法分析 361
13.7扩展 364
13.7.1映射中的动与不动 365
13.7.2虚节点数目 366
13.73剩余话题 368
13.8小结 369
第14章 Quantum虚拟网络 370
14.1 Quantum框架概述 370
14.2 Quantum Server服务 371
14.2.1 Quantum Server启动流程 371
14.2.2启动ovs plugiNRPC服务 375
14.2.3创建网络 377
14.2.4创建子网 379
14.2.5创建端点 380
14.3 Quantum OpenVSwitch Agent服务 384
14.3.1 Quantum OVS Agent启动流程 385
14.3.2 Quantum OVS Agent定时任务 390
14.3.3虚拟网络的实现 397
14.4 Nova与Quantum的交互 398
14.4.1分配逻辑网络资源 398
14.4.2创建OpenVSwitch端点 400
14.5 Quantum DHCP Agent服务 402
14.5.1服务的启动 403
14.5.2 Manager类 407
14.5.3 Dnsmasq DHCP的维护 410
14.6小结 416
14.6.1 Quantum主要数据库表单 416
14.6.2 Quantum OpenVSwitch Agent的启动 416
14.6.3虚拟机通信流程 417
14.6.4创建端点的流程 418
14.6.5创建Dnsmasq DHCP服务 418
第15章 Nova框架 420
15.1 Nova框架介绍 420
15.2Nova API服务 421
15.2.1 Nova API服务的启动 421
15.2.2处理HTTP请求的流程 423
15.2.3创建虚拟机流程 427
15.3 Nova RPC服务 432
15.3.1 Nova Scheduler的启动流程 433
15.3.2Nova RPC服务的创建 434
15.4Nova Scheduler服务分析 438
15.4.1创建虚拟机请求的处理流程 439
15.4.2调度算法 441
15.4.3资源信息的更新 443
15.4.4过滤和权值计算 444
15.5Nova Conductor服务 453
15.6小结 456
15.6.1创建虚拟机请求的处理流程 456
15.6.2调度算法 456
第16章 Nova Compute服务 458
16.1定时任务 458
16.1.1定时任务的启动 458
16.1.2 update_available_resource 464
16.1.3 report_driver_status 469
16.1.4 publish_service capabilities 470
16.2创建虚拟机 471
16.2.1创建虚拟机的流程 471
16.2.2创建虚拟机镜像文件 474
16.2.3创建虚拟机XML定义文件 481
16.2.4创建虚拟机和虚拟网络 487
16.3虚拟机的在线迁移 488
16.3.1 virsh命令实现在线迁移 489
16.3.2虚拟机迁移的整体流程 491
16.3.3虚拟机迁移的前期检查 494
16.3.4 Nova Compute服务中的迁移流程 502
16.4虚拟机快照管理 510
16.4.1 Nova API创建快照流程 511
16.4.2 Nova Compute创建快照流程 513
16.5小结 520
16.5.1 Nova RPC定时任务的创建 520
16.5.2 Nova Compute创建虚拟机 521
16.5.3 virsh命令迁移虚拟机 522
16.5.4 Nova Compute在线迁移 523
16.5.5 Nova Compute服务创建快照流程 524
第4篇 扩展篇 526
第17章 从OpenStack到云应用 526
17.1 Hadoop简介 526
17.1.1 HDFS文件系统 526
17.1.2 Map Reduce机制 529
17.2 Hadoop的安装 530
17.2.1准备工作 530
17.2.2 Hadoop的单节点模式 532
17.2.3 Hadoop的伪分布式模式 533
17.2.4 Hadoop的全分布式模式 536
17.3 Hadoop的性能分析 537
17.3.1 Chukwa与Hitune简介 537
17.3.2 Chukwa的安装与配置 538
17.3.3使用Hitune分析Hadoop的性能 542
17.4 Hadoop和Chukwa的自动化安装 546
17.5 OpenStack上的Android测试环境 548
17.5.1 Android测试环境简介 548
17.5.2搭建Android测试环境 549
17.6常见错误与分析 553
17.6.1 Hadoop常见错误 553
17.6.2 Chukwa常见错误 554
17.6.3搭建Android测试环境 555
17.7小结 556
17.7.1安装Hadoop 556
17.7.2安装Chukwa 557
17.7.3 Hadoop Job报表 558
17.7.4创建Android虚拟机 558
第18章 基于Nova的扩展 560
18.1定制调度算法 560
18.1.1配置fiilter 560
18.1.2添加自定义fiilter 563
18.1.3 fiilter_properties 566
18.2自定义ExtensioNAPI 569
18.2.1 ExtensioNAPI的启动流程 569
18.2.2实现自定义ExtensioNAPI 576
18.3自定义ExtentioNAPI客户端 578
18.3.1 ExtentioNAPI客户端加载流程 578
18.3.2添加ExtentioNAPI客户端 578
18.4Nova中添加自定义模块 581
18.4.1添加新模块 581
18.4.2添加新模块的API 583
18.4.3添加定时任务 587
18.4.4添加数据库接口 589
18.5小结 598
18.5.1定制fiilter的步骤 598
18.5.2添加ExtensioNAPI的步骤 598
18.5.3扩展Nova Client模块的方法 598
18.5.4添加Nova模块的步骤 598
18.5.5创建自定义Nova数据库 599
第19章 添加自定义组件 600
19.1自定义组件概述 600
19.1.1自定义组件及优缺点 600
19.1.2自定义组件的使用 601
19.1.3需求 601
19.2准备工作 602
19.2.1开发环境 602
19.2.2准备安装包 602
19.2.3安装依赖服务 602
19.2.4安装Monitor服务 604
19.3设计原理 608
19.3.1框架 608
19.3.2 Dashboard 609
19.3.3 python-monitorclient 610
19.3.4 monitor-api 611
19.4数据库设计与实现 612
19.4.1连接数据库 613
19.4.2创建数据库表单 614
19.4.3模型类 619
19.4.4访问数据库 620
19.4.5发布数据库API 623
19.5 Conductor数据库服务 623
19.5.1配置项目 624
19.5.2添加配置项 625
19.5.3 Conductor实现 626
19.5.4启动Conductor服务 628
19.6添加RESTful API 629
19.6.1 RESTful API处理流程 629
19.6.2消息路由器Router 629
19.6.3消息处理函数 630
19.6.4客户端发送请求 631
19.6.5客户端的使用 631
19.7小结 633