Ceph——Ceph内部构件

  • 对象

    一个对象包含绑定在一起的数据和元数据,并用一个全局唯一的标识符标识。

    基于文件的存储中,文件大小有限制,基于对象的存储中对象的大小可以随着大小可变的元数据而变得很大。

    一个对象的元数据不受限于类型或数量,不使用一个目录层次结构或树结构来存储,而是存储在一个包含数十亿对象切没有任何复杂性的线性地址空间中。对象可以存储在本地,也可以存储在地理上分开的线性地址空间中。对象ID作为唯一的指针指向对象。对象都以复制的方式存储在基于对象的存储设备OSD中,当Ceph集群收到来自客户端的数据写请求时,它将接受的数据另存为对象,然后OSD守护进程将数据写入OSD文件系统的一个文件中。

    • 通过查看pgmap部分信息获取Ceph集群池和对象的信息

      ceph -s
      
    • 列出Ceph集群的所有池名称

      raods lspools
      
    • 列出metadata池中对象的名称

      rados -p metadata ls
      
  • CRUSH

    CRUSH(Controlled Replication Under Scalable Hashing),可扩散列下的受控复制算法,是整个Ceph数据存储机制的核心。Ceph使用CRUSH算法来准确计算数据应该被写入哪里或者从哪里读取,按需计算元数据,而不是存储元数据。

    • CRUSH查找

    工作方式:元数据计算的负载是分布式的并且只在需要时执行。元数据的计算过程也称为CRUSH查找,它不依赖系统,客户端使用自己的系统资源来执行CRUSH查找,从而取消中心查找。

    读写操作:客户端首先联系Ceph的monitor并获取一个集群map副本。集群map帮助客户端获取Ceph集群的状态和配置信息,使用对象和池名/ID将数据转换为对象。然后将对象和PG数一起进过散列来生成其在Ceph池中最终存放在那一个PG。然后前面计算好的PG经过CRUSH查找来确定存储或获取数据所需的住OSD的位置。计算完准确的OSD ID之后,客户端直接联系这个OSD来存储数据。所有这些计算操作都有客户端来执行。一旦数据被写入住OSD,主OSD所在的节点将执行CRUSH查找操作并计算辅助归置组和OSD的位置来实现数据复制,进而实现高可用性。

  • PG

    PG是一组对象的逻辑集合,通过复制它到不同的OSD上来提供存储系统的可靠性。

    工作原理:当Ceph集群收到数据存储的请求时,它被分散到各个PG中。CRUSH首先将数据分解成一组对象,然后根据对象名称、复制级别和系统中总的PG数目等信息执行散列操作,再将结果生成PG ID。根据Ceph池的复制级别,每个PG的数据会被复制并分发到Ceph集群的多个OSD中。

    PG是保障Ceph存储系统的可伸缩性和性能必不可少的部分。

  • 计算PG数

    计算Ceph集群中PG:

    PG总数 = (OSD总数 x 100)/ 最大副本数

    结果舍入到最接近2的N次幂的值。

    计算Ceph集群中没一个池中的PG总数:

    PG总数 = ((OSD总数 x 100)/ 最大副本数)/ 池数

  • 修改PG和PGP

    PGP是为了实现定位而设置的PG,它的值和PG的总数一致。对于Ceph的一个池而言,如果增加PG的数目,还应该调整PGP到同样的值,这样集群才能够开始再平衡。

    再平衡机制:参数pg_num定义了PG的数量,这些PG映射到OSD。当任意池的pg_num增加的时候,这个池的每个PG都一分为二,但他们依然保持跟源OSD的映射。这个时候,Ceph依然没有开始再平衡。当增加该池的pgp_num的值时,PG才开始从源OSD迁移到其他OSD,正式开始再平衡。

    • 获取现有的PG和PGP值:

      ceph osd pool get data pg_num
      ceph osd pool get data pgp_num
      
    • 检查池的副本数:

      ceph osd dump | grep size
      
    • 修改池的PG和PGP:

      ceph osd pool set data pg_num 256
      ceph osd pool set data pgp_num 256
      
  • Ceph的池是一个用来存储对象的逻辑分区,每个池中都包含一定数量的PG,进而实现把一定数量的对象映射到集群内不同OSD上。默认情况下,部署Ceph会根据你的需求新建一个默认池,建议处理默认池外新建其他的池。

    池可以通过创建需要的副本数来保障数据的高可用性。在创建池是,可以指定副本数,默认的副本数是2。

    当把数据写入一个池的时候,Ceph的池会映射到一个CRUSH规则集,CRUSH规则集就是通过识别池来实现集群内对象的分布和副本数。

    Ceph的池还支持快照功能。使用ceph osd pool mksnap命令给池制作快照,在必要的时候恢复这些快照。

    Ceph的池还可以为对象设置所有者和访问权限,给池分配一个用户ID标识该池的所有者。

  • Ceph数据管理

    数据管理始于客户端向Ceph池中写数据。当客户端准备些数据到Ceph池中,数据首先写入到基于池副本数的主OSD中,主OSD在复制相同的数据到第二OSD和第三OSD中,并等待它们确认写入完成,只要第二OSD和第三OSD完成数据写入,它们就会发送一个应答信号给主OSD,最后,主OSD再返回一个应答信号给客户端,以确认完成整个写入操作。

posted @ 2020-07-02 16:43  elon_wang  阅读(200)  评论(0编辑  收藏  举报