第六篇:Ceph集群常见问题处理方法

1 cephfs客户端挂载失败

1.1 kernel client挂载失败

即执行下述挂载命令

sudo mount -t ceph IP1,IP2,IP3:6789:/ /mnt/mycephfs

出现的错误。

  1. wrong fs type

    • mount: wrong fs type, bad option, bad superblock on 11.154.211.212:6789:/,
             missing codepage or helper program, or other error
      
             In some cases useful info is found in syslog - try
             dmesg | tail or so.
      

      这种情况下说明系统缺少ceph驱动,解决方法是安装ceph。

      sudo yum install ceph
      
  2. mount error 5 = Input/output error

    这种错误通常是ceph客户端的Linux内核版本跟ceph的版本不一致导致的。

    集群使用的ceph版本是12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable),通常情况下要求CentOS Linux内核的版本是4.0及以上。

1.2 解决方法

  • 升级客户端系统内核到更高版本以匹配ceph版本

  • 使用ceph-fuse进行挂载
    安装ceph-fuse

    sudo yum install ceph-fuse
    sudo ceph-fuse -m IP1:6789 /mnt/mycephfs
    

2 ceph集群WARN状态

2.1 MDSs report oversized cache ceph

问题原因:

MDS在修剪缓存时失败,导致缓存空间超过了管理员设置的阈值。如果MDS缓存变得太大,守护程序可能耗尽可用内存并崩溃。默认情况下,ceph集群将缓存大小(mds_cache_memory_limit)设置为1GB,阈值(mds_health_cache_threshold)设为1.5,即:当缓存空间大于1.5倍mds_cache_memory_limit时就会导致这个警告出现。

解决方法:

需要根据集群的实际情况进行合理配置mds_cache_memory_limit的大小

free -mh
              total        used        free      shared  buff/cache   available
Mem:           251G         30G         15G         66M        205G        199G
Swap:          2.0G          0B        2.0G

可以看到mds所在的主机内存空间为251G,可用空间有199G,这个时候可根据具体情况设置mds_cache_memory_limit。

操作命令:

sudo ceph daemon mds.`hostname` config get mds_cache_memory_limit
sudo ceph daemon mds.`hostname` config set mds_cache_memory_limit 21474836480

2.2 failing to respond to cache pressure

问题原因:

官网给出的解释是:

客户端有各自的元数据缓存,客户端缓存中的条目(比如索引节点)也会存在于 MDS 缓存中,所以当 MDS 需要削减其缓存时(保持在 mds_cache_size 以下),它也会发消息给客户端让它们削减自己的缓存。如果有客户端没响应或者有缺陷,就会妨碍 MDS 将缓存保持在 mds_cache_size 以下, MDS 就有可能耗尽内存而后崩溃。如果某个客户端的响应时间超过了 mds_recall_state_timeout (默认为 60s ),这条消息就会出现。

  1. 查看客户端session:

    sudo ceph daemon mds.`hostname` session ls
    
  2. 查看inode数量

    跟踪代码发现num_caps就是统计的客户端的inode数量, 大概统计了下已经打开的inode数量。

解决方法:

(由于inode都缓存在client端,所以必须的想办法释放inode)

  • ** 方案1:evict client(主动踢出有问题的客户端)**
    必须在mds主进程机器上进行操作, 374158为客户端ID
    sudo ceph daemon mds.`hostname` session evict 374158 
    
    通过此种方式剔除客户端之后,还需要将其从ceph blacklist中释放
    ceph osd blacklist ls
    ceph osd blacklist rm client_name
    
    然后去客户端机器重新挂载,如果挂载失败,需要reboot机器
  • 方案2:client remount(有问题的客户端重新mount挂载)
    登录客户端机器,/gruntdata/test_ceph 为客户端挂载目录
sudo umount /mnt/mycephfs -l
  • **方案3:drop_cache(官方提供的mds 主动删除cache,补丁在review过程中个,目标版本是ceph-14.0.0) **

2.3 nearfull osd(s) or pool(s) nearfull

问题原因:

此时说明部分osd的存储已经超过阈值,mon会监控ceph集群中OSD空间使用情况,首先时有两个参数

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

如果要消除WARN,可以修改这两个参数,提高阈值,但是通过实践发现并不能解决问题,可以通过观察osd的数据分布情况来分析原因,使用

ceph osd df
ceph pg dump|grep '^4\.'|awk -F ' ' '{print $1, $15}'|awk -F "[ ]|[[]|[,]|[]]" '{print $3, $4}'|tr -s ' ' '\n'|sort|uniq -c|sort -n

第二条命令是查看pool id 为4的osd pg分布情况
可以看到每个osd的数据分布情况,ceph的CRUSH算法并不能完全实现数据的均衡分布,此时需要通过手动调整参数reweight进行数据均衡,解决方法如下:

解决方法:

单个osd处理

1 自动处理

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

2 手动处理
将osd 2的reweight值设置为0.8

ceph osd reweight osd.2 0.8

全局处理

1 扩容
2 rebalancer 插件

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"

3 ceph集群error状态

3.1 Mon节点启动失败

错误描述:monitor data filesystem reached concerning levels of available storage space
you may adjust mon data avail crit to a lower value to make this go away (default: 5%)

这里涉及到一个参数:mon-data-avail-crit,这个参数用来监控mon节点的数据存储,ceph mon节点数据存储default情况是在目录: /var/lib/ceph目录下,如果该目录的使用率超过95%,就会导致Mon进程被kill掉。

解决方法:

清理 /var/lib/这个目录的数据,或者设置参数:mon-data-avail-crit

你可能感兴趣的:(分布式对象存储框架:Ceph,ceph,分布式存储,cephfs)