前言
随着信息化浪潮的到来,全球各行各业逐步借助信息技术深入发展。据悉,企业及互联网数据以每年50%的速率在增长。据权威调查机构Gartner预测,到2020年,全球数据量将达到35ZB,相当于80亿块4TB硬盘,数据结构的变化给存储系统带来了全新的挑战。那么有什么方法能够存储这些数据呢?我认为Ceph是解决未来十年数据存储需求的一个可行方案。Ceph是存储的未来!SDS是存储的未来!
为什么写这本书
目前,磁盘具备容量优势,固态硬盘具备速度优势。但能否让容量和性能不局限在一个存储器单元呢?我们很快联想到磁盘阵列技术(Redundant Array of Independent Disk,RAID,不限于HDD)。磁盘阵列技术是一种把多块独立的硬盘按不同的方式组合起来形成一个硬盘组(Disk Group,又称Virtual Disk),从而提供比单个硬盘更高的存储性能与数据备份能力的技术。磁盘阵列技术既可提供多块硬盘读写的聚合能力,又能提供硬盘故障的容错能力。
镜像技术(Mirroring)又称为复制技术(Replication),可提供数据冗余性和高可用性;条带(Striping),可提供并行的数据吞吐能力;纠删码(Erasure Code),把数据切片并增加冗余编码而提供高可用性和高速读写能力。镜像、条带和纠删码是磁盘阵列技术经典的数据分发方式,这3种经典的磁盘技术可通过组合方式提供更加丰富的数据读写性能。
传统的磁盘阵列技术的关注点在于数据在磁盘上的分发方式,随着通用磁盘、通用服务器,以及高速网络的成本降低,使数据在磁盘上的分发扩展到在服务器节点上的分发成为可能。镜像技术、条带技术和纠删码技术基于服务器节点的粒度实现后,这些技术的特点不再局限于单个设备的性能,而是具备“横向扩展”能力。我们暂且认为这是分布式存储本质的体现。
分布式存储解决了数据体量问题,对应用程序提供标准统一的访问接入,既能提升数据安全性和可靠性,又能提高存储整体容量和性能。可以预见,分布式存储是大规模存储的一个实现方向。分布式存储广泛地应用于航天、航空、石油、科研、政务、医疗、视频等高性能计算、云计算和大数据处理领域。目前行业应用对分布式存储技术需求旺盛,其处于快速发展阶段。
Ceph是加州大学圣克鲁兹分校的Sage Weil博士论文的研究项目,是一个使用自由开源协议(LGPLv2.1)的分布式存储系统。目前Ceph已经成为整个开源存储行业最热门的软件定义存储技术(Software Defined Storage,SDS)。它为块存储、文件存储和对象存储提供了统一的软件定义解决方案。Ceph旨在提供一个扩展性强大、性能优越且无单点故障的分布式存储系统。从一开始,Ceph就被设计为能在通用商业硬件上高度扩展。
由于其开放性、可扩展性和可靠性,Ceph成为了存储行业中的翘楚。这是云计算和软件定义基础设施的时代,我们需要一个完全软件定义的存储,更重要的是它要为云做好准备。无论运行的是公有云、私有云还是混合云,Ceph都非常合适。国内外有不少的Ceph应用方案,例如美国雅虎公司使用Ceph构建对象存储系统,用于Flickr、雅虎邮箱和Tumblr(轻量博客)的后端存储;国内不少公有云和私有云商选择Ceph作为云主机后端存储解决方案。
如今的软件系统已经非常智能,可以最大限度地利用商业硬件来运行规模庞大的基础设施。Ceph就是其中之一,它明智地采用商业硬件来提供企业级稳固可靠的存储系统。
Ceph已被不断完善,并融入以下建设性理念。
每个组件能够线性扩展。
无任何单故障点。
解决方案必须是基于软件的、开源的、适应性强的。
运行于现有商业硬件之上。
每个组件必须尽可能拥有自我管理和自我修复能力。
对象是Ceph的基础,它也是Ceph的构建部件,并且Ceph的对象存储很好地满足了当下及将来非结构化数据的存储需求。相比传统存储解决方案,对象储存有其独特优势:我们可以使用对象存储实现平台和硬件独立。Ceph谨慎地使用对象,通过在集群内复制对象来实现可用性;在Ceph中,对象是不依赖于物理路径的,这使其独立于物理位置。这种灵活性使Ceph能实现从PB(petabyte)级到EB(exabyte)级的线性扩展。
Ceph性能强大,具有超强扩展性及灵活性。它可以帮助用户摆脱昂贵的专有存储孤岛。Ceph是真正在商业硬件上运行的企业级存储解决方案;是一种低成本但功能丰富的存储系统。Ceph通用存储系统同时提供块存储、文件存储和对象存储,使客户可以按需使用。
由于国内许多企业决策者逐渐认识到Ceph的优势与前景,越来越多来自系统管理和传统存储的工程师使用Ceph,并有相当数量的企业基于Ceph研发分布式存储产品,为了更好地促进Ceph在国内传播和技术交流,我们几个爱好者成立了Ceph中国社区。目前,通过网络交流群、消息内容推送和问答互动社区,向国内关注Ceph技术的同行提供信息交流和共享平台。但是,由于信息在传递过程中过于分散,偶尔编写的文档内容并不完整,导致初学者在学习和使用Ceph的过程中遇到不少疑惑。同时,由于官方文档是通过英文发布的,对英语不太熟悉的同行难于学习。鉴于此,Ceph中国社区组织技术爱好者编写本书,本书主要提供初级和中级层面的指导。根据调查反馈以及社区成员的意见,我们确定了本书内容。
本书特色
在本书中,我们将采用穿插方式讲述Ceph分布式存储的原理与实战。本书侧重实战,循序渐进地讲述Ceph的基础知识和实战操作。从第1章起,读者会了解Ceph的前生今世。随着每章推进,读者将不断学习、不断深入。我希望,到本书的结尾,读者不论在概念上还是实战上,都能够成功驾驭Ceph。每个章节在讲述完基础理论知识后会有对应的实战操作。我们建议读者在自己的电脑上按部就班地进行实战操作。这样,一来读者不会对基础理论知识感到困惑,二来可让读者通过实战操作加深对Ceph的理解。同时,如果读者在阅读过程中遇到困难,我们建议再重温已阅章节或重做实验操作,这样将会加深理解,也可以加入Ceph中国社区QQ群(239404559)进行技术讨论。
读者对象
本书适用于以下读者。
Ceph爱好者。
云平台运维工程师。
存储系统工程师。
系统管理员。
高等院校的学生或者教师。
本书是专门对上述读者所打造的Ceph入门级实战书籍。如果你具备GNU/ Linux和存储系统的基本知识,却缺乏软件定义存储解决方案及Ceph相关的经验,本书也是不错的选择。云平台运维工程师、存储系统工程师读完本书之后能够深入了解Ceph原理、部署和维护好线上Ceph集群。同时,本书也适合大学高年级本科生和研究生作为Ceph分布式存储系统或者云计算相关课程的参考书籍,能够带领你进入一个开源的分布式存储领域,深入地了解Ceph,有助于你今后的工作。
如何阅读本书
由于Ceph是运行在GNU/Linux系统上的存储解决方案,我们假定读者掌握了存储相关知识并熟悉GNU/Linux操作系统。如果读者在这些方面知识有欠缺,可参照阅读其他书籍或专业信息网站。
本书将讲述如下的内容。
第1章 描述Ceph的起源、主要功能、核心组件逻辑、整体架构和设计思想,并通过实战的方式指导我们快速建立Ceph运行环境。
第2章 描述Ceph的分布式本质,深入分析Ceph架构,并介绍如何使用LIBRADOS库。
第3章 描述CRUSH的本质、基本原理,以及CRUSH作用下数据与对象的映射关系。
第4章 描述Ceph FS文件系统、RBD块存储和Object对象存储的建立以及使用。
第5章 描述Calamari的安装过程和基本使用操作。
第6章 描述Ceph FS作为高性能计算和大数据计算的后端存储的内容。
第7章 描述RBD在虚拟化和数据库场景下的应用,包括OpenStack、CloudStack和ZStack与RBD的结合。
第8章 描述基于Ceph的云盘技术方案和备份方案,描述网关的异地同步方案和多媒体转换网关设计。
第9章 描述Ceph的硬件选型、性能调优,以及性能测试方法。
第10章 描述CRUSH的结构,并给出SSD与SATA混合场景下的磁盘组织方案。
第11章 描述Ceph的缓冲池原理和部署,以及纠删码原理和纠删码库,最后描述纠删码池的部署方案。
第12章 对3种存储访问类型的生产环境案例进行分析。
第13章 描述Ceph日常运维细节,以及常见错误的处理方法。
勘误与支持
在本书的写作过程,我们也参考了Ceph中国社区往期沙龙一线工程师、专家分享的经验和Ceph官方文档。我们热切希望能够为读者呈现丰富而且权威的Ceph存储技术。由于Ceph社区不断发展,版本迭代速度快,笔者水平有限,书中难免存在技术延后和谬误,恳请读者批评指正。可将任何意见和建议发送到邮箱devin@ceph.org.cn或者star.guo@ceph.org.cn,也可以发布到Ceph中国社区问答系统http://bbs.ceph.org.cn/。我们将密切跟踪Ceph分布式存储技术的发展,吸收读者宝贵意见,适时编写本书的升级版本。Ceph中国社区订阅号为:“ceph_community”
“Ceph中国社区订阅号”会定期发送Ceph技术文章、新闻资讯。也欢迎读者通过这个微信订阅号进行本书勘误反馈,本书的勘误和更新也会通过订阅号发布。
致谢
首先要感谢我们社区的全体志愿者,社区的发展离不开全体志愿者们无怨无悔的奉献,正是有了你们才有了社区今日的繁荣,其次要感谢所有支持过我们的企业,是你们的慷慨解囊成就了Ceph中国社区今日的壮大,最后感谢陈晓熹的校稿以及所有为本书编写提供支持、帮助的人。未来,我们也非常欢迎有志将开源事业发扬光大的同学们积极加入我们的社区,和我们一起创造Ceph未来的辉煌。
目录
第1章 初识Ceph
1.1 Ceph概述
1.2 Ceph的功能组件
1.3 Ceph架构和设计思想
1.4 Ceph快速安装
1.5 本章小结
第2章 存储基石RADOS
2.1 Ceph功能模块与RADOS
2.2 RADOS架构
2.3 RADOS与LIBRADOS
2.4 本章小结
第3章 智能分布CRUSH
3.1 引言
3.2 CRUSH基本原理
3.3 CRUSH关系分析
3.4 本章小结
第4章 三大存储访问类型 42
4.1 Ceph FS文件系统 42
4.1.1 Ceph FS和MDS介绍 43
4.1.2 部署MDS 45
4.1.3 挂载Ceph FS 46
4.2 RBD块存储 47
4.2.1 RBD介绍 47
4.2.2 librbd介绍 48
4.2.3 KRBD介绍 48
4.2.4 RBD操作 50
4.2.5 RBD应用场景 56
4.3 Object对象存储 57
4.3.1 RGW介绍 57
4.3.2 Amazon S3简介 58
4.3.3 快速搭建RGW环境 61
4.3.4 RGW搭建过程的排错指南 68
4.3.5 使用S3客户端访问RGW服务 71
4.3.6 admin管理接口的使用 75
4.4 本章小结 78
第5章 可视化管理Calamari 79
5.1 认识Calamari 79
5.2 安装介绍 79
5.2.1 安装calamari-server 80
5.2.2 安装romana(calamari-client) 82
5.2.3 安装diamond 85
5.2.4 安装salt-minion 86
5.2.5 重启服务 87
5.3 基本操作 87
5.3.1 登录Calamari 87
5.3.2 WORKBENCH页面 88
5.3.3 GRAPH页面 89
5.3.4 MANAGE页面 90
5.4 本章小结 92
第6章 文件系统—高性能计算与大数据 93
6.1 Ceph FS作为高性能计算存储 93
6.2 Ceph FS作为大数据后端存储 98
6.3 本章小结 101
第7章 块存储—虚拟化与数据库 102
7.1 Ceph与KVM 102
7.2 Ceph与OpenStack 106
7.3 Ceph与CloudStack 110
7.4 Ceph与ZStack 114
7.5 Ceph提供iSCSI存储 122
7.6 本章小结 128
第8章 对象存储—云盘与RGW异地灾备 129
8.1 网盘方案:RGW与OwnCloud的整合 129
8.2 RGW的异地同步方案 133
8.2.1 异地同步原理与部署方案设计 134
8.2.2 Region异地同步部署实战 137
8.3 本章小结 146
第9章 Ceph硬件选型、性能测试与优化 147
9.1 需求模型与设计 147
9.2 硬件选型 148
9.3 性能调优 151
9.3.1 硬件优化 152
9.3.2 操作系统优化 155
9.3.3 网络层面优化 161
9.3.4 Ceph层面优化 170
9.4 Ceph测试 174
9.4.1 测试前提 175
9.4.2 存储系统模型 175
9.4.3 硬盘测试 176
9.4.4 云硬盘测试 182
9.4.5 利用Cosbench来测试Ceph 185
9.5 本章小结 189
第10章 自定义CRUSH 191
10.1 CRUSH解析 191
10.2 CRUSH设计:两副本实例 201
10.3 CRUSH设计:SSD、SATA混合实例 207
10.3.1 场景一:快–慢存储方案 207
10.3.2 场景二:主–备存储方案 214
10.4 模拟测试CRUSH分布 217
10.5 本章小结 222
第11章 缓冲池与纠删码 223
11.1 缓冲池原理 223
11.2 缓冲池部署 225
11.2.1 缓冲池的建立与管理 226
11.2.2 缓冲池的参数配置 226
11.2.3 缓冲池的关闭 228
11.3 纠删码原理 229
11.4 纠删码应用实践 232
11.4.1 使用Jerasure插件配置纠删码 232
11.4.2 ISA-L插件介绍 234
11.4.3 LRC插件介绍 235
11.4.4 其他插件介绍 235
11.5 本章小结 235
第12章 生产环境应用案例 237
12.1 Ceph FS应用案例 237
12.1.1 将Ceph FS导出成NFS使用 238
12.1.2 在Windows客户端使用Ceph FS 239
12.1.3 OpenStack Manila项目对接Ceph FS案例 242
12.2 RBD应用案例 244
12.2.1 OpenStack对接RBD典型架构 244
12.2.2 如何实现Cinder Multi-Backend 246
12.3 Object RGW应用案例:读写分离方案 248
12.4 基于HLS的视频点播方案 249
12.5 本章小结 251
第13章 Ceph运维与排错 252
13.1 Ceph集群运维 252
13.1.1 集群扩展 252
13.1.2 集群维护 259
13.1.3 集群监控 266
13.2 Ceph常见错误与解决方案 277
13.2.1 时间问题 277
13.2.2 副本数问题 279
13.2.3 PG问题 282
13.2.4 OSD问题 286
13.3 本章小结 292