Ceph告警:too many PGs per OSD处理

问题描述

一套ceph生产环境出现了告警,ceph -s查看集群状态后,告警如下:

[root@node1 ~]# 
[root@node1 ~]# ceph -s
    cluster 1dd73c00-c1ad-4e18-ae80-51bc1fc2e0c5
     health HEALTH_WARN
            too many PGs per OSD (576 > max 300)
     monmap e2: 3 mons at {node1=10.0.10.201:6789/0,node2=10.0.10.202:6789/0,node3=10.0.10.203:6789/0}
            election epoch 40, quorum 0,1,2 node1,node2,node3
      fsmap e11: 1/1/1 up {0=node2=up:active}, 1 up:standby
     osdmap e61: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds
      pgmap v286: 1728 pgs, 5 pools, 16032 bytes data, 20 objects
            223 MB used, 91870 MB / 92093 MB avail
                1728 active+clean
[root@node1 ~]# 

本文旨在记录对“too many PGs per OSD”告警的处理

问题分析

  1. 从告警来看,它告诉你osds上的pg数太多了,那么我们可以查看一下,集群中每个osd上的分布情况,命令:ceph osd df,输出结果如下:
[root@node1 ~]# 
[root@node1 ~]# ceph osd df
ID WEIGHT  REWEIGHT SIZE   USE    AVAIL  %USE VAR  PGS 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 1 0.01500  0.89510 15348M 37632k 15312M 0.24 0.99 473 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 3 0.01500  0.98936 15348M 37572k 15312M 0.24 0.99 539 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 5 0.01500  0.99223 15348M 37560k 15312M 0.24 0.99 543 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 1 0.01500  0.89510 15348M 37632k 15312M 0.24 0.99 473 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 3 0.01500  0.98936 15348M 37572k 15312M 0.24 0.99 539 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 5 0.01500  0.99223 15348M 37560k 15312M 0.24 0.99 543 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 1 0.01500  0.89510 15348M 37632k 15312M 0.24 0.99 473 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 3 0.01500  0.98936 15348M 37572k 15312M 0.24 0.99 539 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 5 0.01500  0.99223 15348M 37560k 15312M 0.24 0.99 543 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 1 0.01500  0.89510 15348M 37632k 15312M 0.24 0.99 473 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 3 0.01500  0.98936 15348M 37572k 15312M 0.24 0.99 539 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 5 0.01500  0.99223 15348M 37560k 15312M 0.24 0.99 543 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 0 0.01500  1.00000 15348M 38328k 15311M 0.24 1.01 629 
 1 0.01500  0.89510 15348M 37632k 15312M 0.24 0.99 473 
 2 0.01500  0.97151 15348M 38876k 15311M 0.25 1.02 632 
 3 0.01500  0.98936 15348M 37572k 15312M 0.24 0.99 539 
 4 0.01500  1.00000 15348M 38608k 15311M 0.25 1.01 640 
 5 0.01500  0.99223 15348M 37560k 15312M 0.24 0.99 543 
              TOTAL 92093M   223M 91870M 0.24          
MIN/MAX VAR: 0.99/1.02  STDDEV: 0.00
[root@node1 ~]# 

观察结果的最后一列,可发现pgs确实过多

  1. 从告警来看,你会发现告警后面有个>300,此时我们就会有疑问为啥会报错(...>300)呢?这300是怎么来的呢?怎么不是其他的数呢?通过查阅官方资料发现这个300是由参数mon_pg_warn_max_per_osd设定的,mon_pg_warn_max_per_osd默认值为300. 我们也可以验证一下环境中这个参数值到底为多少,命令ceph --show-config | grep "mon_pg_warn_max_per_osd",输出结果如下:
[root@node1 ~]# ceph version
ceph version 10.2.5 (c461ee19ecbc0c5c330aca20f7392c9a00730367)
[root@node1 ~]# 
[root@node1 ~]# ceph --show-config  | grep "mon_pg_warn_max_per_osd"
mon_pg_warn_max_per_osd = 300
[root@node1 ~]# 
[root@node1 ~]# 

  1. 下面我们就可以通过调整这个值来解决这个告警

解决问题

1.修改ceph.conf文件,将mon_pg_warn_max_per_osd重新设置一个值,注意mon_pg_warn_max_per_osd放在[global]下

2.将修改push到集群中其他节点,命令:
ceph-deploy --overwrite-conf config push {主机名}

3.重启ceph-mon服务使参数修改生效,命令:
systemctl restart ceph-mon.target

4.检测问题是否解决(检测设置的值是否生效),命令:
ceph --show-config | grep "mon_pg_warn_max_per_osd"
具体实践如下:

