背景
叢集狀态報錯,如下:
# ceph -s
cluster d64ac80-be-a8-b4d8aeb18560
health HEALTH_WARN <-- 報錯的地方
too many PGs per OSD ( > max )
monmap e1: mons at {node1=:/}
election epoch , quorum node1
osdmap e49: osds: up, in
flags sortbitwise,require_jewel_osds
pgmap v1256: pgs, pools, bytes data, objects
MB used, GB / GB avail
active+clean
分析
問題原因是叢集osd 數量較少,在我的測試過程中,由于搭建rgw網關、和OpenStack內建等,建立了大量的pool,每個pool要占用一些pg ,ceph叢集預設每塊磁盤都有預設值,好像每個osd 為300個pgs,不過這個預設值是可以調整的,但調整得過大或者過小都會對叢集的性能産生一定影響。因為我們這個是測試環境,隻要能消除掉報錯即可。查詢目前每個osd下最大的pg報警值:
$ ceph --show-config | grep mon_pg_warn_max_per_osd
mon_pg_warn_max_per_osd = 300
解決方案
在配置檔案中,調大叢集的此選項的告警閥值;方法如下,在mon節點的ceph.conf(/etc/ceph/ceph.conf)配置檔案中添加:
$ vi /etc/ceph/ceph.conf
[global]
.......
mon_pg_warn_max_per_osd = 1000
重新開機monitor服務:
$ systemctl restart ceph-mon.target
再次檢視ceph叢集狀态。
$ ceph -s
cluster 1d64ac80-21be-430e-98a8-b4d8aeb18560
health HEALTH_OK
monmap e1: 1 mons at {node1=109.105.115.67:6789/0}
election epoch 6, quorum 0 node1
osdmap e49: 2 osds: 2 up, 2 in
flags sortbitwise,require_jewel_osds
pgmap v1273: 912 pgs, 23 pools, 4503 bytes data, 175 objects
13636 MB used, 497 GB / 537 GB avail
912 active+clean
“`