一个部署好的Ceph集群
我们在servera上使用Ansible部署Ceph。查看 /etc/ansible/hosts文件,我们看到,serverc、serverd、servere三个节点同时作为mons、osds、mgr角色。servera作为client。
查看部署好的Ceph集群:
整体目标
接下来,我们配置复制池。
在部署于 serverc、serverd 和 servere 的集群上,创建一个名为 onhdd 的 CRUSH 规则,将基于 HDD 的 OSD 作为复制池的目标。
创建一个名为 rbd 的复制池,其含有 16 个 PG 并且使用 onhdd CRUSH map 规则。将应用类型设置为 rbd,并将这个池中对象的副本数量设置为三。
创建以下 CRUSH 层次结构。不要将任何 OSD 与这个新树关联。
default-4-lab (root bucket)
DC01 (datacenter bucket)
firstfloor (room bucket)
hostc (host bucket)
secondfloor (room bucket)
hostd (host bucket)新建一个名为 ceph125 的纠删代码 profile。使用这个 profile 的池必须为每个对象设置两个数据区块和一个编码区块。
使用新的 ceph125 profile,创建一个名为 testec 的纠删代码池。将它配置为使用 16 个 PG,并将其应用类型设置为 rgw。
创建一个名为 client.fortestec 的用户,此用户可以在名为 testec 的池中 docs namespace 下存储和检索对象。此用户不得具有任何其他池或 namespace 的访问权限。将 client.fortestec keyring 文件复制到 servera 上的 /etc/ceph 目录。
上传 /usr/share/dict/words 文件,作为名为 testec 的池中 docs namespace 下名为 report 的对象。
更新 serverc、serverd 和 servere 集群的 OSD near-capacity 限值信息。将 full 比率设置为 90%,将 near-full 比率设置为 86%。
将名为 rbd 的池的第一个 PG (ID: 0) 重新 map 到 OSD 0、3 和 6。
创建复制池
使用 ceph osd crush rule create-replicated 命令创建一条名为 onhdd 的新规则,将基于 HDD 的 OSD 作为复制池的目标。
ceph osd crush rule create-replicated onhdd default host hdd
创建一个名为 rbd 的复制池,其含有 16 个 PG 并且使用 onhdd CRUSH map 规则。将应用类型设置为 rbd,并将这个池中对象的副本数量设置为三。
新建一个名为 rbd 的复制池,其含有 16 个 PG 并且使用 onhdd CRUSH map 规则。将 rbd 设置为池的应用类型。
ceph osd pool create rbd 16 16 onhdd
查看rbd pool的详细信息。我们可以看到,这个pool中的pg数量为16,replicated size是2。
将池的副本数量增加到三,再验证新值。
ceph osd pool set rbd size 3
我们看到pool的replicated size已经变为3.
查看ceph集群的整体状态,目前Ceph集群中有一个pool,这个pool有16个pg。
创建CRUSH层次结构
创建以下 CRUSH 层次结构。不要将任何 OSD 与这个新树关联。
default-4-lab (root bucket)
DC01 (datacenter bucket)
firstfloor (room bucket)
hostc (host bucket)
secondfloor (room bucket)
hostd (host bucket)
使用 ceph osd crush add-bucket 命令创建 bucket。
[ceph@serverc ~]$ ceph osd crush add-bucket default-4-lab root
[ceph@serverc ~]$ ceph osd crush add-bucket DC01 datacenter
[ceph@serverc ~]$ ceph osd crush add-bucket firstfloor room
[ceph@serverc ~]$ ceph osd crush add-bucket hostc host
[ceph@serverc ~]$ ceph osd crush add-bucket secondfloor room
[ceph@serverc ~]$ ceph osd crush add-bucket hostd host
使用 ceph osd crush move 命令构建层次结构。
[ceph@serverc ~]$
ceph osd crush move DC01 root=default-4-lab[ceph@serverc ~]$
ceph osd crush move firstfloor datacenter=DC01[ceph@serverc ~]$
ceph osd crush move hostc room=firstfloor[ceph@serverc ~]$
ceph osd crush move secondfloor datacenter=DC01[ceph@serverc ~]$
ceph osd crush move hostd room=secondfloor
显示 CRUSH map 树,以验证新的层次结构。
$ceph osd crsh tree
创建用纠删码池
新建一个名为 ceph125 的纠删代码 profile。使用这个 profile 的池必须为每个对象设置两个数据区块和一个编码区块。
使用 ceph osd erasure-code-profile set 命令,新建一个名为 ceph125 的纠删代码 profile。
ceph osd erasure-code-profile set ceph125 k=2 m=1
并使用 ceph osd erasure-code-profile get 命令,验证新的纠删代码 profile 参数。
使用 ceph125 profile,创建一个名为 testec 的纠删代码池,将 rgw 设置为池的应用类型。
$ceph osd pool create testec 16 16 erasure ceph125
$ceph osd pool application enable testec rgw
列出新的池参数。
创建一个名为 client.fortestec 的用户,此用户可以在名为 testec 的池中 docs namespace 下存储和检索对象。此用户应当无权访问任何其他池或 namespace。
创建用户
创建一个名为 client.fortestec 的用户,该用户在池 testec 的 namespace docs 中具有读写功能。将关联的 keyring 文件保存为 /etc/ceph/ceph.client.fortestec.keyring,将用户的 keyring 文件复制到 servera。
$ceph auth get-or-create client.fortestec mon 'allow r' osd 'allow rw pool=testec namespace=docs' -o /etc/ceph/ceph.client.fortestec.keyring
$scp /etc/ceph/ceph.client.fortestec.keyring servera:/etc/ceph/
以 ceph 用户身份登录 servera,并尝试存储和检索对象来验证您的工作。完成后,删除这个对象。
[ceph@serverc ~]$ ssh ceph@servera
ceph@servera's password: redhat
[ceph@servera ~]$ rados --id fortestec -p testec -N docs \
> put testdoc /etc/services
[ceph@servera ~]$ rados --id fortestec -p testec -N docs get testdoc /tmp/test
[ceph@servera ~]$ diff /etc/services /tmp/test
上面命令的对比结果,两个文件没有区别。
使用 rados 命令上传 /usr/share/dict/words 文件,作为 testec 池中 docs namespace 下的 report 对象,并进行确认。
$rados --id fortestec -p testec -N docs put report /usr/share/dict/words
$rados --id fortestec -p testec -N docs stat report
设置存储池的限值比率
更新 serverc、serverd 和 servere 集群的 OSD near-capacity 限值信息。将 full 比率设置为 90%,将 near-full 比率设置为 86%。
[object Object]
使用 ceph osd dump 命令打印 OSD map,并验证这两个参数的新值。
设置客户端兼容性和OSD map
将最低客户端兼容性设置为 luminous。
ceph osd set-require-min-compat-client luminous
检索完整 PG ID 以重新 map。记住 PG ID 中的第一个数字是池 ID:poolID.ID。因此,您首先需要检索名为 rbd 的池的 ID。显示 ID 为 1.0 的 PG 的 map,其中 1 是 rbd 池 ID。
使用 pg-unmap 功能将 PG 1.0 map 到 OSD 0、3 和 6。也就是,从上一命令
的输出中,将 OSD 8 重新 map 到 OSD 6。OSD 0 和 3 已经设置。
ceph osd pg-upmap-items 1.0 8 6
和存储池相关的信息查看
查看存储池使用率
为存储池拍摄快照,并利用以下命令来检索并回滚到特定的快照:
ceph osd pool mksnap rbd rbd-snapshot1
rados -p rbd rollback object-name rbd-snapshot1
查看新能数据:
$ceph osd pool stats