CEPH 常用命令

发布时间 2023-04-25 12:58:56作者: XU-NING

CEPH 常用命令

ceph health detail 查看运行状况详细信息

ceph osd dump 查看osd映射信息

ceph quorum_status --format json-pretty 查看Mon_quorum状态

ceph osd pool ls detail 查看 pool 类型

ceph osd pool ls 查看所有的储存池

rados df 查看pool详细信息

ceph osd pool create <pg数> 创建一个存储池

ceph osd pool get pg_num 查看某个储存池的pg数

ceph osd pool set pg_num <pg_num>

ceph osd pool get pgp_num 查看某个储存池的pgp数

ceph osd pool set pgp_num <pgp_num>

ceph osd pool application enable 指定pool application

ceph-volume lvm list // 与磁盘对应关系 cat /var/lib/ceph/disk.json

rados listomapvals rbd_directory -p volumes | grep -5 289ed8c8e8256 // 查看这个对象里面是哪个虚拟机

ceph tell osd.$i injectargs "--osd_recovery_max_active 3" // 限定 osd 最多同时有多少 pg 做 recover
ceph tell osd.$i injectargs "--osd_recovery_max_single_start 1" // 限定每个 pg 可以启动 recover 操作的最大数
ceph tell osd.$i injectargs "--osd_max_backfills 1" // 限定 osd 允许的最大 backfills 数

ceph daemon osd.116 config show | grep osd_max_backfills // 查看 osd 当前限制的值

// 任何 pg 操作都要停对应 osd 服务

strace -e trace=file /usr/bin/ceph-osd -f --cluster ceph --id 211 --setuser ceph --setgroup ceph 2> pg_error.txt // 手动拉起 osd 并查看是否有 pg 缺失

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-4/ --pgid 4.33 --op remove // 删除 pg

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-4/ --pgid 4.33 --op import --file /root/4.33 // 导入 pg, 导入前需要先删除pg, 导入后记得修改权限 chown ceph:ceph -R /var/lib/ceph/osd/ceph-4/current/4.33_*

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-4/ --pgid 4.33 --op mark-complete // 强制标记 peering 完成&强制让其成为主

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op mark-complete

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-69 --pgid 2.218 --op list // 查询有多少对象

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --pgid 4.33 --op export --file /root/4.33 // 导出 pg

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-80/ --pgid 2.545 --op export-remove --file /root/2.545.bak // 删除并导出

ceph osd primary-temp 2.6f 5 // 强制 peering

for i in {cat pg_4.txt};do ceph pg $i query|jq .state;done // 查看 单个 pg 状态

ceph pg dump_stuck |grep -v active

ceph osd lost 5 // 将某个 pg 移出集群, 让其他 pg 作为主 pg, 可能会丢失一些数据

查看存储池状态
ceph osd pool stats ssd
查看归置组不响应的pg
ceph pg dump_stuck stale
ceph pg dump_stuck inactive
ceph pg dump_stuck unclean

ceph osd pool rm 删除储存池。注:ceph出于数据安全考虑,rm时需要修改配置文件。

vim ceph.conf

[mon]
mon allow pool delete = true
重启 systemctl restart ceph-mon.target
ceph osd pool rm <pool name> <pool name> --yes-i-really-really-mean-it

“ceph balancer mode”默认为“none”,用ceph balancer mode upmap命令调整为“upmap”。“ceph balancer”功能默认不打开,ceph balancer on/off用来打开/关闭“ceph balancer”功能。

ceph balancer mode upmap // 打开 balancer

自动 scrub

[osd]
; default is 0.5
; scrubbing is allowed when loadavg is lower
; than this value
osd_scrub_load_threshold = 5

; default is 7 days
; increase to 28 days
osd_scrub_max_interval = 2419200

; default is 1 day
; increase to 14 days
osd_scrub_min_interval = 1209600

; default is 7 days
osd_deep_scrub_interval = 2419200

; default is 0
osd_scrub_sleep = 0.1

ceph daemon osd.0 config diff // 查询改变后和默认值

