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
ceph osd pool get
ceph osd pool set
ceph osd pool get
ceph osd pool set
ceph osd pool application enable
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
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
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没有及时清理
解决办法
有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