ceph日常运维管理

一、常见问题

nearfull osd(s) or pool(s) nearfull

此时说明部分osd的存储已经超过阈值,mon会监控ceph集群中OSD空间使用情况。如果要消除WARN,可以修改这两个参数,提高阈值,但是通过实践发现并不能解决问题,可以通过观察osd的数据分布情况来分析原因。

配置文件设置阈值

 "mon_osd_full_ratio": "0.95",
 "mon_osd_nearfull_ratio": "0.85"

自动处理

ceph osd reweight-by-utilization
ceph osd reweight-by-pg 105 cephfs_data(pool_name)

 手动处理

ceph osd reweight osd.2 0.8

全局处理

ceph mgr module ls
ceph mgr module enable balancer
ceph balancer on
ceph balancer mode crush-compat
ceph config-key set "mgr/balancer/max_misplaced": "0.01"

 二、PG 故障状态

PG状态概述 一个PG在它的生命周期的不同时刻可能会处于以下几种状态中:

 

1.Creating(创建中) 在创建POOL时,需要指定PG的数量,此时PG的状态便处于creating,意思是Ceph正在创建PG。

2.Peering(互联中) peering的作用主要是在PG及其副本所在的OSD之间建立互联,并使得OSD之间就这些PG中的object及其元数据达成一致。

3.Active(活跃的) 处于该状态意味着数据已经完好的保存到了主PG及副本PG中,并且Ceph已经完成了peering工作。

4.Clean(整洁的) 当某个PG处于clean状态时,则说明对应的主OSD及副本OSD已经成功互联,并且没有偏离的PG。也意味着Ceph已经将该PG中的对象按照规定的副本数进行了复制操作。5.Degraded(降级的) 当某个PG的副本数未达到规定个数时,该PG便处于degraded状态。

6.在客户端向主OSD写入object的过程,object的副本是由主OSD负责向副本OSD写入的,直到副本OSD在创建object副本完成,并向主OSD发出完成信息前,该PG的状态都会一直处于degraded状态。又或者是某个OSD的状态变成了down,那么该OSD上的所有PG都会被标记为degraded。当Ceph因为某些原因无法找到某个PG内的一个或多个object时,该PG也会被标记为degraded状态。此时客户端不能读写找不到的对象,但是仍然能访问位于该PG内的其他object。

7.Recovering(恢复中) 当某个OSD因为某些原因down了,该OSD内PG的object会落后于它所对应的PG副本。而在该OSD重新up之后,该OSD中的内容必须更新到当前状态,处于此过程中的PG状态便是recovering。

8.Backfilling(回填) 当有新的OSD加入集群时,CRUSH会把现有集群内的部分PG分配给它。这些被重新分配到新OSD的PG状态便处于backfilling。

9.Remapped(重映射) 当负责维护某个PG的acting set变更时,PG需要从原来的acting set迁移至新的acting set。这个过程需要一段时间,所以在此期间,相关PG的状态便会标记为remapped。10.Stale(陈旧的) 默认情况下,OSD守护进程每半秒钟便会向Monitor报告其PG等相关状态,如果某个PG的主OSD所在acting set没能向Monitor发送报告,或者其他的Monitor已经报告该OSD为down时,该PG便会被标记为stale。

三、OSD状态

单个OSD有两组状态需要关注,其中一组使用in/out标记该OSD是否在集群内,另一组使用up/down标记该OSD是否处于运行中状态。两组状态之间并不互斥,换句话说,当一个OSD处于“in”状态时,它仍然可以处于up或down的状态。

1.OSD状态为in且up 这是一个OSD正常的状态,说明该OSD处于集群内,并且运行正常。

2.OSD状态为in且down 此时该OSD尚处于集群中,但是守护进程状态已经不正常,默认在300秒后会被踢出集群,状态进而变为out且down,之后处于该OSD上的PG会迁移至其它OSD。

3.OSD状态为out且up 这种状态一般会出现在新增OSD时,意味着该OSD守护进程正常,但是尚未加入集群。

4.OSD状态为out且down 在该状态下的OSD不在集群内,并且守护进程运行不正常,CRUSH不会再分配PG到该OSD上。

四、集群监控管理

集群整体运行状态

# ceph -s 
cluster:
    id:     8230a918-a0de-4784-9ab8-cd2a2b8671d0
    health: HEALTH_WARN
            application not enabled on 1 pool(s)

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h)
    mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02
    osd: 4 osds: 4 up (since 27h), 4 in (since 19h)
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   6 pools, 96 pgs
    objects: 235 objects, 3.6 KiB
    usage:   4.0 GiB used, 56 GiB / 60 GiB avail
    pgs:     96 active+clean

id:集群IDhealth:集群运行状态,这里有一个警告,说明是有问题,意思是pg数大于pgp数,通常此数值相等。mon:Monitors运行状态。osd:OSDs运行状态。mgr:Managers运行状态。mds:Metadatas运行状态。pools:存储池与PGs的数量。objects:存储对象的数量。usage:存储的理论用量。pgs:PGs的运行状态
$ ceph -w
$ ceph health detail
pg状态
~]$ ceph pg dump
~]$ ceph pg stat

pool状态
~]$ ceph osd pool stats
~]$ ceph osd pool stats 

osd状态
~]$ ceph osd stat
~]$ ceph osd dump
~]$ ceph osd tree
~]$ ceph osd df

Monitor状态和查看仲裁状态
~]$ ceph mon stat
~]$ ceph mon dump
~]$ ceph quorum_status

集群空间用量
~]$ ceph df
~]$ ceph df detail

 五、集群配置管理(临时和全局,服务平滑重启)

有时候需要更改服务的配置,但不想重启服务,或者是临时修改。这时候就可以使用tell和daemon子命令来完成此需求。

查看运行配置
命令格式:
# ceph daemon {daemon-type}.{id} config show 

命令举例:
# ceph daemon osd.0 config show

 

https://mp.weixin.qq.com/s/X59UFaP1UnOb5h21z1aFdA

 

上一篇:激动人心!Ceph新长支持稳定版本Luminous(12.x.x)有那些新功能


下一篇:分布式存储Ceph之PG状态详解