Ceph分布式存储集群架构介绍及使用场景最佳实践

Ceph分布式存储集群架构介绍及使用场景最佳实践

Deng YongJie's blog 451 2022-10-03

Ceph架构介绍及使用场景最佳实践

Ceph简介

Ceph是统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph特点

  • 高性能
    • a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
    • b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
    • c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。
  • 高可用性
    • a. 副本数可以灵活控制。
    • b. 支持故障域分隔,数据强一致性。
    • c. 多种故障场景自动进行修复自愈。
    • d. 没有单点故障,自动管理。
  • 特性丰富
    • a. 支持三种存储接口:块存储、文件存储、对象存储。
    • b. 支持自定义接口,支持多种语言驱动。

Ceph核心组件及概念介绍

  • Monitor

    负责监视整个群集的运行状况的,这些信息都是由维护集群成员的守护程序来提供的,如各个节点之间的状态、集群配置信息。

  • OSD

    OSD全称Object Storage Device,最重要的组件,Ceph OSD将数据以对象的形式存储到集群中每 个节点的物理磁盘上,完成存储用户数据的工作绝大多数都是由OSD deamon进程来实现的。

  • MDS

    MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。管理文件系统的命名空间以及客户端如何访问到后端OSD数据存储中。MDS类似于ceph-mon,是一个服务进程,在使用Ceph FS前首先要安装和启动ceph-mds服务。

  • Object

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

  • PG

    PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据,由PG映射到数据存储的实际单元OSD中。

    它是ceph的逻辑存储单元。在数据存储到cesh时,先打散成一系列对象,再结合基于对象名的哈希操作、复制级别、PG数量,产生目标PG号。根据复制级别的不同,每个PG在不同的OSD上进行复制和分发。可以把PG想象成存储了多个对象的逻辑容器,这个容器映射到多个具体的OSD。PG存在的意义是提高ceph存储系统的性能和扩展性。

    ps: 可以任意调整pg数量,但需要根据2的N次幂的值,每个pool应该分配多少个PG,与OSD的数量、复制份数、pool数量有关,有个计算公式在:http://ceph.com/pgcalc/

    Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count

  • RADOS

    基础存储系统RADOS全称Reliable Autonomic Distributed Object Store,所有存储在Ceph系统中的用户数据最终都是由这一层来存储的。用户实现数据分配、Failover等集群操作。

  • Librados

    Librados是Rados提供库,是对RADOS进行抽象和封装,并向上层提供API,RADOS是一个对象存储系统,因此,LIBRADOS实现的API是针对对象存储功能的。所有上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

  • CRUSH

    CRUSH是Ceph使用的数据分布算法,必须考虑数据的平衡分布和负载(提高资源利用率)、最大化系统的性能,以及系统的扩展和硬件容错等,让数据分配到预期的地方。

  • RBD

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

  • RGW

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

  • CephFS

    CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。

架构图:

image-20230216172931314

Ceph集群日常维护

两种方式查看集群健康状态:

1. 命令行查看健康状态:ceph -s

2. Dashboard查看健康状态:

image-20230216173343635

需要注意的是,每个组件都有不同的执行命令、维护命令,要观察上图健康状态给出的警告或报错提示,进行针对性的维护。

Ceph运维手册:https://lihaijing.gitbooks.io/ceph-handbook/content/

k8s集群对接Ceph RBD或CephFS

CSI是Container Storage Interface(容器存储接口)的简写。

https://github.com/ceph/ceph-csi

把ceph-csi-rbd插件部署到集群里

部署之后的效果:

image-20230216173356015

k8s集群调用Ceph-csi流程

image-20230216173406887

Ceph-csi动态创建存储卷流程

image-20230216173417191