zoukankan      html  css  js  c++  java
  • ceph pg pool

    Pool 对应 PG PGP数量的计算公式:  官方计算地址

    Total PGs = ((Total_number_of_OSD * Target PGs per OSD) / max_replication_count) / pool_count

    Target PGs per OSD 通常被设置为 100

    创建POOL

    通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:

    • 若少于5个OSD, 设置pg_num为128。
    • 5~10个OSD,设置pg_num为512。
    • 10~50个OSD,设置pg_num为4096。
    • 超过50个OSD,可以参考pgcalc计算
    语法格式:ceph osd pool create [pool-name] [pg_num]

    例如:[ceph@cephnode01 my-cluster]$ ceph osd pool create pool01 64

      

    Pool是ceph存储数据时的逻辑分区,它起到namespace的作用。其他分布式存储系统,比如Mogilefs、Couchbase、Swift都有pool的概念,只是叫法不同。每个pool包含一定数量的PG,PG里的对象被映射到不同的OSD上,因此pool是分布到整个集群的。

      pool有两种方法增强数据的可用性,一种是副本(replicas),另一种是EC(erasure coding 纠错码)。从Firefly版本起,EC功能引入。在EC里,数据被打散成碎片,加密,然后进行分布式存储。ceph由于其分布式能力,处理EC非常成功。pool在创建时可以设置这两种方法之一,但不能同时设置两者。

    pool默认的副本数量是3,我们可以自己控制副本的数量。ceph的复制能力非常灵活,可以在任何时候更改这个参数:

     语法格式: ceph osd pool set {Pool-name} size {num}
     例如:  ceph osd pool set firstpool size 2

       在数据写往pool时,遵循CRUSH的规则集,也就是说,写往哪个位置以及副本数量,受规则集影响。这个规则集是pool的重要功能。比如我们可以通过规则集,定义一个pool使用SSD存储,另一个pool使用SATA存储。

      pool也支持snapshot功能。可以运行ceph osd pool mksnap命令创建pool的快照,并且在必要的时候恢复它。还可以设置pool的拥有者属性,从而进行访问控制。

    创建ceph pool的命令如下,它的参数包括pool名字、PG和PGP的数量:

    $ ceph osd pool create mytest 128 128
    pool 'mytest' created

    查看pool有几种方式,比如:

    复制代码
    $ rados lspools
    data
    metadata
    rbd
    mytest
    
    $rados df

      pool name category KB objects clones degraded unfound rd rd KB wr wr KB
      data - 0 0 0 0 0 0 0 0 0
      metadata - 0 0 0 0 0 0 0 0 0
      mytest - 2 4 2 0 0 0 0 5 3
      rbd - 0 0 0 0 0 0 0 0 0
      total used 15830040 4
      total avail 109934580

    $ ceph osd lspools
    0 data,1 metadata,2 rbd,3 mytest,
    
    $ ceph osd dump |grep pool
    pool 0 'data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 43 flags hashpspool crash_replay_interval 45 stripe_width 0
    pool 1 'metadata' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 41 flags hashpspool stripe_width 0
    pool 2 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0
    pool 3 'mytest' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 58 flags hashpspool stripe_width 0
    复制代码

    毫无疑问ceph osd dump输出的信息最详尽,包括pool ID、副本数量、CRUSH规则集、PG和PGP数量等。

    可以调整刚创建的pool的副本数量:

    复制代码
    root@ceph002:/etc/ceph# ceph osd pool set mytest size 2
    set pool 3 size to 2

    root@ceph002:/etc/ceph# ceph osd dump | grep pool pool 0 'data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool crash_replay_interval 45 stripe_width 0 pool 1 'metadata' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0 pool 2 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0 pool 3 'mytest' replicated size 2 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 15 flags hashpspool stripe_width 0 root@ceph002:/etc/ceph#
    复制代码

    如下命令演示ceph的snapshot功能。我们往pool里写入一个对象,然后获取pool的快照,接着删除对象,最后从快照里恢复数据。

    复制代码
    # 写入一个文件
    $ rados -p mytest put testfile /etc/hosts
    
    # 查看这个文件
    $ rados -p mytest ls
    testfile
    
    # 创建pool的快照
    $ rados mksnap snapshot001 -p mytest
    created pool mytest snap snapshot001
    
    # 查看pool的快照
    $ rados lssnap -p mytest
    1 snapshot001 2015.11.30 09:50:38
    1 snaps
    
    # 删除文件
    $ rados -p mytest rm testfile
    
    # 从快照里回滚文件
    $ rados rollback -p mytest testfile snapshot001
    rolled back pool mytest to snapshot snapshot001
    
    # 确认结果
    $ rados -p mytest ls
    testfile
    复制代码

    删除pool会同步删除所有快照。在删除pool后,需要删除pool的CRUSH规则集,假如你手工创建过它们。同样也需删除这个pool的授权用户。

    $ ceph osd pool delete mytest mytest --yes-i-really-really-mean-it
    pool 'mytest' removed
  • 相关阅读:
    字符链接
    成绩统计
    看不懂的代码
    新的开始
    appserv 求指教php运行环境
    指针 数组 复制
    HTML 标题居中 小小积累
    用指针 数组连接
    [导入]Hibernate+Spring+Struts2+ExtJS开发CRUD功能
    [导入]Hibernate+Spring+Struts2+ExtJS开发CRUD功能
  • 原文地址:https://www.cnblogs.com/yuanbaodong/p/8316667.html
Copyright © 2011-2022 走看看