分布式存储Ceph技术
认识分布式存储
分布式存储系统,是通过网络讲述库分散存储在多台独立的设备上;
分布式存储系统的特性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长,分布式存储的水平扩展有以下几个特征: 1)节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现; 2)水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对业务造成影响; 3)当节点被添加到集群,集群系统的整体容量和性能也随着之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或者回收;
低成本 分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上,另外,线性扩展能力也是的增加、减少机器非常方便,可以实现自动运维;
高性能 无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能;
易用 分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具、并能够与其他系统集成;
易管理 可通过一个简单的web界面就可以对整个系统进行配置管理、运维简便,极低的管理成本;
分布式存储系统的挑战主要在于数据、状态信息的持久化,需求在自动迁移、自动容错、并发读写的过程中保证数据的一致性,分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库;
|
存储分类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 本地存储文件系统,不能在网络上使用 ext3 ext4 xfs ntfs 网络存储--网络文件系统,共享的都是文件系统 nfs 网络文件系统 hdfs 分布式网络文件系统 glusterfs 分布式网络文件系统 共享的是裸设备 块存储cinder ceph(块存储、对象存储、网络文件系统-分布式) SAN(存储区域网) 分布式 集群 client | namenode 元数据服务器-管理服务器,存储这个文件的属性信息 | ------------------------------------ | | | datanode datanode datanode
|
Ceph
Ceph简介
1 2 3 4 5
| Ceph使用C++语言开发,遵循LGPL协议开源,Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Readhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用,出现Ceph开源社区版本和Readhat企业版;
Ceph主要设计的初衷是变成一个可避免单节点故障的分布式文件系统,PB级别的扩展能力,而且是一种开源自由软件,许多超融合的分布式文件系统都是基于Ceph开发的;
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性;
|
Ceph的优势
1 2 3 4
| 高扩展性:使用普通X86服务器,支持10~1000台服务器,存储容量支持TB到EB级的扩展; 高可靠性:没有单点故障,多数据副本,自动管理,自动修复; 高性能:数据分布均衡; 可用于对象存储、块设备存储和文件系统存储;
|
Ceph架构

1 2 3 4 5 6 7 8 9 10 11 12
| 基础存储系统: rados:基础存储系统RADOS(Reliable,Autonomic,Distributed Object Store,即可靠的、自动化的、分布式的对象存储)所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的,Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是这一层所提供的;
基础库librados: librados:这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS(而不是整个Ceph)进行应用开发,特别要注意的是,RADOS是一个对象存储系统,因此,librados实现的API也只是针对对象存储功能的,以便于应用或者客户端直接使用上层的接口(高层应用接口);
高层应用接口: radosgw:对象网关接口(对象存储) rdb:块存储 cephfs:文件系统存储 其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口;
|
Ceph组件

