博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ceph的pg分布
阅读量:5746 次
发布时间:2019-06-18

本文共 4604 字,大约阅读时间需要 15 分钟。

hot3.png

    前面一节“ceph的pg诊断” 说明了ceph保证数据充足的可靠性。ceph讲究的随机,平均。但是我们有时候会发现同样大小的osd有的剩余空间很大,有的却以满了,例如下面的例子:

# 3个节点6个osd[root@admin tmp]# ceph osd treeID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.05424 root default                                     -2 0.01808     host admin                                    0 0.00879         osd.0       up  1.00000          1.00000  3 0.00929         osd.3       up  1.00000          1.00000 -3 0.01808     host node1                                    1 0.00879         osd.1       up  1.00000          1.00000  4 0.00929         osd.4       up  1.00000          1.00000 -4 0.01808     host node2                                    2 0.00879         osd.2       up  1.00000          1.00000  5 0.00929         osd.5       up  1.00000          1.00000#节点admin上的osd使用情况[root@admin tmp]# df -h|grep osd/dev/mapper/cephvg-osd    9.0G  8.5G  559M  94% /srv/ceph/osd/dev/mapper/cephvg2-osd2  9.5G  6.0G  3.6G  63% /srv/ceph/osd2#节点node1 上的osd使用情况[root@node1 ~]# df -h|grep osd/dev/mapper/cephvg-osd    9.0G  6.7G  2.4G  74% /srv/ceph/osd/dev/mapper/cephvg2-osd2  9.5G  7.9G  1.7G  83% /srv/ceph/osd2#节点node2上的osd使用情况[root@node2 ~]# df -h|grep osd/dev/mapper/cephvg-osd    9.0G  6.1G  3.0G  68% /srv/ceph/osd/dev/mapper/cephvg2-osd2  9.5G  8.4G  1.2G  89% /srv/ceph/osd2

上面我们可以看到三个节点6个OSD,每个osd都是10G的总容量且都是普通的磁盘,那为什么osd的使用率差别为什么这么大了?

下面我们就简单的解释一下:

我们在创建pool的时候都指定了pg的个数,且也限制了pool的磁盘容量配额

[root@admin tmp]# ceph osd pool ls detail|grep pool0pool 3 'pool0' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 32 pgp_num 32 last_change 127 flags hashpspool max_bytes 104857600 stripe_width 0# pool0 设置pg32个,最大容量100M(max_bytes 104857600 换算出来的)
[root@admin tmp]# ceph osd pool ls detail|grep pool1pool 4 'pool1' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 32 pgp_num 32 last_change 129 flags hashpspool max_bytes 5368709120 stripe_width 0# pool1 也是32个pg,最大容量5G

我们看到pool0和pool1的pg的个数相同,单总容量却相差甚远。那我们想想 总容量/pg个数=pg容量

pool0里面的pg容量和pool1里面的pg的容量相差很大,而每个pg分布到osd上,osd磁盘的大小却是相同的,这就是为什么导致osd使用率相差很大的原因。

[root@admin tmp]# ceph -s    cluster 55430962-45e4-40c3-bc14-afac24c69acb     health HEALTH_WARN            clock skew detected on mon.node1            2 near full osd(s)            Monitor clock skew detected      monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}            election epoch 30, quorum 0,1,2 admin,node1,node2     osdmap e134: 6 osds: 6 up, 6 in            flags nearfull,sortbitwise,require_jewel_osds      pgmap v2188: 192 pgs, 4 pools, 4474 MB data, 284 objects            44349 MB used, 12422 MB / 56772 MB avail                 192 active+clean# 已经警告2个osd 快满了。

那么我们在详细去查一下,我们pool0里面存入的文件90m是一个大小只有90M的文件

[root@admin tmp]# rados -p pool0 lsrbd_object_map.acd0238e1f2990mrbd_id.image0rbd_directoryrbd_header.acd0238e1f29

而pool1 里面存入了4个都是超大文件

[root@admin tmp]# rados -p pool1 ls|grep G3G13G33G3G2

