Ceph的基本概念和常用命令

本文主要简单介绍Ceph的一些基本概念以及常用的一些命令。

基本概念

Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

Ceph 提供了一个可无限伸缩的 Ceph 存储集群,它基于 RADOS ,见论文 RADOS - A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters

Ceph 存储集群包含两种类型的守护进程:

图片

Ceph 监视器维护着集群运行图的主副本。一个监视器集群确保了当某个监视器失效时的高可用性。存储集群客户端向 Ceph 监视器索取集群运行图的最新副本。

Ceph OSD 守护进程检查自身状态、以及其它 OSD 的状态,并报告给监视器们。

存储集群的客户端和各个 Ceph OSD 守护进程使用 CRUSH 算法高效地计算数据位置,而不是依赖于一个中心化的查询表。它的高级功能包括:基于 librados的原生存储接口、和多种基于 librados 的服务接口。

注:通过上面的介绍可以看出Ceph集群中最主要的两个组件是Monitors和OSDs,MDS是CephFS中用来提供原数据管理的组件,在Ceph对象存储和块存储集群中不需要部署该组件。

不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

图片

  • Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
  • Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
  • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

    Ceph对象存储

Ceph 对象网关是一个构建在 librados 之上的对象存储接口,它为应用程序访问Ceph 存储集群提供了一个 RESTful 风格的网关 。 Ceph 对象存储支持 2 种接口:

  1. 兼容S3: 提供了对象存储接口,兼容 亚马逊S3 RESTful 接口的一个大子集。
  2. 兼容Swift: 提供了对象存储接口,兼容 Openstack Swift 接口的一个大子集。

Ceph 对象存储使用 Ceph 对象网关守护进程( radosgw ),它是个与 Ceph 存储集群交互的 FastCGI 模块。因为它提供了与 OpenStack Swift 和 Amazon S3 兼容的接口, RADOS 要有它自己的用户管理。 Ceph 对象网关可与 Ceph FS 客户端或 Ceph 块设备客户端共用一个存储集群。 S3 和 Swift 接口共用一个通用命名空间,所以你可以用一个接口写如数据、然后用另一个接口取出数据。

图片

Note

Ceph 对象存储使用 Ceph 元数据服务器即MDS。

RGW就是提供对象存储的网关,也即对象存储网关。所谓对象存储网关,也就是对象存储的入口,本质上是一个HTTP服务器,与Nginx和Apache无异。通过这个入口,用户可以通过HTTP协议,以RESTful的方式访问Ceph的对象存储。

Ceph RGW的整体架构见上图,对象存储网关实际上是调用librados的API来实现数据的存储和读取。而该网关同时提供了兼容AWS S3和OpenStack Swift的对象存储访问接口(API)

另外,有些同学可能不清楚对象存储的特点。在介绍后续内容之前,我们大概了解一下对象存储是如何存储数据的。对象存储的应用场景通常是互联网场景,一个对象存储通常会给多个用户(租户)使用。而在一个用户下面可以创建多个(swift里面称为容器container)。在桶中可以存储对象,对象就是我们存储的数据,比如图片或者是视频等。如果将对象存储与我们常规存储做一个类比,就好比文件夹,而对象就好比文件,但不同之处在于桶里面只能存储对象,而不能嵌套桶。如图2是对象存储数据组织形式。

图片

图2 对象存储数据组织

Ceph 块设备

块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软盘、甚至传统的 9 磁道磁带。无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选。

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

图片

Note

内核模块可使用 Linux 页缓存。对基于 librbd 的应用程序, Ceph 可提供 RBD 缓存

Ceph 块设备靠无限伸缩性提供了高性能,如向内核模块、或向 abbr:KVM (kernel virtual machines) (如 QemuOpenStackCloudStack 等云计算系统通过 libvirt 和 Qemu 可与 Ceph 块设备集成)。你可以用同一个集群同时运行 Ceph RADOS 网关Ceph FS 文件系统、和 Ceph 块设备。

Important

要使用 Ceph 块设备,你必须有一个在运行的 Ceph 集群。

Ceph 文件系统

Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据。 Ceph 文件系统与 Ceph 块设备、同时提供 S3 和 Swift API 的 Ceph 对象存储、或者原生库( librados )一样,都使用着相同的 Ceph 存储集群系统。

Important

当前, CephFS 还缺乏健壮得像 ‘fsck’ 这样的检查和修复功能。存储重要数据时需小心使用,因为灾难恢复工具还没开发完。更多的 CephFS 使用现状见 CephFS 尝鲜

