---
title: 创建存储池
description: "对象存储需要用到多个存储池，把元数据等数据量较小的存储池建立在SSD上可提高性能。本章节介绍在SSD上创建对象存储元数据存储池，在HDD上创建对象存储数据存储池。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephobject_DG_04_0030.html
sourcePath: /source/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephobject_DG_04_0030.html
indexId: 01aa47a7b21d04b347a69688f8f5287938123d1aa29ceca7ab5fd97caf872fca77
---
# 创建存储池

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

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

仅需在主节点ceph1上执行。


#### 创建副本存储池

1. 设置crush规则。

  a. 查看crush类，在ceph1上执行。
    1 ceph osd crush class ls

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

    1 2 3 4 [ "hdd", "ssd" ]

  b. 创建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

  c. 查看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开源社区(https://docs.ceph.com/en/reef/rados/operations/pools/#create-a-pool)中关于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规则。

  a. 查看crush类，在ceph1上执行。
    1 ceph osd crush class ls

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

    1 2 3 4 [ "hdd", "ssd" ]

  b. 创建crush规则。为SSD class创建crush rule，前提是环境上osd部署在ssd磁盘）
    1 ceph osd crush rule create-replicated rule-ssd default host ssd

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

    应显示如下：

    1 2 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