我们分别看一下两个pool里面的文件的pg分布

[root@admin tmp]# rados -p pool0 ls|grep 9090m[root@admin tmp]# ceph osd map pool0 90mosdmap e134 pool 'pool0' (3) object '90m' -> pg 3.149ba74f (3.f) -> up ([2,0,4], p2) acting ([2,0,4], p2)#上面是pool0里面的小文件 分布在0,2,4osd上[root@admin tmp]# rados -p pool1 ls |grep G3G13G33G3G2[root@admin tmp]# ceph osd map pool0 90mosdmap e134 pool 'pool0' (3) object '90m' -> pg 3.149ba74f (3.f) -> up ([2,0,4], p2) acting ([2,0,4], p2)[root@admin tmp]# ceph osd map pool1 3Gosdmap e134 pool 'pool1' (4) object '3G' -> pg 4.e7764a6c (4.c) -> up ([4,0,5], p4) acting ([4,0,5], p4)[root@admin tmp]# ceph osd map pool1 3G1osdmap e134 pool 'pool1' (4) object '3G1' -> pg 4.f6d15484 (4.4) -> up ([1,5,0], p1) acting ([1,5,0], p1)[root@admin tmp]# ceph osd map pool1 3G2osdmap e134 pool 'pool1' (4) object '3G2' -> pg 4.860667f (4.1f) -> up ([3,2,1], p3) acting ([3,2,1], p3)[root@admin tmp]# ceph osd map pool1 3G3osdmap e134 pool 'pool1' (4) object '3G3' -> pg 4.5f18be84 (4.4) -> up ([1,5,0], p1) acting ([1,5,0], p1)# 上面是pool1里面的大文件,大部分都分布在osd.0 和osd.5上

看明白了吧,就是因为pool1里面每个pg的容量非常大,且这些pg大多数分布在osd.0 和osd.5上,所以我们下面看到的两个接近满载的osd应该就是0和5,我们下面验证一下看看是不是这个样子

[root@admin ~]# ceph health detailHEALTH_WARN clock skew detected on mon.node1; 2 near full osd(s); Monitor clock skew detected osd.0 is near full at 93%osd.5 is near full at 88%mon.node1 addr 172.18.1.241:6789/0 clock skew 0.386219s > max 0.05s (latency 0.00494154s)

所以我们在创建pool的时候要保证3个规则:

1 每个osd的pg个数在100个左右

2 pg的个数是2个N次方

3 每一个pool的总容量和pg的个数换算出来的pg的容量 都基本上一致

如果万一出现这样osd使用率不均衡的情况,接近办法有两个:

1 削峰填谷,转移大文件到其他pool

2 修改pool的pg个数(pg个数只能增大不能缩小,所以对大文件pool增大其pg个数)

转载于:https://my.oschina.net/wangzilong/blog/1621225

你可能感兴趣的文章
【资料合集】运维/DevOps在线技术峰会:文章、PDF+回顾视频!
查看>>
rhel7.2 优化技巧
查看>>
RDS for MySQL 数据库优化【Tech Insight演讲实录】
查看>>
uwsgi配置了解
查看>>
PostgreSQL relcache在长连接应用中的内存霸占"坑"
查看>>
Javah提示未找到 ..的类文件
查看>>
2013年工作中一些问题回顾和总结
查看>>
【SHELL 编程基础第一部分】第一个SHELL脚本HELLOSHELL及一些简单的SHELL基础书写与概念;...
查看>>
How to: Define a Conversion Operator [msdn]
查看>>
虚拟机09:添加永久磁盘
查看>>
心理学集锦
查看>>
RColorBrewer调色板控制包的使用
查看>>
Oracle 10g 到11g的数据迁移 导入导出 顺序步骤 expdp/impdp
查看>>
【转载】actor 模型的优缺点分析介绍
查看>>
For Each...Next
查看>>
APK程序反编译
查看>>
敏捷开发的一些思考--故事拆分(同发csdn)
查看>>
jquery图片时钟
查看>>
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
Innodb:如何计算异步/同步刷脏及checkpoint的临界范围
查看>>