Ceph存储系统Scrub机制分析

Ceph存储系统Scrub机制分析2018 年 11 月 12 日 Linux 基金会在德国柏林的 CephDay 上正式宣布成立 Ceph 基金会 来支持 Ceph 开源项目 Ceph 基金会接受 Linux 基金会的管理

640?wx_fmt=jpeg


640?wx_fmt=gif&wxfrom=5&wx_lazy=1

2018年11月12日,Linux基金会在德国柏林的“Ceph Day”上正式宣布成立“Ceph基金会”来支持Ceph开源项目。Ceph基金会接受Linux基金会的管理,它的成立将为Ceph社区的合作和成长提供一个中立的机构。

理事会由所有高级成员,普通成员代表,准成员代表和Ceph领导团队代表组成,董事会的主要职责在于:

  • 建立并批准用于支持Ceph项目的年度预算
  • 建立特设委员会以满足项目的当前需求
  • 协调外展或营销
  • 定期开会讨论基金会活动,Ceph项目的现状以及整体项目战略
  • 在董事会面前对任何决定或事项进行投票

Ceph基金会董事会不对Ceph的技术治理负责,也没有任何直接控制权。开发和工程活动通过传统的开源流程进行管理,并由Ceph领导团队监督。董事会主要成员如下:

640?wx_fmt=jpeg

创始顶级会员主要包括: Amihan,Canonical,中国移动,DigitalOcean,Intel,ProphetStor Data Services,OVH,Red Hat,SoftIron,SUSE,Western Digital,XSKY和ZTE

640?wx_fmt=jpeg

640?wx_fmt=png

普通会员和准会员包括ARM,平安科技,小桔科技(滴滴出行), 中铁信弘远   ,Ambedded Technology,Croit GmbH,EasyStack,Intelligent Systems Services,Catalyst Cloud,QCT,欧洲粒子物理研究所,英国科学与技术设施委员会,莫纳什大学,希腊GRNET机构,南非射电天文观测台(SARAO),加州大学圣克鲁兹分校开放源码软件研究中心(CROSS)等

Ceph作为最流行的分布式软件定义存储系统,目前服务于各个行业的客户,包括金融机构(如Bloomberg,Fidelity),云服务提供商(如Rackspace,Linode),学术和政府机构(如Massachusetts Open Cloud),电信基础设施提供商(如Deutsche Telekom),汽车制造商(宝马),软件解决方案提供商(如SAP,Salesforce)等等

Ceph基金会的成立将对Ceph技术发展和社区壮大起着积极作用,目前有很多企业存储系统都是基于开源Ceph优化而来。只是国内,市场上就已经涌现大量Ceph系产品,如H3C的ONEstor块和对象、UniStor文件系统,中兴CloveStorage,衫岩SandStone,XYSK(星辰天合) X-CBS、X-EBS和X-EOS,浪潮AS13000系列等

关于Ceph架构,数据分布和特性对比(参考“详解Ceph数据是如何布局”),笔者在前期的文章中已经做了详细分享。今天就跟大家一起讨论下Ceph的可靠性恢复原理: Scrub机制

Scrub默认策略是每天到每周(如果集群负荷大周期就是一周,如果集群负荷小周期就是一天)进行一次,时间区域默认为全天(0时-24时),Deep-Scrub默认策略是每周一次。


Ceph进行数据读写时并不会增加校验数据来保证数据的正确性(类似ECC、CheckSum等),只能通过内部的Scrub机制来校验数据。

Scrub流程是以PG为单位定期触发的,由该 PG 的Master 角色所在 OSD 启动;每次Scrub会扫描一个PG内的部分对象,校验期间对象的数据是不允许修改。

校验信息包括每个对象的元信息如大小、扩展属性的所有键和历史版本信息等,在Ceph 中被称为 ScrubMap。发起者会比较多个ScrubMap并发现不一致的对象,不一致对象会被收集最后发送给 Monitor,由用户手工发起修复。

Ceph允许通过Deep Scrub模式来全量比较对象信息来期望发现Ceph 本身或者文件系统问题,这通常会带来较大的 IO 负担,较少在生产环境使用。

当然,Ceph Scrub机制存在的问题。在发现不一致对象后,缺少策略来自动矫正错误,比如如果多数副本达成一致,那么少数副本对象会被同化。Scrub 机制并不能及时解决存储系统端到端正确的问题,很有可能上层应用早已经读到错误数据,下面一起来看看Scrub的工作流程:

 

① OSD 会以 PG 为粒度触发 Scrub流程,触发的频率可以通过选项指定,而一个PG的Scrub启动都是由该 PG 的 Master 角色所在OSD启动。

② 一个PG在普通的环境下会包含几千个到数十万个不等的对象,因为Scrub流程需要提取对象的校验信息然后跟其他副本的校验信息对比,这期间被校验对象的数据是不能被修改的。因此一个PG的Scrub流程每次会启动小部分的对象校验,Ceph 会以每个对象名的哈希值的部分作为提取因子,每次启动对象校验会找到符合本次哈希值的对象,然后进行比较。这也是 Ceph称其为Chunky Scrub的原因。

③ 在找到待校验对象集后,发起者需要发出请求来锁定其他副本的这部分对象集。因为每个对象的Master和Replicate节点在实际写入到底层存储引擎的时间会出现一定的差异。这时候,待校验对象集的发起者会附带一个版本发送给其他副本,直到这些副本节点与主节点同步到相同版本。