[root@node1 ceph]# ls
ceph.client.admin.keyring  ceph.conf  ceph.conf_back  ceph-deploy-ceph.log  rbdmap  tmp_BvVxU
[root@node1 ceph]# 
[root@node1 ceph]# vim ceph.conf
[root@node1 ceph]# 
[root@node1 ceph]# ceph-deploy --overwrite-conf config push node2 node3
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy --overwrite-conf config push node2 node3
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : True
[ceph_deploy.cli][INFO  ]  subcommand                    : push
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f4f3d7a5908>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['node2', 'node3']
[ceph_deploy.cli][INFO  ]  func                          : <function config at 0x27b7758>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.config][DEBUG ] Pushing config to node2
[node2][DEBUG ] connected to host: node2 
[node2][DEBUG ] detect platform information from remote host
[node2][DEBUG ] detect machine type
[node2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.config][DEBUG ] Pushing config to node3
[node3][DEBUG ] connected to host: node3 
[node3][DEBUG ] detect platform information from remote host
[node3][DEBUG ] detect machine type
[node3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[root@node1 ceph]# systemctl restart ceph-mon.target
[root@node1 ceph]# 
[root@node1 ceph]# ceph --show-config | grep "mon_pg_warn_max_per_osd"
mon_pg_warn_max_per_osd = 800
[root@node1 ceph]# 
[root@node1 ~]# ceph -s
    cluster 1dd73c00-c1ad-4e18-ae80-51bc1fc2e0c5
     health HEALTH_OK
     monmap e2: 3 mons at {node1=10.0.10.201:6789/0,node2=10.0.10.202:6789/0,node3=10.0.10.203:6789/0}
            election epoch 60, quorum 0,1,2 node1,node2,node3
      fsmap e11: 1/1/1 up {0=node2=up:active}, 1 up:standby
     osdmap e61: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds
      pgmap v291: 1728 pgs, 5 pools, 16032 bytes data, 20 objects
            223 MB used, 91870 MB / 92093 MB avail
                1728 active+clean
[root@node1 ~]# 

值得一提

自 ceph版本Luminous v12.2.x以后,参数mon_pg_warn_max_per_osd变更为mon_max_pg_per_osd,默认值也从300变更为200,修改该参数后,也由原来的重启ceph-mon服务变为重启ceph-mgr服务。

修复步骤为:
1.修改ceph.conf文件,将mon_max_pg_per_osd设置一个值,注意mon_max_pg_per_osd放在[global]下

2.将修改push到集群中其他节点,命令:
ceph-deploy --overwrite-conf config push {主机名}

3.重启ceph-mgr服务使参数修改生效,命令:
systemctl restart ceph-mgr.target

4.检测问题是否解决(查看参数是否为ceph,conf里修改的参数),命令:
ceph --show-config | grep "mon_max_pg_per_osd"

实践如下:

  • 在ceph Luminous v12.2.8版本模拟告警场景,告警如:
[root@node81 ~]# 
[root@node81 ~]# ceph -s
  cluster:
    id:     3b7d0bb9-83b3-431c-8a00-77b34e3ffb08
    health: HEALTH_WARN
            too many PGs per OSD (228 > max 200)
 
  services:
    mon: 3 daemons, quorum node81,node82,node85
    mgr: node81(active), standbys: node85, node82
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   8 pools, 680 pgs
    objects: 0 objects, 0B
    usage:   6.09GiB used, 29.9GiB / 36.0GiB avail
    pgs:     680 active+clean
 
[root@node81 ~]# ceph --show-config | grep "mon_max_pg_per_osd"
mon_max_pg_per_osd = 200
[root@node81 ~]# 

  • 查询ceph版本及mon_max_pg_per_osd默认值:
[root@node81 ceph]# ceph version
ceph version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)
[root@node81 ceph]# 
[root@node81 ceph]# 
[root@node81 ceph]# ceph --show-config | grep "mon_max_pg_per_osd"
mon_max_pg_per_osd = 200
[root@node81 ceph]# 
[root@node81 ceph]# 

  • 修复
[root@node81 ceph]# 
[root@node81 ceph]# cp ceph.conf ceph.conf_back
[root@node81 ceph]# 
[root@node81 ceph]# vim ceph.conf
[root@node81 ceph]# 
[root@node81 ceph]# ceph-deploy --overwrite-conf config push node82 node85
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.0): /usr/bin/ceph-deploy --overwrite-conf config push node82 node85
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : True
[ceph_deploy.cli][INFO  ]  subcommand                    : push
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x23da0e0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['node82', 'node85']
[ceph_deploy.cli][INFO  ]  func                          : <function config at 0x23bb9b0>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.config][DEBUG ] Pushing config to node82
[node82][DEBUG ] connected to host: node82 
[node82][DEBUG ] detect platform information from remote host
[node82][DEBUG ] detect machine type
[node82][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.config][DEBUG ] Pushing config to node85
[node85][DEBUG ] connected to host: node85 
[node85][DEBUG ] detect platform information from remote host
[node85][DEBUG ] detect machine type
[node85][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[root@node81 ceph]# 
[root@node81 ceph]# systemctl restart ceph-mgr.target
[root@node81 ceph]# 
[root@node81 ceph]# ceph --show-config | grep "mon_max_pg_per_osd"
mon_max_pg_per_osd = 800
[root@node81 ceph]# 

  • 检测集群状态
[root@node81 ceph]# systemctl restart ceph-mgr.target
[root@node81 ceph]# 
[root@node81 ceph]# ceph --show-config | grep "mon_max_pg_per_osd"
mon_max_pg_per_osd = 800
[root@node81 ceph]# 
[root@node81 ceph]# ceph -s
  cluster:
    id:     3b7d0bb9-83b3-431c-8a00-77b34e3ffb08
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node81,node82,node85
    mgr: node81(active), standbys: node85, node82
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   8 pools, 680 pgs
    objects: 0 objects, 0B
    usage:   6.09GiB used, 29.9GiB / 36.0GiB avail
    pgs:     680 active+clean
 
[root@node81 ceph]# 

参考

ceph Luminous 变更

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容