创建存储池
对象存储需要用到多个存储池,把元数据等数据量较小的存储池建立在SSD上可提高性能。本例介绍在SSD上创建对象存储元数据存储池,在HDD上创建对象存储数据存储池。
Ceph的存储池默认使用三副本模式,其中对象存储数据存储池有时会设置为EC纠删码模式以节省存储空间,以下分两个部分分别介绍副本模式和EC模式存储池的创建方法。如果选用副本模式,请参考创建副本存储池;如果选用EC模式,请参考创建EC存储池。
创建副本存储池
- 查看crush类,在ceph1上执行。
1
ceph osd crush class ls
服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
[ "hdd", "ssd" ]
- 为SSD class和HDD class分别创建crush rule,在ceph1上执行。
1 2
ceph osd crush rule create-replicated rule-ssd default host ssd ceph osd crush rule create-replicated rule-hdd default host hdd
- 查看crush rule是否创建成功,在ceph1上执行。
1
ceph osd crush rule ls
当前集群的crush rule如下所示:
replicated_rule rule-ssd rule-hdd
其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。
- 创建Data Pool和Index Pool,在ceph1上执行。
1 2 3 4
ceph osd pool create default.rgw.buckets.data 1024 1024 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 osd pool create default.rgw.buckets.data 1024 1024中的两个1024分别代表存储池的pg_num和pgp_num,即存储池对应的pg数量。Ceph官方文档建议整个集群所有存储池的pg数量之和大约为:(OSD数量 * 100)/数据冗余因数,数据冗余因数对副本模式而言是副本数,对EC模式而言是数据块+校验块之和。例如,三副本模式是3,EC4+2模式是6。
- 此处整个集群3台服务器,每台服务器15个OSD,总共45个OSD,按照上述公式计算应为1500,一般建议pg数取2的整数次幂。由于default.rgw.buckets.data存放的数据量远大于其他几个存储池的数据量,因此该存储池也成比例的分配更多的pg。
综上,default.rgw.buckets.data的pg数量取1024,default.rgw.buckets.index的pg数量取128或者256。
- 修改所有存储池的crush规则,在ceph1上执行。
1 2
for i in `ceph osd lspools | grep -v data | awk '{print $2}'`; do ceph osd pool set $i crush_rule rule-ssd; done ceph osd pool set default.rgw.buckets.data crush_rule rule-hdd
- 取消Proxy配置,在ceph1、ceph2、ceph3上执行。
1 2
unset http_proxy unset https_proxy
- 使用curl或者web节点登录验证,要注意IP地址与端口的对应关系,下图以IP地址为192.168.3.164、端口为10013为例说明,出现如下字样表示RGW创建成功。
至此网关服务创建成功。
创建EC存储池
- 查看crush类,在ceph1上执行。
1
ceph osd crush class ls
如果服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
[ "hdd", "ssd" ]
- 为SSD class创建crush rule,在ceph1上执行(前提是环境上osd部署在ssd磁盘)。
1
ceph osd crush rule create-replicated rule-ssd default host ssd
- 查看crush rule是否创建成功,在ceph1上执行。
1
ceph osd crush rule ls
当前集群的crush rule如下所示,其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储, 但需满足前提条件:服务器上既有基于SSD创建的OSD,又有基于HDD创建的OSD),rule-ssd则会只把数据存储到SSD上。
replicated_rule rule-ssd
- 创建EC profile。
1
ceph osd erasure-code-profile set myprofile k=4 m=2 crush-failure-domain=osd crush-device-class=hdd
以EC 4+2为例,以上命令创建了一个名为myprofile的EC profile,k为数据块数量,m为校验块数量,crush-failure-domain=host表示最小故障域为host,crush-device-class=hdd表示crush rule建立在hdd上。
一般情况下,最小故障域设置为host,若host数量小于k+m,则需要将故障域改为osd,否则会因无法找到足够多的host而报错。
- 创建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。
- 此处整个集群3台服务器,每台服务器36个OSD,总共108个OSD,按照上述公式计算应为1800,一般建议pg数取2的整数次幂。由于default.rgw.buckets.data存放的数据量远大于其他几个存储池的数据量,因此该存储池也成比例的分配更多的pg。
综上,default.rgw.buckets.data的pg数量取2048,default.rgw.buckets.index的pg数量取128或者256。
- 修改Data Pool以外所有存储池的crush规则,在ceph1上执行。
1
for i in `ceph osd lspools | grep -v data | awk '{print $2}'`; do ceph osd pool set $i crush_rule rule-ssd; done
- 取消Proxy配置,在ceph1、ceph2、ceph3上执行。
1 2
unset http_proxy unset https_proxy
- 使用curl或者web节点登录验证,如下图所示。
至此网关服务创建成功。