中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

创建存储池

对象存储需要用到多个存储池,把元数据等数据量较小的存储池建立在SSD上可提高性能。本章节介绍在SSD上创建对象存储元数据存储池,在HDD上创建对象存储数据存储池。

Ceph的存储池默认使用三副本模式,其中对象存储数据存储池有时会设置为EC纠删码模式以节省存储空间,以下分两个部分分别介绍副本模式和EC模式存储池的创建方法。

仅需在主节点ceph1上执行。

创建副本存储池

  1. 设置crush规则。
    1. 查看crush类,在ceph1上执行。
      1
      ceph osd crush class ls
      

      服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:

      [
      "hdd",
      "ssd"
      ]
    2. 创建crush规则。为SSD class和HDD class分别创建crush rule,如没有基于SSD的创建的OSD可不进行rule-ssd的设置。
      1
      2
      ceph osd crush rule create-replicated rule-ssd default host ssd
      ceph osd crush rule create-replicated rule-hdd default host hdd
      

    3. 查看crush rule。
      1
      ceph osd crush rule ls
      

      其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。

  2. 在ceph1上执行以下命令创建Data Pool和Index Pool。
    1
    2
    3
    4
    5
    cd /root/ceph-mycluster/
    ceph osd pool create default.rgw.buckets.data 32 32
    ceph osd pool create default.rgw.buckets.index 8 8
    ceph osd pool application enable default.rgw.buckets.data rgw
    ceph osd pool application enable default.rgw.buckets.index rgw
    
    • 创建存储池命令最后的两个数字,比如ceph osd pool create default.rgw.buckets.data 32 32中的两个32分别代表存储池的pg_num和pgp_num,即存储池对应的pg数量。
      • Ceph官方文档建议整个集群所有存储池的pg数量之和大约为:(OSD数量 * 100)/数据冗余因数,数据冗余因数对副本模式而言是副本数,对EC模式而言是数据块+校验块之和。例如,三副本模式下数据冗余因数是3,EC4+2模式下数据冗余因数是6。
      • 举个例子,在三副本模式下,假设整个集群3台服务器,每台服务器15个OSD,总共45个OSD,三副本模式下数据冗余因数是3,按照上述公式计算应为1500,一般建议pg数取2的整数次幂。由于default.rgw.buckets.data存放的数据量远大于其他几个存储池的数据量,因此该存储池也成比例的分配更多的pg。因此,可将default.rgw.buckets.data的pg数量取1024,default.rgw.buckets.index的pg数量取128或者256。
    • 更多关于pool的命令操作,可以查阅Ceph开源社区中关于pool命令的说明。
  3. 修改所有存储池的crush规则。
    1
    ceph osd pool set default.rgw.buckets.data crush_rule rule-hdd
    
  4. 使用curl或者web节点登录验证,要注意IP地址与端口的对应关系,下图以IP地址为192.168.3.164、端口为10001为例说明,浏览器输入“192.168.3.164:10001”,出现如下字样表示RGW创建成功。

创建EC存储池

  1. 设置crush规则。
    1. 查看crush类,在ceph1上执行。
      1
      ceph osd crush class ls
      

      服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:

      [
      "hdd",
      "ssd"
      ]
    2. 创建crush规则。为SSD class创建crush rule,前提是环境上osd部署在ssd磁盘)
      1
      ceph osd crush rule create-replicated rule-ssd default host ssd
      
    3. 查看crush rule。
      1
      ceph osd crush rule ls
      

      应显示如下:

      replicated_rule
      rule-ssd

      其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。

  2. 创建EC profile。
    1
    ceph osd erasure-code-profile set myprofile k=4 m=2 crush-failure-domain=osd crush-device-class=ssd
    

    以EC 4+2为例,以上命令创建了一个名为myprofile的EC profile。

    • k为数据块数量。
    • m为校验块数量。
    • crush-failure-domain=host表示最小故障域为host。

      一般情况下,最小故障域设置为host,若host数量小于k+m,则需要将故障域改为osd,否则会因无法找到足够多的host而报错。

    • crush-device-class=ssd表示crush rule建立在ssd上。
  3. 创建Data Pool和Index Pool,在ceph1上执行。
    1
    2
    3
    4
    ceph osd pool create default.rgw.buckets.data 2048 2048 erasure myprofile
    ceph osd pool create default.rgw.buckets.index 256 256
    ceph osd pool application enable default.rgw.buckets.data rgw
    ceph osd pool application enable default.rgw.buckets.index rgw
    
    • ceph-deploy osd pool create default.rgw.buckets.data 2048 2048 erasure myprofile命令创建的是EC模式的pool,对于对象存储而言,只需修改default.rgw.buckets.data为EC pool即可,其他pool仍使用默认3副本模式。
    • 创建存储池命令最后的两个数字,比如ceph osd pool create default.rgw.buckets.data 2048 2048 erasure myprofile中的两个2048分别代表存储池的pg_num和pgp_num,即存储池对应的pg数量。
      • Ceph官方文档建议整个集群所有存储池的pg数量之和大约为:(OSD数量 * 100)/ 数据冗余因数,数据冗余因数对副本模式而言是副本数,对EC模式而言是数据块+校验块之和。例如,三副本模式下数据冗余因数是3,EC4+2模式下数据冗余因数是6。
      • 举个例子,在EC4+2模式下,假设整个集群3台服务器,每台服务器36个OSD,总共108个OSD,按照上述公式计算应为1800,一般建议pg数取2的整数次幂。由于default.rgw.buckets.data存放的数据量远大于其他几个存储池的数据量,因此该存储池也成比例的分配更多的pg。
  4. 修改所有存储池的crush规则。
    1
    ceph osd pool set default.rgw.buckets.data crush_rule rule-ssd