jz彪悍一只猫

ceph集群

ceph集群概述

ceph 是一个统一的分布式存储系统,具有高性能、高可用、高可扩展性的特点

redhat和OpenStack 都可与ceph 整合以支持虚拟镜像的后端存储

支持三种接口

Object:有原生的API,而且也兼容Swift和S3的API。

Block:支持精简配置、快照、克隆。

File:Posix接口,支持快照object

工作原理:

 

 

(当客户端向ceph 集群中写入一个file时,首先将file映射为许多object,并将他们编号即oid(ino+id),然后通过hash和crush算法映射三个osd,序号靠前的为primary osd,靠后的为secondary osd 和tertiary osd,知道数据存放在那些osd里面)寻址,首先向Primary OSD发起写请求,然后由Primary OSD同步复制两个副本到其余的OSD中。

当Secondary 和Tertiary完成写入了以后,返回ACK给 Primary,最后由Primary向Client确认Object的写入。

file—>object—>pg—>osd三次映射

 

 

File —— 此处的file就是用户需要存储或者访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。

Ojbect —— 此处的object是RADOS所看到的“对象”。Object与上面提到的file的区别是,object的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。为避免混淆,在本文中将尽量避免使用中文的“对象”这一名词,而直接使用file或object进行说明。

PG(Placement Group)—— 顾名思义,PG的用途是对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。在实践当中,n至少为2,如果用于生产环境,则至少为3。一个OSD上的PG则可达到数百个。事实上,PG数量的设置牵扯到数据分布的均匀性问题。关于这一点,下文还将有所展开。

OSD —— 即object storage device,前文已经详细介绍,此处不再展开。唯一需要说明的是,OSD的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少。在实践当中,至少也应该是数十上百个的量级才有助于Ceph系统的设计发挥其应有的优势。

Failure domain —— 这个概念在论文中并没有进行定义,好在对分布式存储系统有一定概念的读者应该能够了解其大意。

 

基于上述定义,便可以对寻址流程进行解释了。具体而言, Ceph中的寻址至少要经历以下三次映射

(1)File -> object映射

这次映射的目的是,将用户要操作的file,映射为RADOS能够处理的object。其映射十分简单,本质上就是按照object的最大size对file进行切分,相当于RAID中的条带化过程。这种切分的好处有二:一是让大小不限的file变成最大size一致、可以被RADOS高效管理的object;二是让对单一file实施的串行处理变为对多个object实施的并行化处理。

每一个切分后产生的object将获得唯一的oid,即object id。其产生方式也是线性映射,极其简单。图中,ino是待操作file的元数据,可以简单理解为该file的唯一id。ono则是由该file切分产生的某个object的序号。而oid就是将这个序号简单连缀在该file id之后得到的。举例而言,如果一个id为filename的file被切分成了三个object,则其object序号依次为0、1和2,而最终得到的oid就依次为filename0、filename1和filename2。

这里隐含的问题是,ino的唯一性必须得到保证,否则后续映射无法正确进行。

(2)Object -> PG映射

在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。这个映射过程也很简单,如图中所示,其计算公式是:

hash(oid) & mask -> pgid

由此可见,其计算由两步组成。首先是使用Ceph系统指定的一个静态哈希函数计算oid的哈希值,将oid映射成为一个近似均匀分布的伪随机值。然后,将这个伪随机值和mask按位相与,得到最终的PG序号(pgid)。根据RADOS的设计,给定PG的总数为m(m应该为2的整数幂),则mask的值为m-1。因此,哈希值计算和按位与操作的整体结果事实上是从所有m个PG中近似均匀地随机选择一个。基于这一机制,当有大量object和大量PG时,RADOS能够保证object和PG之间的近似均匀映射。又因为object是由file切分而来,大部分object的size相同,因而,这一映射最终保证了,各个PG中存储的object的总数据量近似均匀。

从介绍不难看出,这里反复强调了“大量”。只有当object和PG的数量较多时,这种伪随机关系的近似均匀性才能成立,Ceph的数据存储均匀性才有保证。为保证“大量”的成立,一方面,object的最大size应该被合理配置,以使得同样数量的file能够被切分成更多的object;另一方面,Ceph也推荐PG总数应该为OSD总数的数百倍,以保证有足够数量的PG可供映射。

