Ceph MDS问题分析

本文分析了Ceph MDS面临的问题,包括客户端缓存问题、服务端内存不释放、inode过多和mds夯住问题。通过查看客户端session、inode数量、尝试mds主从切换等步骤进行深入分析。提出了剔除客户端session、限制内存和回收cache等优化措施,以减轻mds压力并提升服务可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题背景

1.1 客户端缓存问题

$ ceph -s
health HEALTH_WARN
mds0: Client xxx-online00.gz01 failing to respond to cache pressure

官方解释

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

1.2 服务端内存不释放

同上参考1.1 客户端缓存问题

1.3 mds session的inode过多

客户端session的inode太多,导致内存很高,从而也导致主从mds切换加载inode慢,严重影响服务的可用性。

1.4 mds夯住问题或慢查询

  • 客户端搜索遍历查找文件(不可控)
  • session的 inode太大导致mds负载过高
  • 日志级别开的太大,从而导致mds负载高

2. 分析思路

上面的几个问题都是有一定的联系,互相影响的。所以,我们先从已知的方向逐步深入分析问题,从而优化解决问题。

2.1 组件通信流程图

2099201-3500c1b07249921b.png
image.png
  1. Client <–> MDS
    元数据操作和capalities
  2. Client <–> OSD
    数据IO
  3. Client <–> Monitor
    认证,集群map信息等
  4. MDS <–> Monitor
    心跳,集群map信息等
  5. MDS <–> OSD
    元数据IO
  6. Monitor <–> OSD
    心跳,集群map信息等

2.2 查看客户端session

$ ceph --admin-daemon  /var/run/ceph/ceph-mds.ceph-xxxx-osd02.py.asok session ls
[
    {
        "id": 5122511,
        "num_leases": 0,
        "num_caps": 655,
        "state": "open",
        "replay_requests": 0,
        "completed_requests": 1,
        "reconnecting": false,
        "inst": "client.5122511 192.168.1.2:0\/2026289820",
        "client_metadata": {
            "ceph_sha1": "b1e0532418e4631af01acbc0cedd426f1905f4af",
            "ceph_version": "ceph version 0.94.10 (b1e0532418e4631af01acbc0cedd426f1905f4af)",
            "entity_id": "log_xxx_cephfs",
            "hostname": "ceph-test-osd02",
            "mount_point": "\/mnt\/log"
        }
    }
]

说明:

  • id:client唯一id
  • num_caps:client获取的caps
  • inst:client端的ip和端口链接信息
  • ceph_version:client端的ceph-fuse版本,若使用kernel client,则为kernel_version
  • hostname:client端的主机名
  • mount_point:client在主机上对应的mount point
  • pid:client端ceph-fuse进程的pid

2.3 查看客户端的inode数量

跟踪代码发现session里面的num_caps就是统计的客户端的inode数量, 大概统计了下已经打开的inode数量在400w左右。


2099201-f527b758968dc069.png
image.png

总结:
可以查看客户端的session信息,包含host、mount、inode等信息

Ceph是一个开源的分布式存储系统,它提供了可扩展的对象存储、块存储和文件系统。Ceph MDS(Metadata Server)是Ceph文件系统(CephFS)的组件之一,负责管理文件系统的元数据。 Ceph MDS软件包包含了一组用于构建和管理Ceph MDS的工具和库。它提供了以下功能: 1. 元数据服务器(MDS):Ceph MDS软件包中的主要组件是元数据服务器,它负责管理Ceph文件系统的元数据。MDS将文件系统的目录结构、文件属性和权限等信息存储在内存中,并提供对文件系统的元数据操作接口。 2. 元数据池(Metadata Pool):Ceph MDS使用元数据池来存储文件系统的元数据。元数据池是一个特殊的Ceph对象存储池,用于存储文件和目录的元数据信息。 3. 元数据缓存(Metadata Cache):为了提高性能,Ceph MDS使用元数据缓存来缓存最常访问的文件和目录的元数据。元数据缓存可以减少对元数据服务器的访问次数,加快文件系统的访问速度。 4. 元数据日志(Metadata Journal):Ceph MDS使用元数据日志来记录文件系统的元数据变更操作。元数据日志可以用于恢复文件系统的一致性,并提供了高可靠性和高性能的元数据操作。 5. 元数据负载均衡(Metadata Load Balancing):Ceph MDS使用负载均衡算法来平衡不同元数据服务器之间的负载,确保文件系统的高可用性和性能。 总结来说,Ceph MDS软件包提供了构建和管理Ceph文件系统的必要组件和功能,包括元数据服务器、元数据池、元数据缓存、元数据日志和负载均衡等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值