④ 在确定待校验对象集在不同节点都处于相同版本后,发起者会要求所有节点都开始计算这个对象集的校验信息并反馈给发起者。

⑤ 该校验信息包括每个对象的元信息如大小、扩展属性的所有键和历史版本信息等等,在Ceph 中被称为 ScrubMap。

⑥ 发起者会比较多个ScrubMap并发现不一致的对象,不一致对象会被收集最后发送给 Monitor,最后用户可以通过Monitor了解Scrub的结果信息。

另外,当用户在发现出现不一致的对象时,可以通过 “ceph pgrepair [pg_id]” 的方式来启动修复进程,目前的修复仅仅会将主节点的对象全量复制到副本节点,因此目前要求用户手工确认主节点的对象是“正确副本”。此外,Ceph允许Deep Scrub模式来全量比较对象信息来期望发现 Ceph 本身或者文件系统问题,这通常会带来较大的IO负担,因此在实际生产环境中很难达到预期效果。

 

通过上述Scrub流程,大家也会发现目前的 Scrub机制还存在以下2个问题:


① 在发现不一致对象后,缺少策略来自动矫正错误,比如如果多数副本达成一致,那么少数副本对象会被同化。

② Scrub 机制并不能及时解决存储系统端到端正确的问题,很有可能上层应用早已经读到错误数据。

对于第一个问题,目前Ceph已经有Blueprint来加强Scrub的修复能力,用户启动Repair时会启动多数副本一致的策略来替代目前的主副本同步策略。

对于第二个问题,传统端到端解决方案会更多采用固定数据块附加校验数据的“端到端校验”方案,但是 Ceph 因为并不是存储设备空间实际的管理和分配者,它依赖于文件系统来实现存储空间的管理,如果采用对象校验的方式会严重损耗性能。

因此在从文件系统到设备的校验需要依赖于文件系统,而Ceph包括客户端和服务器端的对象正确性校验只能更多的依赖于ReadVerify机制,在涉及数据迁移时需要同步的比较不同副本对象的信息来保证正确性。目前的异步方式会允许期间发生错误数据返回的可能性。

本文分享就到这里了,请通过原文链接获取电子书材料,或者请识别小程序查看更多内容。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

推荐阅读:

温馨提示:

请搜索“ICT_Architect”“扫一扫”二维码关注公众号,点击原文链接获取更多技术文章

640?wx_fmt=png&wxfrom=5&wx_lazy=1

求知若渴 虚心若愚

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225860.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:23
下一篇 2026年3月17日 上午8:23


相关推荐

  • Apache .htaccess规则RewriteCond 和RewriteRule-实操解释说明

    Apache .htaccess规则RewriteCond 和RewriteRule-实操解释说明如果你在看的时候有些迷惑,或许你需要配合下面这篇文章一起看《Apache.htaccess规则说明》https://blog.csdn.net/cplvfx/article/details/94725685该文章转自https://justcoding.iteye.com/blog/547384RewriteCond重写规则的条件RewriteCondSyntax:…

    2022年5月18日
    37
  • 前端第二章:8.HTML超链接代码写法;id属性

    前端第二章:8.HTML超链接代码写法;id属性一、超链接介绍0.超链接是行内元素,但是可以放块元素1.从一个页面跳转到另一个页面2.或者跳转到当前页面的其他位置3.href属性的值可以是外部网站,也可以是同一个目录下的地址文件,如xxx.html二、超链接·代码1.超链接写法:<ahref=”你想要跳转到的网址”>超链接的字样</a>2.示例(外部网站和同一个目录下的html都可以写进href名值对结构中):3.浏览器内显示(紫色字样表示你最近访问过,蓝色代表没有访问过):4.

    2022年7月12日
    18
  • pycharm中如何导入库_pycharm怎么加入库

    pycharm中如何导入库_pycharm怎么加入库两种方法:1.搜索添加列表中是已经存在的库,若需要添加库,点击+搜索待库安装完成,即可使用2.利用终端命令输入代码,回车,即可完成(numpy库为例,我的是已经存在了)

    2022年8月25日
    8
  • windows 2008文件服务器审计

    windows 2008文件服务器审计windows2008或者windows2008r2,系统做域内的文件服务器,能否做到谁删除某个共享出来的文件夹或者文件的操作审计?审计级别能做到怎么样一个程度?回答:依据您的问题您想知道Windows2008文件服务器的审计相关。依据我的经验,这个要分成两种情况:1.在远端访问,就是通过网络路径访问;2.在本地上本地访问共享文件,就是在创建的机器上访问;远端访问访问共享文件…

    2022年6月4日
    83
  • 前端基础之CSS_1[通俗易懂]

    前端基础之CSS_1[通俗易懂]摘要CSS(层叠样式表)的三种设置方法基本选择器组合选择器属性选择器分组与嵌套伪类选择器伪元素选择器选择器的优先级一些样式的设置(字体、文本、背景、边框)display属性设置01.CSS(层叠样式表)的三种设置方法CSS又名层叠样式表,它的作用就是给H…

    2022年6月24日
    23
  • 数据结构与算法栈的详解_数据结构怎么判断出栈的顺序

    数据结构与算法栈的详解_数据结构怎么判断出栈的顺序一、什么是栈栈(stack)是一种先进后出的有序列表,其中的元素只能在线性表的同一端进出,允许元素插入和删除的一端被称为栈顶(top),固定的另一端被称为栈底(button)。二、数组简单实现栈

    2022年8月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号