图片

Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器


见文档http://docs.ceph.org.cn/cephfs/

Ceph常用命令

集群相关命令

  1. 查看机器的监控状态

[root@client ~]# ceph health

HEALTH_OK

  1. 查看ceph的实时运行状态
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [root[@client](http://my.oschina.net/client)  ~]# ceph -w

    cluster be1756f2-54f7-4d8f-8790-820c82721f17

    health HEALTH_OK

    monmap e2: 3 mons at {node1=10.240.240.211:6789/0,node2=10.240.240.212:6789/0,node3=10.240.240.213:6789/0}, election epoch 294, quorum 0,1,2 node1,node2,node3

    mdsmap e95: 1/1/1 up {0=node2=up:active}, 1 up:standby

    osdmap e88: 3 osds: 3 up, 3 in

    pgmap v1164: 448 pgs, 4 pools, 10003 MB data, 2520 objects

    23617 MB used, 37792 MB / 61410 MB avail

    448 active+clean
    2014-06-30 00:48:28.756948 mon.0 [INF] pgmap v1163: 448 pgs: 448 active+clean; 10003 MB data, 23617 MB used, 37792 MB / 61410 MB avail
  2. 查看集群的状态 ceph -s
  3. 查看ceph存储空间 ceph df
  4. 用下列命令可以连 Ceph 安装包一起清除:

ceph-deploy purge {ceph-node} [{ceph-node}]

  1. 查看集群健康状态细节 ceph health detail

    pool相关命令

  2. 查看ceph集群中的pool数量:ceph osd lspools

  3. 显示集群中pool的详细信息: rados df
  4. 查看某一个pool的pg数量:ceph osd pool get pool_name pg_num(pool_name填真实的pool名称)

    mon相关的命令

  5. 查看mon的状态信息:ceph mon stat

  6. 查看mon的选举状态:ceph quorum_status
  7. 查看mon的映射信息:ceph mon dump
  8. OSD相关命令

  9. 查看ceph osd运行状态:ceph osd stat

  10. 查看osd映射信息:ceph osd dump
  11. 查看osd的目录树: ceph osd tree
  12. down掉一个osd硬盘:ceph osd down 0 #down掉osd.0节点
  13. 在集群中删除一个osd硬盘:ceph osd rm 0
  14. 把一个osd节点逐出集群:ceph osd out osd.3
  15. 把逐出的osd加入集群:ceph osd in osd.3

    MDS命令(略)

常见命令

ceph -v //查看ceph的版本

ceph -s //查看集群的状态

ceph -w //监控集群的实时更改

ceph health //查看集群是否健康

ceph health detail //先显示集群是否健康的详细信息

ceph time-sync-status //查看mon节点的时间同步情况

ceph osd df //查看osd的使用信息

ceph osd dump //osd的map信息

ceph osd find osd.o//查看osd.0节点ip和主机名

ceph osd tree //查看osd的状态和编号以及分布情况

ceph osd metadata 0//查看osd元数据的详细信息

/var/run/ceph //存放所有的sock

运行状态导出集群monmap(集群正常时确认集群monIP和进程名)

ceph mon getmap -o /mnt/monmap

ceph mon dump //查看mon的信息

查看当前集群主mon

ceph quorum_status -f json-pretty|grep ‘leader’

ceph mon stat //查看mon状态

ceph osd stat //查看osd的状态

ceph osd dump //查看osd的map信息

ceph osd pool ls //查看集群中的存储池名称

ceph osd pool set mytest size 3 //可以修改mytest池的副本数为3

ceph osd pool ls detail //查看池的的详细信息

ceph osd pool stats //查看池的IO情况

ceph pg dump //查看pg的详细信息

总结

通过本文介绍可以发现Ceph的核心就是OSD和Monitor,搭建好这两个,再根据需求就可以搭建对应的块服务或者对象存储服务以及文件服务,MDS组件是CephFS所需要的,所以在搭建对象和块服务时,其实不需要MDS。在没有看文档之前一直对MDS和Monitor的作用不清楚,还以为Monitor是监控进程的,其实Monitor的作用是维护表示集群状态的各种视图,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图(Monitor的作用相当于我们自己开发的KV存储系统中的master的功能)。通过资料可以发现目前文件服务CephFS其实还不是十分的成熟,如果生产环境使用还是得慎重。

参考文章

欢迎来到 CEPH 世界

Ceph对象存储RGW架构及安装实战

ceph 运维常用命令总结

CEPH 常用命令总结

如果你觉得本文对你有帮助,欢迎打赏