1 2 3 4 5 6 7 8 9 10 11 12 13
| OSD全称Object Storage Device 负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。 用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。并向其他osd守护进程发送心跳,然后向Mon提供以下监控信息。 当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要两个OSD守护进程即两个OSD节点,集群才能达到active+clean状态。
MDS(可选): 为Ceph文件系统提供元数据计算、缓存与同步(也就是说,Ceph块设备和Ceph对象存储不适用MDS)。再ceph中元数据也是存储再osd节点中的,mds类似于元数据的代理缓存服务器,MDS进程并不是必须的进程,只有需要使用cephfs时,才需要配置MDS节点。
Monitor: 监控整个集群状态,维护集群的cliuster MAP二进制表(二进制表存储osd网络地址,各个osd节点状态UP\DOWN,表不仅存储在monitor节点同时也被复制到集群中的其他节点,以及客户端),保证集群数据的一致性,ClusterMAP描述了对象块存储的物理位置,以及一个将设备聚合到物理位置的桶列表;
Manager(ceph-mgr) 用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供ceph dashboard(ceph ui)和resetful api。Manager组件开启高可用时,至少2个;
|
Ceph结构包含两部分
1 2
| ceph client:访问ceph底层服务或组件,对外提供各种接口,不如:对象存储接口、块存储接口、文件存储接口; ceph node:ceph底层服务提供端,也就是ceph存储集群;
|
Ceph存储种类及应用场景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| 1、块存储 #块存储的特点: 1.主要是将裸磁盘空间映射给主机使用的,共享的最小单位是块 2.使用的交换机是光纤交换机价格贵成本高 3.性能最好,扩展性好 4.不能做文件系统的共享 最典型的就是SAN(storage area network)(存储区域网)----有一个局域网里面有一个交换机,交换机上面连着服务器,所有服务器都是专业存储的设备,他们组成一个存储区域网,当我们用的时候只需要在这个区域网里面拿空间使用
#典型设备: 磁盘阵列,硬盘 优点: 通过Raid与LVM等手段,对数据提供了保护。 多块廉价的硬盘组合起来,提高容量。 多块磁盘组合出来的逻辑盘,提升读写效率。 缺点: 采用SAN架构组网时,光纤交换机,造价成本高。 主机之间无法共享数据。 使用场景: 虚拟机磁盘存储分配。 日志存储。 文件存储。 2、对象存储 为什么需要对象存储? 首先,一个文件包含了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。 而对象存储则将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。 由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。 另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。 #所以对象存储的出现,很好地结合了块存储与文件存储的优点。 #优点: 具备块存储的读写高速。 具备文件存储的共享等特性。 使用场景: (适合更新变动较少的数据) 图片存储。 视频存储。
|
Ceph同时提供对象存储、块存储和文件系统存储三种功能,满足不同应用需求。
什么是OSD
对象存储(object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(object-based storage Device方简称OSD。总体上来讲,对象存储综合了NAS和ISAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。
Ceph工作原理

1 2 3 4 5
| 无论使用哪种存储方式(对象、块、挂载),存储的数据都会被切分成对象(Objects),Objects size大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono生成。ino是文件的Fi1e ID,用于在全局唯一标示每一个文件,而ono则是分片的编号。比如:一个文件Fi1eID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为AO与A1。oid的好处是可以唯一标示每个不同的对象,并且存储了对象与文件的从属关系。由于ceph的所有数据都虚拟成了整齐划一的对象,所以在读写时效率都会比较高。 但是对象并不会直接存储进OSD中,因为对象的size很小,在一个大规模的集群中可能有几百到几千万个对象。这么多对象光是遍历寻址,速度都是很缓慢的:并且如果将对象直接通过某种固定映射的哈希算法映射到osd 上,当这个osd损坏时,对象无法自动迁移至其他osd 上面《因为映射函数不允许)。为了解决这些问题,ceph引入了归置组的概念,即PG。 PG是一个逻辑概念,我们linux系统中可以直接看到对象,但是无法直接看到PG。它在数据寻址时类似于数据库中的索引:每个对象都会固定映射进一个PG中,所以当我们要寻找一个对象时,只需要先找到对象所属的PG,然后遍历这个PG就可以了,无需遍历所有对象。而且在数据迁移时,也是以PG作为基本单位进行迁移,ceph不会直接操作对象。 对象是如何映射进PG的? 还记得OID么﹖首先使用静态hash函数对OID做hash取出特征码,用特征码与PG的数量去模,得到的序号则是PGID。由于这种设计方式,PG的数量多寡直接决定了数据分布的均匀性,所以合理设置的PG数量可以很好的提升CEPH集群的性能并使数据均匀分布。 最后PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上:(其实是把PG中的所有对象存储到节点上),第一个osd节点即为主节点,其余均为从节点。
|
Ceph核心组件及概念介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Monitor 监控整个集群的状态,维护集群的c1uster MAP二进制表,保证集群数据的一致性 OSD全称object storage Device 负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个osD. MDS全称ceph Metadata server 是CephFS服务依赖的元数据服务。 object -- ceph最底层的存储单元是Object对象,每个object包含元数据和原始数据。 PG全称Placement Grouops 是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。 RADOS全称Reliable Autonomic Distributed object store 是Ceph集群的精华,用户实现数据分配、Failover等集群操作。 Librados是Rados提供库 因为RADOS是协议很难直接访问,因此上层的RBD、RGw和CephFS都是通过librados访向的,目前提供PHP、 Ruby、Java、Python、c和C++支持。 CRUSH是Ceph使用的数据分布算法 类似一致性哈希,让数据分配到预期的地方。 RBD全称RADos block device 是ceph对外提供的块设备服务。 RGw全称RADos gateway 是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
cephFS全称ceph File system 是ceph对外提供的文件系统服务。
|
Ceph的存储方式
radosgw:Ceph对象网关
ceph对象网关是一个对象存储接口,建立在该对象之上,librados为应用程序提供了通往Ceph存储集群的RESTful网关。ceph对象存储支持两个接口:
与S3兼容:为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口。
兼容Swift:通过与openstack Swift API的大部分子集兼容的接口,为对象存储功能提供支持。
Ceph对象存储

使用Ceph对象网关守护进程(radosgw),它是用于与Ceph存储群集进行交互的HTTP服务器。由于它提供与OpenStack Swift和Amazon S3兼容的接口,Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据的同一Ceph存储群集中。S3和Swift API共享一个公共的名称空间,因此您可以使用一个API编写数据,而使用另一个API检索数据。
Ceph文件系统
Ceph文件系统(Ceph FS)是个 POSIX兼容的文件系统,它使用Ceph存储集群来存储数据。Ceph文件系统与Ceph 块设备、同时提供S3和Swift APl的Ceph对象存储、或者原生库( librados )一样,都使用着相同的Ceph存储集群系统。
Ceph块存储

Ceph 块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。 Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互。