内存不足导致OSD卡D状态
问题现象 && 问题原因
OSD进程占⽤内存会随着进程的运⾏时间增⻓⽽增⼤,当操作系统分配不出来内存时, ⼀般情况会通过OOM
Killer(Out Of Memory killer)机制杀掉进程达到释放空间的 ⽬的。但xfs为内核态进程oom killer机制仅对⽤户态进程⽣效,所以xfs进程⽆法 被kill,再次分配内存时由于操作系统内存不⾜⽽分配失败,导致进程卡死(D状
态), 进程D状态之后只能通过硬重启来解除D状态。
D状态
操作系统 message ⽇志
适⽤版本
所有版本通⽤
解决⽅法
确认为上述问题之后设置 noout 标志位 重启这台服务器即可
设置标志位
ceph osd set noout
关闭所有 OSD 进程参考 ceph 管理员⼿册
关闭其他服务,例如 ceph-mon ceph-mgr ceph-rgw等⽤户进程参考管理员⼿册
关闭服务器
通过带外关闭电源,或者其他⽅式关闭电源
启动服务器
启动服务器之后启动所有OSD -- 参考ceph管理员⼿册
等集群所有pg 恢复状态 active+clean 去除 noout标志位
ceph osd unset noout
验证步骤
ceph -s 状态 HEALTH_OK
优化建议
增⼤内存 内存计算公式如下:
OSD个数*6G+10G/(60%)
每个OSD规划使⽤6G内存,10G操作系统使⽤内存,平时使⽤率为40%
在OSD服务器上使⽤crontab定时执⾏脚本 files/cephx-osd-freemem.sh 释放OSD内存,每天晚上
24:00 执⾏⼀次,执⾏过程中会导致OSD IO有所下降, 该操作只能缓解