创建存储池
对象存储需要用到多个存储池,把元数据等数据量较小的存储池建立在SSD上可提高性能。本章节介绍在SSD上创建对象存储元数据存储池,在HDD上创建对象存储数据存储池。
Ceph的存储池默认使用三副本模式,其中对象存储数据存储池有时会设置为EC纠删码模式以节省存储空间,以下分两个部分分别介绍副本模式和EC模式存储池的创建方法。
仅需在主节点ceph1上执行。
创建副本存储池
- 设置crush规则。
- 查看crush类,在ceph1上执行。
1
ceph osd crush class ls
服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
[ "hdd", "ssd" ]
- 创建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
- 查看crush rule。
1
ceph osd crush rule ls
其中replicated_rule是集群默认使用的crush rule,若不指定crush rule则默认使用这个。该rule是三副本模式,存储池的所有数据会按照一定比例存储到所有存储设备上(SSD和HDD上都会有数据存储),rule-ssd和rule-hdd则会分别只把数据存储到SSD上和HDD上。
- 查看crush类,在ceph1上执行。
- 在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命令的说明。
- 创建存储池命令最后的两个数字,比如ceph osd pool create default.rgw.buckets.data 32 32中的两个32分别代表存储池的pg_num和pgp_num,即存储池对应的pg数量。
- 修改所有存储池的crush规则。
1
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上执行。
1
ceph osd crush class ls
服务器上既有基于SSD的创建的OSD,又有基于HDD创建的OSD,则crush class会显示两种类型,如下所示:
[ "hdd", "ssd" ]
- 创建crush规则。为SSD class创建crush rule,前提是环境上osd部署在ssd磁盘)
1
ceph osd crush rule create-replicated rule-ssd default host ssd
- 查看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上。
- 查看crush类,在ceph1上执行。
- 创建EC profile。
1
ceph osd erasure-code-profile set myprofile k=4 m=2 crush-failure-domain=osd crush-device-class=ssd
- 创建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。
- 修改所有存储池的crush规则。
1
ceph osd pool set default.rgw.buckets.data crush_rule rule-ssd
父主题: 部署对象存储功能