对象存储需要用到多个存储池,把元数据等数据量较小的存储池建立在SSD上可提高性能。本章节介绍在SSD上创建对象存储元数据存储池,在HDD上创建对象存储数据存储池。
Ceph的存储池默认使用三副本模式,其中对象存储数据存储池有时会设置为EC纠删码模式以节省存储空间,以下分两个部分分别介绍副本模式和EC模式存储池的创建方法。
创建副本存储池
- 设置crush规则。
- 查看crush类,在ceph1上执行。

服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
- 创建crush规则。为SSD class和HDD class分别创建crush rule,如没有基于SSD的创建的OSD可不进行rule-ssd的设置。
| ceph osd crush rule create-replicated rule-ssd default host ssd
ceph osd crush rule create-replicated rule-hdd default host hdd
|

- 查看crush rule。

其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。
- 在ceph1上执行以下命令创建Data Pool和Index Pool。
| 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命令的说明。
- 修改所有存储池的crush规则。
| ceph osd pool set default.rgw.buckets.data crush_rule rule-hdd
|
- 使用curl或者web节点登录验证,要注意IP地址与端口的对应关系,下图以IP地址为192.168.3.164、端口为10001为例说明,浏览器输入“192.168.3.164:10001”,出现如下字样表示RGW创建成功。

创建EC存储池
- 设置crush规则。
- 查看crush类,在ceph1上执行。

服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
- 创建crush规则。为SSD class创建crush rule,前提是环境上osd部署在ssd磁盘)
| ceph osd crush rule create-replicated rule-ssd default host ssd
|
- 查看crush rule。
应显示如下:
其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。
- 创建EC profile。
| 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。
- 创建Data Pool和Index Pool,在ceph1上执行。
| 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。
- 修改所有存储池的crush规则。
| ceph osd pool set default.rgw.buckets.data crush_rule rule-ssd
|