1、ceph的概念   Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是开源软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据的能力。Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。


三种存储类型的原理 和 传统存储架构的关系 块存储: 通俗来讲,单个硬盘或单个分区,可以支持单独格式化和挂载的块,即为块存储,例如lvm划分逻辑卷,ceph的创建rbd卷等,分区挂载等操作和本地硬盘设备没有什么区别,在传统存储架构中,DAS和SAN都算块存储的范畴 文件存储: NAS就相同于文件存储,通过共享目录(文件夹)的方式,实现可以让多人操作的目的,大多数使用NFS、Samba等协议。因服务端共享的是文件夹,所以客户端就无需也不能再做格式化或者分区的操作,对客户端来说这只是一个远端的可存放数据的地方 对象存储: 不同于传统架构的一种新型存储类型,扁平化结构,不需要去维护复杂的文件目录。用户数据存取方便,通过常用的S3协议,可通过URL来访问一个空间及其中的文件,适用于智能视频监控、web类应用等等


Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS三大组件。

Ceph OSD:OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。

Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。

Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。

查看各种Map的信息可以通过如下命令:ceph osd(mon、pg) dump

一个ceph集群的组成部分:

  若干的Ceph OSD(对象存储守护程序)

  至少需要一个Ceph Monitors监视器(1,3,5,7...)

  两个或以上的Ceph管理器managers,运行Ceph文件系统客户端时

  还需要高可用的Ceph Metedata Server(文件系统元数据服务器)

  RADOS cluster: 由多台host存储服务器组成的ceph集群

  OSD(Object Storage Daemon):每台存储服务器的磁盘组成的存储空间

  Mon(Monitor):ceph的监视器,维护OSD和PG的集群状态,一个Ceph集群至少需要一个mon,可以是一三五七等奇数个。

  Mgr(manager):负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载等。


存储池的操作

存储池(POOL)是管理PG的逻辑分区,pool可以通过创建需要的副本数来保障数据的高可用性,在新的版本中,默认的副本数是3. 除此之外,我们可以还可以同使用SSD硬盘来创建faster池,使用pool来进行快照功能,还可以为访问pool的用户分配权限。

  1. 创建pool
 ceph osd pool create {pool-name} {pg-number} {pgp-number} [replicated] [crush-ruleset-name] [expected-num-objects]
 ceph osd pool create test-pool 9  # 创建一个名为test-pool的池,包含的gp数量为9
  1. 查看当前的存储池信息
ceph osd lspools
rados lspools
ceph osd dump | grep -i pool   # 查看副本以及详细信息
  1. 设置副本数目(在早期版本中副本数目默认是2,在Firefly之后的版本中,副本数默认为3)
ceph osd pool set test-pool size 3    # 设置副本数目为3
ceph osd dump | grep -i pool  # 查看副本数目详情
  1. 给pool重命名
ceph osd pool rename test-pool  pool-1     # 当前名称  目标名称
ceph osd lspools  # 查看命名已经修改
  1. Ceph 池做数据快照
rados -p pool-1 put obj-1 /etc/hosts    # 像池中添加对象obj-1和 文件 /etc/hosts
rados -p pool-1 ls    # 查看池中的对象

# 给pool-1 池创建快照,命名为snapshot01
rados mksnap snapshot01 -p pool-1

# 插卡快照信息
rados lssnap -p pool-1

# 删除pool-1存储池中obj-test对象
rados -p pool-1 rm obj-test

# 查看对象的快照信息
# rados -p pool-1 listsnaps obj-test
obj-test:
cloneid snaps   size    overlap
1   1   5   []

# 恢复快照,指定存储池,对象名称,快照名
rados rollback -p pool-1 obj-test snapshot01
  1. 获取pool相关参数,size 或其他参数
ceph osd pool get pool-1 size
ceph osd pool get pool-1 {value}
  1. 设置存储池的配置参数
ceph osd pool set pool-1 size 3
  1. 删除池(删除池的时候将会删除快照),删除使用两次确认的方式
ceph osd pool delete pool-1 pool-1  --yes-i-really-really-mean-it

Ceph 数据管理

这里通过示例,展示ceph 管理数据的方式。

PG 的副本存储

创建一个存储池pool-1:

ceph osd pool create pool-1 8 8    # 创建存储池 pool-1,指定pg 和pgp的数量为 8 

查看pool的ID:

[root@local-node-1 ~]# ceph osd lspools
1 .rgw.root
2 default.rgw.control
3 default.rgw.meta
4 default.rgw.log
8 pool-1

查看pg分配所属的OSD:

[root@local-node-1 ~]# ceph pg dump|grep ^8|awk '{print $1 "\t" $17}'
dumped all
8.7 [0,2,1]
8.6 [2,1,0]
8.5 [2,1,0]
8.4 [1,2,0]
8.3 [2,0,1]
8.2 [2,0,1]
8.1 [0,2,1]
8.0 [0,1,2]

表明 0-7的pg都存为了3副本,分到不同的副本中。

文件存储

我们将hosts文件加入存储(这里已经添加pool):

[root@local-node-1 ~]# rados -p pool-1 put obj1 /etc/hosts
[root@local-node-1 ~]# rados -p pool-1 ls
obj1

查看对象obj1和OSD的映射关系:

[root@local-node-1 ~]# ceph osd map pool-1 obj1
osdmap e72 pool 'pool-1' (8) object 'obj1' -> pg 8.6cf8deff (8.7) -> up ([0,2,1], p0) acting ([0,2,1], p0)