ceph的配额功能分析

本文分析ceph的10.X版本的配额功能。主要以存储池配额为例,分析一下配额功能的完备性。

现状

功能和配置:

通过设置存储池的最大对象数和最大字节数,当达到限额时,则不允许写入。

ceph osd pool set-quota <poolname> max_objects|max_bytes <val>

ceph osd pool get-quota <poolname> 

原理和实现:

通过定时检测,条件满足时通过设置osdmap的CEPH_OSDMAP_FULL标志来共享池空间满的信息。

在osd的prepare_transaction处判断标志,并根据需要返回错误码。

对于配额功能一般返回-EDQUOT或-ENOSPC错误码

对于暂时无法处理需要丢弃的操作,则返回-EAGAIN错误码。

问题分析:

从实现上可以看出,由于客户端和osd缺乏完备的通信机制,对于存储池满的情况,ceph只是简单的放在了服务后端osd层面进行处理并返回预期的EDQUOT错误码。

但是这样处理有一些问题。比如在ceph kclient中,存在使用页面缓存的情况,用户的io先写入缓存,再异步通过系统自动sync向osd发起同步请求。这时如果是pool full,osd如果返回eagain错误码,则会造成不断重试,并造成io阻塞。如果返回edquot,则数据实质上没有写入成功,但是用户层面的操作却是成功的,造成数据不一致和数据丢失。


优化

从问题分析得出,可以把判断配额限制的处理前移到客户端,由客户端收集满足配额条件,比如存储池配额满的情况,当配额条件触发后,返回EDQUOT错误码。

同时,对于一些不会造成系统重大影响的软性配额,osd层面应该适当放开pool full的检测,允许业务正常处理,这样当一些客户端的异步io请求触发时,不会被丢弃掉。这样的错误会导致配额功能有一定的误差,但是在检测周期内,一般也是允许的,没有什么大影响。



Ceph是一个可靠的、数据自动重均衡、自动恢复的SDS(软件定义存储)分布式存储系统,功能主要有三大块:块存储、对象存储、文件系统。Ceph不但是提供了统一存储,并且同时还充分利用了客户端的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。不管是私有云还是公有云,随着云架构的发展,Ceph 成为了OpenStack、Proxmox标配的后端存储,不光如此,就连目前最火的容器编排 Kubernetes 持久存储也都支持 Ceph ,让 Ceph 成为当前主流的存储系统,而对 Ceph 存储的学习也就变的刻不容缓。 该课程属于比较基础的 Ceph 存储课程,旨在让大家能快速上手对 Ceph 集群的部署以及操作,主要讲解以下几个方面: 1.     架构的介绍2.     集群的多种部署方式3.     块存储部署,客户端使用及快照、克隆和镜像4.     对象存储的部署及简单使用5.     Ceph FS 文件系统的部署、客户端使用及导出为NFS6.     集群的操作和管理,包括服务,集群扩展,缩减和集群维护7.     Ceph 基础知识的介绍,包括集群map,PG和身份验证8.     Ceph 集群的监控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值