ceph集群osd nearfull \ full告警处理

本文详细介绍了Ceph集群中near_full和full告警水位的概念,以及如何在控制节点和OSD节点上查看这些水位。同时,文章提供了在遇到near_full和full告警时的应对策略,包括紧急配置步骤,如禁止OSD读写、调整阈值、删除无用数据等。

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

near_full和full是什么?

Ceph集群中会有一个使用容量的告警水位,当使用容量到达near_full告警水位时,会触发集群进行告警,提示管理员此时集群容量已经到达告警水位,如果管理员没有及时进行扩容或者相应的处理,随着数据的增多,当使用容量到达full告警水位时,集群就不能对外提供数据写入服务(包括数据的删除操作)。

如何查看当前集群的near_full及full水位?

集群的near_full及full水位可以通过查询Ceph集群节点的Mon及OSD获取,方法如下(默认认为集群的Mon之间的配置及OSD之间的配置一致):


在控制节点查询:
ceph --show-config | grep full 或者通过以下方法查询
ceph --admin-daemon /run/ceph/ceph-mon.localhost.asok config show | grep full
mon_osd_full_ratio:0.95
mon_osd_nearfull_ratio:0.85


在osd节点查询
ceph --show-config | grep full 或者通过以下方法查询
ceph --admin-daemon /run/ceph/ceph-osd.xx.asok config show | grep full
mon_osd_full_ratio:0.95
mon_osd_nearfull_ratio:0.85


遇到near_full的告警该怎么办?

如果集群已经有near_full的告警了,而且也有扩容的设备,那么就可以考虑进行集群的扩容,包括增加磁盘或者增加存储节点。

遇到full的告警该怎么办?

如果集群已经是full的告警了,此时业务已经无法向集群继续写入数据,而此时如果暂时无磁盘或存储节点可供扩容,应该先通知业务及时做好数据保存工作,并对开始对集群进行紧急配置删除一些无用的数据,恢复集群正常工作状态,待扩容设备到了再进行扩容操作。

紧急配置步骤


1.禁止osd读写
ceph osd pause


2.通知mon修改nearfull及full阈值
ceph tell mon. injectargs "--mon-osd-nearfull-ratio 0.96"
ceph tell mon.
injectargs "--mon-osd-full-ratio 0.97"
ceph tell osd. injectargs "--mon-osd-nearfull-ratio 0.96"
ceph tell osd.
injectargs "--mon-osd-full-ratio 0.97"


3.通知pg修改nearfull及full的阈值
ceph pg set_nearfull_ratio 0.96
ceph pg set_full_fatio 0.97


4.解除osd禁止读写


5.删除无用的数据,


6.更改osd的权值。
ceph osd crush reweight osd.xx x.x


将配置还原
ceph tell mon. injectargs "--mon-osd-nearfull-ratio 0.85"
ceph tell mon.
injectargs "--mon-osd-full-ratio 0.95"
ceph tell osd. injectargs "--mon-osd-nearfull-ratio 0.85"
ceph tell osd.
injectargs "--mon-osd-full-ratio 0.95"

ceph pg set_nearfull_ratio 0.85
ceph pg set_full_fatio 0.95


转载于:https://blog.51cto.com/12150465/2312701

### Ceph 集群架构及工作原理 Ceph 是一种分布式存储系统,其设计目标是提供高可用性和可扩展性。以下是关于 Ceph 的核心组件及其工作原理的详细介绍。 #### 1. 核心组件 Ceph 主要由以下几个关键组件构成: - **Monitor (MON)** Monitor 节点负责维护整个集群的状态信息,包括 OSD 映射、元数据以及成员列表等。它通过 Paxos 协议来保证一致性[^1]。尽管 MON 和 OSD Daemon 进程可以在同一物理节点上运行,但这通常不被推荐,因为这种配置可能增加单点故障的风险并违背分布式的初衷。 - **Object Storage Device (OSD)** OSD 是实际的数据存储单元,它们分布在不同的服务器上以提高冗余度和性能。每个 OSD 不仅保存数据副本还参与计算 CRUSH 算法的结果以便定位对象位置[^2]。 - **Placement Group (PG)** PG 层位于 Object 和 OSD 之间作为中间抽象层存在。引入 PG 提供了两个主要优势:一是允许 object 到 osd 动态映射关系变化而无需频繁调整底层硬件布局;二是减少管理复杂度,使得大规模部署更加容易操作与理解。 - **Metadata Server (MDS)** (对于文件系统接口而言) 如果使用的是 CephFS,则需要 MDS 来处理 POSIX 文件系统的兼容需求如目录结构索引等功能支持。 #### 2. 工作流程概述 当客户端向 Ceph 发起读写请求时,具体过程如下所示: 1. 客户端利用内置或者外部提供的 librados 库发送指令给指定的对象名称。 2. 使用哈希函数将该对象名转换成对应的 placement group ID。 3. 查询最新的 pool map 获取此 pg 所属的一组 primary-secondary osds 列表。 4. 将命令转发至相应的主 osd 上执行进一步的操作比如复制分发机制完成最终持久化落地动作。 此外值得注意的是,在正常情况下所有的决策都依赖于本地缓存的地图版本而非实时查询 mons ,这样可以极大程度降低延迟提升效率。 ```python # 示例 Python API 访问 Ceph 存储池中的某个对象 import rados cluster = rados.Rados(conffile='/etc/ceph/ceph.conf') cluster.connect() ioctx = cluster.open_ioctx('my_pool') data_to_write = b'Hello, Ceph!' ioctx.write_full("test_object", data_to_write) read_data = ioctx.read("test_object") print(read_data.decode()) ioctx.close() cluster.shutdown() ``` 以上代码片段展示了如何通过官方 python binding 对象库访问 ceph 并进行简单的写入读取测试。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值