osd scrub begin hour = 22 // 默认 0
osd scrub end hour = 6 // 默认 24


1637657515778

ops are blocked 出现只有一个 osd 的情况下,可以尝试最小副本数设置为 1

ceph osd pool set volumes min_size 1
ceph osd pool set vms min_size 1 

ceph 集群异常断电 osd 拉不起来,处理思路

down+peering

1、ceph -s 查看是否有 down+peering 状态的 pg

2、定位是哪个 pgs 有问题 ceph pg dump |grep down+peering

3、查看 pg 所在的 主osd ceph pg XXX query |less

4、到 osd 所在节点查看哪些 pg 缺失,

strace -e trace=file /usr/bin/ceph-osd -f --cluster ceph --id 211 --setuser ceph --setgroup ceph 2> osd.211.log

​ 4.1、根据导出来的文档查看 pg 状态,如果不是 actvie+xxx,就备份,然后一起全部删除。

​ 4.2、如果有 pg 缺失,到其他 osd 上查看是否存在,路径 du -sh /var/lib/ceph/osd-X/cuxxxx, 可以将其他所在 osd 的副本导入缺失的 osd 上

​ 4.3、或者将缺失的 pg 删除 (至少有一个 osd 存在 pgs 才可以删)

incomplete

1、查看哪个 pg 不完整

ceph pg dump_stuck |grep incomplete 

2、找到一个最权威的 pg,不知道的话可以按照最大的来

du -sh /var/lib/ceph/osd-X/cuxxxx

3、停 osd 服务,导出 pg

4、传到对应的 osd 节点

5、登陆对应的 osd 节点 导入

6、 强制标记 peering 完成&强制让其成为主,操作的时候 osd 服务需要停止状态

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op mark-complete   // --type bluestore 不加这个参数,默认是这个,根据 ceph 类型来  --type filestore --type bluestore

7、启服务

48/2881001 unfound (0.002%)

优先使用 ceph pg xxx list_missing 查看哪个对象丢失,ceph-objectstore-tool 工具导数据,实在不行再用这个

1、查看哪些 pg unfound

ceph health detail | grep unfound

2、尝试回退是否成功 (主存在数据才能成功)

ceph pg {pgid} mark_unfound_lost revert

3、如果不能成功就删除(这个对象就丢了)

ceph pg {pgid} mark_unfound_lost delete

批量操作

ceph health detail | grep unfound |egrep -v 'ERR|\/' | awk '{print $2}' | xargs -n1 -i ceph pg {} mark_unfound_lost revert

ceph health detail | grep unfound |egrep -v 'ERR|\/' | awk '{print $2}' | xargs -n1 -i ceph pg {} mark_unfound_lost delete

pg没有及时清理

1639041855765

解决办法

有2个解决方法:
\1. 关闭告警,对磁盘静默检查功能没有影响
在线修改mgr配置

ceph config set mgr mon_warn_pg_not_deep_scrubbed_ratio 0
ceph config set mgr mon_warn_pg_not_scrubbed_ratio 0

或者修改配置文件并重启mgr进程,二选一

vi /etc/ceph/ceph.conf
[global]
mon warn pg not deep scrubbed ratio = 0
mon warn pg_not scrubbed ratio = 0

\2. 统计计算每个周期可以完成scrub/deep scrub的pg个数,预估比例值动态进行调整,集群写入数据量变多也会导致scrub周期被拉长,可能需要多次进行调整或者直接给出一个比较长的周期例如1个月或更长时间执行一次完整检查
mon_warn_pg_not_deep_scrubbed_ratio=0.75(超出scrub时间告警比例)
osd_scrub_min_interval = 86400(当系统负载较低时开始scrub周期默认1天)
osd_scrub_max_interval = 604800(无视系统负载开始scrub周期默认7天)
osd_scrub_load_threshold = 0.5 (存储节点CPU平均负载阈值大于0.5不执行scrub)


修改这个配置项,再重启osd,会自动加加入集群
vi /etc/ceph/ceph.conf
osd crush update on start = true