Pool 对应 PG PGP数量的计算公式(可以对pool做快照)

Pool 对应 PG PGP数量的计算公式:  官方计算地址

Total PGs = ((Total_number_of_OSD * Target PGs per OSD) / max_replication_count) / pool_count

Target PGs per OSD 通常被设置为 100


http://ceph.sptty.com/rados/operations/placement-groups/


预定义 PG_NUM

用此命令创建存储池时:

ceph osd pool create {pool-name} pg_num

确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

  • 少于 5 个 OSD 时可把 pg_num 设置为 128
  • OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
  • OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
  • OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
  • 自己计算 pg_num 取值时可借助 pgcalc 工具

随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。



Pool是ceph存储数据时的逻辑分区,它起到namespace的作用。其他分布式存储系统,比如Mogilefs、Couchbase、Swift都有pool的概念,只是叫法不同。每个pool包含一定数量的PG,PG里的对象被映射到不同的OSD上,因此pool是分布到整个集群的。

  pool有两种方法增强数据的可用性,一种是副本(replicas),另一种是EC(erasure coding 纠错码)。从Firefly版本起,EC功能引入。在EC里,数据被打散成碎片,加密,然后进行分布式存储。ceph由于其分布式能力,处理EC非常成功。pool在创建时可以设置这两种方法之一,但不能同时设置两者。

pool默认的副本数量是3,我们可以自己控制副本的数量。ceph的复制能力非常灵活,可以在任何时候更改这个参数:

 语法格式: ceph osd pool set {Pool-name} size {num}
 例如:  ceph osd pool set firstpool size 2

   在数据写往pool时,遵循CRUSH的规则集,也就是说,写往哪个位置以及副本数量,受规则集影响。这个规则集是pool的重要功能。比如我们可以通过规则集,定义一个pool使用SSD存储,另一个pool使用SATA存储。

  pool也支持snapshot功能。可以运行ceph osd pool mksnap命令创建pool的快照,并且在必要的时候恢复它。还可以设置pool的拥有者属性,从而进行访问控制。

创建ceph pool的命令如下,它的参数包括pool名字、PG和PGP的数量:

$ ceph osd pool create mytest 128 128
pool 'mytest' created

查看pool有几种方式,比如:

复制代码
$ rados lspools
data
metadata
rbd
mytest

$rados df

  pool name category KB objects clones degraded unfound rd rd KB wr wr KB
  data - 0 0 0 0 0 0 0 0 0
  metadata - 0 0 0 0 0 0 0 0 0
  mytest - 2 4 2 0 0 0 0 5 3
  rbd - 0 0 0 0 0 0 0 0 0
  total used 15830040 4
  total avail 109934580

$ ceph osd lspools
0 data,1 metadata,2 rbd,3 mytest,

$ ceph osd dump |grep pool
pool 0 'data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 43 flags hashpspool crash_replay_interval 45 stripe_width 0
pool 1 'metadata' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 41 flags hashpspool stripe_width 0
pool 2 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0
pool 3 'mytest' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 58 flags hashpspool stripe_width 0
复制代码

毫无疑问ceph osd dump输出的信息最详尽,包括pool ID、副本数量、CRUSH规则集、PG和PGP数量等。

可以调整刚创建的pool的副本数量:

复制代码
root@ceph002:/etc/ceph# ceph osd pool set mytest size 2
set pool 3 size to 2

root@ceph002:/etc/ceph# ceph osd dump | grep pool pool 0 'data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool crash_replay_interval 45 stripe_width 0 pool 1 'metadata' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0 pool 2 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0 pool 3 'mytest' replicated size 2 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 15 flags hashpspool stripe_width 0 root@ceph002:/etc/ceph#
复制代码

如下命令演示ceph的snapshot功能。我们往pool里写入一个对象,然后获取pool的快照,接着删除对象,最后从快照里恢复数据。

复制代码
# 写入一个文件
$ rados -p mytest put testfile /etc/hosts

# 查看这个文件
$ rados -p mytest ls
testfile

# 创建pool的快照
$ rados mksnap snapshot001 -p mytest
created pool mytest snap snapshot001

# 查看pool的快照
$ rados lssnap -p mytest
1 snapshot001 2015.11.30 09:50:38
1 snaps

# 删除文件
$ rados -p mytest rm testfile

# 从快照里回滚文件
$ rados rollback -p mytest testfile snapshot001
rolled back pool mytest to snapshot snapshot001

# 确认结果
$ rados -p mytest ls
testfile
复制代码

删除pool会同步删除所有快照。在删除pool后,需要删除pool的CRUSH规则集,假如你手工创建过它们。同样也需删除这个pool的授权用户。

$ ceph osd pool delete mytest mytest --yes-i-really-really-mean-it
pool 'mytest' removed

 http://www.tuicool.com/articles/QZzaiqi

未完待续......

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值