分布式存储Ceph

存储分类

 1.本地文件系统
     ntfs(wind)、ext2、ext3、ext4、xfs
     
     ext2不带日志,3和4带有日志:文件系统的日志作用(防止机器突然断电):所有的数据在给磁盘存数据之前会先给文件系统的日志里面存一份,防止机器突然断电之后数据没有存完,这样它还可以从日志里面重新将数据拷贝到磁盘。
             
 2.网络文件系统----做远程共享    
     
     非分布式
         nfs           网络文件系统--称之为nas存储(网络附加存储)
     分布式
         hdfs          分布式网络文件系统
         glusterfs     分布式网络文件系统,不需要管理服务器
         ceph         分布式网络文件系统,块存储,对象存储
         
         #分布式文件系统特点
             1.共享的是文件系统。共享的最小单位是文件
             2.可扩展性强、安全。实现PB级别的存储
 ​
 #分布式文件系统存储使用架构
                              client
                                 |
                             namenode  元数据服务器-管理服务器,存储这个文件的数据存放的位置信息    
                                 |
                 ------------------------------------
                 |               |                  |
               datanode        datanode            datanode  #存储数据,数据节点
  
 #对象存储使用架构
 ​
 文件---数字(innode号)innode信息(文件属性:)
 文件组成:
         文件属性   innode(存放文件的属性:文件名称、大小、权限、存放数据块....)
         纯数据
 ​
 ​
                              client
                                 |
                             namenode  元数据服务器-管理服务器,存储这个文件的属性信息    
                                 |
                 ------------------------------------
                 |               |                  |
               datanode        datanode            datanode  #存储数据的数据节点
         
 #注意:
         1.分布式存储不一定是对象存储,所有的对象存储一定是分布式存储
         2.分布式文件系统的元数据服务器存储的各个数据的位置信息
         3.对象存储服务的的元数据服务器存储的是数据的属性信息
 ​
 ​
     
 非分布式文件系统
 #典型设备: FTP、NFS服务器
 为了克服块存储文件无法共享的问题,所以有了文件存储。在服务器上安装FTP与NFS服务,就是文件存储。
 优点:
             造价低,随便一台机器就可以了。
             方便文件共享。
 缺点:
             读写速率低。
             传输速率慢。
 使用场景:
             日志存储。
             有目录结构的文件存储。
     
 ​
 3.分布式文件系统的特性
         可扩展
         分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性:
           1) 节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点故障的情况出现;
           2) 水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对业务造成影响;
 ​
         低成本
         分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上。
 ​
         易管理
         可通过一个简单的WEB界面就可以对整个系统进行配置管理,运维简便,极低的管理成本。
 ​
 4.块存储
     #块存储的特点:
     1.主要是将裸磁盘空间映射给主机使用的,共享的最小单位是块
     2.使用的交换机是光纤交换机价格贵成本高
     3.性能最好,扩展性好
     4.不能做文件系统的共享
 ​
         最典型的就是SAN(storage area network)(存储区域网)----有一个局域网里面有一个交换机,交换机上面连着服务器,所有服务器都是专业存储的设备,他们组成一个存储区域网,当我们用的时候只需要在这个区域网里面拿空间使用
         
 ​
 #典型设备: 磁盘阵列,硬盘
 优点:
         通过Raid与LVM等手段,对数据提供了保护。
         多块廉价的硬盘组合起来,提高容量。
         多块磁盘组合出来的逻辑盘,提升读写效率。
 缺点:
         采用SAN架构组网时,光纤交换机,造价成本高。
         主机之间无法共享数据。
 使用场景:
         虚拟机磁盘存储分配。
         日志存储。
         文件存储。
 ​
 5.对象存储                   
     为什么需要对象存储?
     首先,一个文件包含了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。
 ​
     而对象存储则将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。
 ​
     由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。
 ​
     另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。
 ​
     #所以对象存储的出现,很好地结合了块存储与文件存储的优点。
 ​
 #优点:
         具备块存储的读写高速。
         具备文件存储的共享等特性。
 ​
 使用场景: (适合更新变动较少的数据)
         图片存储。
         视频存储。                 

常见分布式存储---了解

Hadoop HDFS

HDFS(Hadoop Distributed File System)是一个分布式文件系统,是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件.HDFS是一个高度容错性的系统,HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

 HDFS的优点:
 ​
       1.  高容错性 
              数据自动保存多个副本
              副本丢失后,自动恢复
       2.  良好的数据访问机制 
              一次写入、多次读取,保证数据一致性
       3.  适合大数据文件的存储
              TB、 甚至PB级数据 
              扩展能力很强
 ​
 HDFS的缺点:
 ​
       1.  海量小文件存取
              占用NameNode大量内存
       2.  一个文件只能有一个写入者 
              仅支持append(追加)

OpenStack的对象存储Swift

OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一。Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。Swift的是用Python开发

 其主要特点为:
 ​
 1. 各个存储的节点完全对等,是对称的系统架构。
 2. 无单点故障:与对象文件存储一样,数据也会存储多份。整个Swift集群中,也没有一个角色是单点的。
 3. 在不影响性能的情况下,集群通过增加外部节点进行扩展。
 ​
 Swift可以用以下用途:
 图片、文档存储
 长期保存的日志文件
 存储媒体库(照片、音乐、视频等) 
 总结:Swift适合用来存储大量的、长期的、需要备份的对象。

公有云对象存储

 公有云大都有对象存储
 ​
 Amazon类似产品就是S3: http://aws.amazon.com/s3;
 微软类似产品Azure Bolb:http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/;
 阿里类似的有OSS:https://www.aliyun.com/product/oss/;
 ​
 阿里云对象存储OSS存储类型(Storage Class)
 提供标准、低频访问、归档三种存储类型
 ​
 标准存储类型提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问;         
 低频访问存储类型适合长期保存不经常访问的数据(平均每月访问频率 1 到 2 次),存储单价低于标准类型;
 归档存储类型适合需要长期保存(建议半年以上)的归档数据,在三种存储类型中单价最低。
 ​
 应用场景
 ​
 图片和音视频等应用的海量存储
 OSS可用于图片、音视频、日志等海量文件的存储。

GlusterFS分布式文件系统

GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点,2011年被红帽收购。

 #PB级容量  高可用性 基于文件系统级别共享 分布式 去中心化
 ​
 glusgerfs存储卷的类型
 ​
 #基本类型:条带,复制,哈希。
 ​
 #各种卷的整理
 ​
 1.分布卷:存储数据时,将文件随机存储到glusterfs机器上。
         
 优点:存储数据时,读取速度快
 缺点:一个birck坏掉,文件就会丢失
 ​
 2.复制卷:存储数据时,所有文件分别存储到每台glusterfs机器上。
 ​
 优点:对文件进行的多次备份一个brick坏掉,文件不会丢失,其他机器的brick上面有备份
 缺点:占用资源
 ​
 3.条带卷:存数据时,一个文件分开存到每台glusterfs机器上
 ​
 优点:对大文件,读写速度快
 缺点:一个brick坏掉,文件就会坏掉

Ceph详解

Ceph简介

Ceph使用C++语言开发,Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。

Ceph主要设计的初衷是变成一个可避免单节点故障的统一的分布式文件系统,提供较好的性能、可靠性和PB级别的扩展能力,而且是一种开源自由软件,许多融合的分布式文件系统都是基于Ceph开发的。

Ceph特性

 高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到EB级的扩展。
 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
 高  性  能:数据分布均衡。
 ​
 #可用于对象存储,块设备存储和文件系统存储

Ceph架构

基础存储系统RADOS

 Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储。所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。

基础库librados

 这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS进行应用开发。由于RADOS是一个对象存储系统,因此,librados实现的API也只是针对对象存储功能的。
 ​
 RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

高层应用接口

 radosgw: 对象网关接口(对象存储)
 rbd: 块存储
 cephfs:文件系统存储
 其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。

Ceph的基本组件

Ceph主要有三个基本进程

Osd

 OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。并向其他osd守护进程发送心跳,然后向Mon提供一些监控信息。
 当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要两个OSD守护进程即两个OSD节点,集群才能达到active+clean状态.

MDS

 MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。为Ceph文件系统提供元数据计算、缓存与同步(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。在ceph中,元数据也是存储在osd节点中的,mds类似于元数据的代理缓存服务器。只有需要使用CEPHFS时,才需要配置MDS节点。

Monitor

 监控整个集群的状态,保证集群数据的一致性。

Manager(ceph-mgr)

 用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)。

Ceph 结构包含两个部分

 ceph client:访问 ceph 底层服务或组件,对外提供各种接口。比如:对象存储接口、块存储接口、文件级存储接口。
 ​
 ceph node:ceph 底层服务提供端,也就是 ceph 存储集群。

Ceph组件及概念介绍

Object

 Ceph最底层的存储最小单位是Object--对象,每个Object包含元数据和原始数据。

PG

 PG全称Placement Groups,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

CRUSH

 CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

RBD

 RBD全称RADOS block device,是Ceph对外提供的块设备服务

RGW

 RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。

CephFS 文件存储

 CephFS全称Ceph File System,是Ceph对外提供的分布式文件存储服务。

Ceph对象存储

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

CEPH 块存储

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

Ceph数据的存储过程

 无论使用哪种存储方式(对象、块、挂载),`存储的数据都会被切分成对象(Objects)`。Objects size大小可以由管理员调整,通常为2M或4M。`每个对象都会有一个唯一的OID,由ino与ono生成,ino即是文件的File ID,用于在全局唯一标示每一个文件,而ono则是分片的编号`。比如:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与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会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上(其实是把PG中的所有