PG数计算
PG数计算
原地址:http://xiaqunfeng.cc/2017/09/15/too-many-PGs-per-OSD/
ceph告警问题:”too many PGs per OSD” 的解决方法,以及pg数量的合理设定
现象
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# ceph -s
cluster 4c7ec5af-cbd3-40fd-8c96-0615c77660d4
health HEALTH_WARN
too many PGs per OSD (412 > max 300)
monmap e2: 3 mons at {ceph0=172.21.1.21:6789/0,ceph1=172.21.1.22:6789/0,ceph2=172.21.1.23:6789/0}
election epoch 1780, quorum 0,1,2 ceph0,ceph1,ceph2
mgr active: ceph0 standbys: ceph1, ceph2
osdmap e94: 6 osds: 6 up, 6 in
flags sortbitwise,require_jewel_osds,require_kraken_osds
pgmap v161317: 824 pgs, 10 pools, 30201 MB data, 8642 objects
90831 MB used, 181 GB / 269 GB avail
824 active+clean
client io 34800 B/s wr, 0 op/s rd, 9 op/s wr
|
原因
- 集群osd 数量较少
- 搭建rgw网关、OpenStack、容器组件等,pool创建较多,每个pool默认需要占用一些pg,pool中pg数目设置不合理,导致集群 total pg 数过多
解决
方法
调整每个osd默认pg数,参数为 mon_pg_warn_max_per_osd ,当前默认参数如下:
|
1
2
|
# ceph --show-config | grep mon_pg_warn_max_per_osd
mon_pg_warn_max_per_osd = 300
|
步骤
1、修改ceph配置文件
|
1
2
3
4
5
|
# cd /etc/ceph
# vim ceph.conf
[global]
.......
mon_pg_warn_max_per_osd = 500
|
2、将配置文件推到mon所在的其他节点
|
1
|
# ceph-deploy --overwrite-conf config push ceph1 ceph2
|
3、重启mon进程
|
1
|
# systemctl restart ceph-mon.target
|
重启成功后,再次查看配置项
|
1
2
|
# ceph --show-config | grep mon_pg_warn_max_per_osd
mon_pg_warn_max_per_osd = 500
|
此时集群状态ok
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# ceph -s
cluster 4c7ec5af-cbd3-40fd-8c96-0615c77660d4
health HEALTH_OK
monmap e2: 3 mons at {ceph0=172.21.1.21:6789/0,ceph1=172.21.1.22:6789/0,ceph2=172.21.1.23:6789/0}
election epoch 1780, quorum 0,1,2 ceph0,ceph1,ceph2
mgr active: ceph0 standbys: ceph1, ceph2
osdmap e94: 6 osds: 6 up, 6 in
flags sortbitwise,require_jewel_osds,require_kraken_osds
pgmap v161317: 824 pgs, 10 pools, 30201 MB data, 8642 objects
90831 MB used, 181 GB / 269 GB avail
824 active+clean
client io 34800 B/s wr, 0 op/s rd, 9 op/s wr
|
pg数目的设定
信息查询
1、查看当前osd数目
|
1
2
|
# ceph osd ls | wc -l
6
|
2、查看当前有多少个pool
|
1
2
|
# ceph osd pool ls | wc -l
10
|
3、查看 replication pool 的数量
|
1
2
3
4
5
6
7
8
9
10
11
|
# ceph osd dump | grep repli
pool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 31 flags hashpspool stripe_width 0
pool 1 '.rgw.root' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 14 flags hashpspool stripe_width 0
pool 2 'default.rgw.control' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 16 flags hashpspool stripe_width 0
pool 3 'default.rgw.data.root' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 19 flags hashpspool stripe_width 0
pool 4 'default.rgw.gc' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 20 flags hashpspool stripe_width 0
pool 5 'default.rgw.lc' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 21 flags hashpspool stripe_width 0
pool 6 'default.rgw.log' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 23 flags hashpspool stripe_width 0
pool 7 'default.rgw.users.uid' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 26 flags hashpspool stripe_width 0
pool 8 'kube' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 36 flags hashpspool stripe_width 0
pool 9 'stage' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 54 flags hashpspool stripe_width 0
|
可以看到,每个pool都是 3 副本(replicated size 3)
total pg num
公式如下:
|
1
|
Total PGs = (Total_number_of_OSD * 100) / max_replication_count
|
结果必须取最接近该数的 2 的幂
比如,根据以上信息:
|
1
2
3
|
Total_number_of_OSD = 6
max_replication_count = 3
Total PGs = 200
|
最接近 200 的 2 的幂是 256。所以推荐的集群最大 total PGs 数为 256。
pool pg num
每个 pool 的 pg 数目计算:
|
1
|
Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count
|
结果同样要取最接近的 2 的幂。
对应该例,每个 pool 的 pg num 为:
|
1
2
|
pool_count = 10
Total PGs = 200 / 10 = 20
|
所以每个 pool 的平均分配 pg num 为 16。
pg num command
得到和设置指定 pool 中的 pg_num 和 pgp_num
| command | function |
|---|---|
ceph osd pool create <pool-name> <pg-number> <pgp-number> |
To create a new pool |
ceph osd pool get <pool-name> <pg_num> |
To get number of PG in a pool |
ceph osd pool get <pool-name> <pgp_num> |
To get number of PGP in a pool |
ceph osd pool set <pool-name> <pg_num number> |
To increase number of PG in a pool |
ceph osd pool set <pool-name> <pgp_num number> |
To increase number of PGP in a pool |
创建pool时如果不指定 pg_num,默认为8
|
1
2
|
# ceph --show-config | grep osd_pool_default_pg_num
osd_pool_default_pg_num = 8
|
PG数计算的更多相关文章
- 每个pool pg数计算
ceph PGs per Pool Calculator 原文档:http://xiaqunfeng.cc/2017/09/18/ceph-PGs-per-Pool-Calculator/ 2017- ...
- Ceph之PG数调整
1. PG介绍 PG, Placement Groups.CRUSH先将数据分解成一组对象,然后根据对象名称.复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID.可以将PG看做一个逻辑 ...
- 调整ceph的pg数(pg_num, pgp_num)
https://www.jianshu.com/p/ae96ee24ef6c 调整ceph的pg数 PG全称是placement groups,它是ceph的逻辑存储单元.在数据存储到cesh时,先打 ...
- ACM Fibonacci数 计算
Fibonacci数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...
- js-小数计算问题
先上图: 什么情况? 原因:js采用二进制进行小数计算 先看十进制的小数转换为二进制的方法: 十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位 假如我们有小数111.4(10), ...
- PHP PDO select语句结果行数计算
PDO有一个函数PDOStatement::rowCount返回上一个SQL语句影响的行数. rowCount函数对于DELETE, INSERT, 或者UPDATE语句的结果是正确的,但对于sele ...
- CNN中的卷积操作的参数数计算
之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积.比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8* ...
- Catalan数计算及应用
Catalan数列是非常奇妙的一列数字,因为很多问题的解就是一个Catalan数.知道了这一规律,很多看似复杂的问题便可迎刃而解.那么什么是Catalan数,什么样的问题的解是Catalan数呢? 1 ...
- Lucene索引数计算
Elasticsearch默认在创建索引结束时得到5个分片及1个副本: 分片是有0-n个副本,“5个分片及1个副本”即“5个分片及5个相应分片副本”:共10个Lucene索引 副本数:指的是“单个分片 ...
随机推荐
- C# 操作本地用户和组(基本全功能)
今天学习了下怎么用.Net操作本地用户和组,因为目前网上还没看到一篇比较完整的文章,所以整理了下也分享出来,最后附带参考文档,方便深究的童鞋继续学习.========== 原创作品 作者:Yo ...
- sparkContext初始化机制
sparkContext初始化机制 要点: 1.TaskSchedular如何注册,application.Excutor 如何反向注册 TaskScheduleImpl 即 TaskSchedula ...
- C#怎么实现文件下载功能的四种方法
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- docker中部署项目时遇到的问题
容器和宿主机时间不同步问题? 将本地时间复制到docker容器内的etc文件夹下即可 docker cp /etc/localtime scrapy_8:/etc/ 启动crontab错误? 报错: ...
- 从壹开始 [ Design Pattern ] 之二 ║ 单例模式 与 Singleton
前言 这一篇来源我的公众号,如果你没看过,正好直接看看,如果看过了也可以再看看,我稍微修改了一些内容,今天讲解的内容如下: 一.什么是单例模式 [单例模式],英文名称:Singleton Patter ...
- java 学习第三天小练习
今天做的是一些流程控制题,if...else,for循环等. 1.给定一个成绩,如果成绩大于80,则输出“奖励”.判断完后不管条件成不成立都要输出“继续努力”. package lianXiTi; i ...
- python gui tkinter快速入门教程 | python tkinter tutorial
本文首发于个人博客https://kezunlin.me/post/d5c57f56/,欢迎阅读最新内容! python tkinter tutorial Guide main ui messageb ...
- react -Route exact Redirect
exact是Route下的一个属性,react路由会匹配到所有能匹配到的路由组件,exact能够使得路由的匹配更严格一些(exact的值为bool型). <Route path='/' c ...
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)
python3 解释器默认编码为Unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节串,字节码通过解码成为字符串. encode:str-->byte ...
- C#Windows Forms窗体、按钮-xdd
1.更换窗体图标 方法:单击窗体,更改icon属性. 2.调整窗体打开时默认位置 方法:单击窗体,更改StartPotion属性. 3.修改窗体大小 方法:单击窗体,更改Size属性. 4.设置窗体的 ...