(3)PG -> OSD映射

第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD。如图所示,RADOS采用一个名为CRUSH的算法,将pgid代入其中,然后得到一组共n个OSD。这n个OSD即共同负责存储和维护一个PG中的所有object。前已述及,n的数值可以根据实际应用中对于可靠性的需求而配置,在生产环境下通常为3。具体到每个OSD,则由其上运行的OSD deamon负责执行映射到本地的object在本地文件系统中的存储、访问、元数据维护等操作。

 

核心组件及其功能

Monitor、OSD、MDS、Object、PG、RADOS、Libradio、CRUSH、RBD、RGW、CephFS

块存储——rbd

典型设备:磁盘阵列,硬盘

主要是将裸磁盘空间映射给主机使用的。

优点:

通过Raid与LVM等手段,对数据提供了保护。

多块廉价的硬盘组合起来,提高容量。

多块磁盘组合出来的逻辑盘,提升读写效率。

缺点:

采用SAN架构组网时,光纤交换机,造价成本高。

主机之间无法共享数据。

使用场景:

docker容器、虚拟机磁盘存储分配。

日志存储、文件存储。

文件存储:FS

典型设备:FTP、NFS服务器

为了克服块存储文件无法共享的问题,所以有了文件存储。

在服务器上架设FTP与NFS服务,就是文件存储。

优点:

造价低,随便一台机器就可以了;方便文件共享。

缺点:

读写速率低;传输速率慢。

使用场景:

日志存储;有目录结构的文件存储

对象存储——RGW

典型设备:内置大容量硬盘的分布式服务器(swift, s3)

多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。

优点:

具备块存储的读写高速;具备文件存储的共享等特性。

使用场景:(适合更新变动较少的数据)

图片存储;视频存储。

ceph集群部署

一、准备工作:

IP,主机名,hosts解析,ssh密钥,时间同步,yum源,防火墙,selinux

二、部署ceph:

1.安装软件

  ceph-deploy(脚本)

  ceph-mon  ceph-osd  ceph-mds  ceph-radosgw(集群)

2.修改配置启动服务mon

  mkdir  目录;cd 目录

  ceph-deploy  new  node1   node2   node3  (生成配置文件)

  ceph-deploy  mon  create-initial  (启动服务)

3.启动osd共享硬盘

  ceph-deploy  disk  zap   主机名:磁盘名  ...  ...

  ceph-deploy  osd  create  主机名:磁盘   ...  ...

三、使用Ceph思路:

1.块共享

  服务器: rbd  create  创建一个共享镜像

  客户端: 安装cpeh-common;  cp 配置文件和密钥

          rbd  map  |  rbd  unmap

2.文件系统共享(文件系统由inode和block)

服务器: 创建两个共享池(名称任意)

使用两个共享池合并一个文件系统

安装ceph-mds软件,并启动服务(ceph-deploy mds create node3)

  客户端: mount  -t  MON的IP:6789:/   /挂载点   -o  name=用户名,secret=密码

3.对象存储

服务器启动一个radosgw即可(RGW)

   ceph-deploy  rgw  create  node3

四、ceph-deploy脚本用法:

   ceph-deploy  new   node1  node2  node3    #生成配置文件

   ceph-deploy  mon   create-initial         #远程所有主机启动mon服务

   ceph-deploy  disk zap  主机名:磁盘名       #初始化磁盘

   ceph-deploy  osd   create  主机名:磁盘名   #远程主机并启动osd服务

   ceph-deploy  mds   create   主机名        #远程主机并启动mds服务

   ceph-deploy  rgw  create  主机名          #远程主机并启动RGW服务

五、删除某个OSD,下面的假设是删除osd.4

ceph osd tree

ceph osd out osd.4

ceph osd crush remove osd.4

ceph auth del osd.4

ceph osd rm osd.4

最后要找到对应的主机,umount把osd.4对应的磁盘卸载

posted on 2020-09-03 11:32  jz彪悍一只猫  阅读(300)  评论(0编辑  收藏  举报

导航