ceph数据重构原理

本文分享自天翼云开发者社区《ceph数据重构原理》,作者:x****n

在分布式存储系统Ceph中,硬盘故障是一种常见问题。为了保证数据安全,当发生硬盘故障后,分布式存储系统会依据算法对故障硬盘上的数据进行数据重构及转储。和一般分布式系统一样的是,Ceph同样使用多副本机制来保证数据的高可靠性(注:EC在实现层面可以理解为副本机制的一种),给定一份数据,Ceph在后台自动存储多份副本(一般使用3个副本),从而使得在硬盘损毁、服务器故障、机柜停电等故障情况下,不会出现数据丢失,甚至数据仍能保持在线。不过在故障发生后,Ceph需要及时做故障恢复,将丢失的数据副本补全,以维系持续的数据高可靠性。

一.PG和PGLog

Ceph中对象数据的维护由PG(Placement Group)负责,PG作为Ceph中最小的数据管理单元,直接管理对象数据,每个OSD都会管理一定数量的PG。客户端对于对象数据的IO请求,会根据对象ID的Hash值均衡分布在各个PG中。PG中维护了一份PGLog,用来记录该PG的数据变化,这些记录会被持久化记录到后端存储中。PGLog中记录了每次操作的数据和PG的版本,每次数据变更操作都会使PG的版本自增,PGLog中默认保存3000条记录,PG会定期触发Trim操作清理多余的PGLog。通常情况下,在同一个PG的不同副本中的PGLog应该是一致的,故障发生后,不同副本的PGLog可能会处于不一致的状态。

二.OSD的故障种类

故障A:一个正常的OSD因为所在的设备发生异常,导致OSD不能正常工作,OSD被标记为down,某个OSD被设置为Down状态只是简单触发其承载的PG通过Peering进行Primary转换(如果需要),以尽快恢复对外业务(此时PG工作在降级状态),后续OSD在设定的时间内,它又可以正常的工作,这时会添加会集群中;

故障B:当某个OSD处于Down状态足够长时间(例如超过600s),才有理由认为对应的OSD已经无法完全恢复,此时出于数据安全性考虑,Monitor会将其进一步设置为Out。

三.OSD的故障处理

故障A:OSD又重新回到PG当中去,这时需要判断一下,如果OSD能够进行增量恢复则进行增量恢复,否则进行全量恢复。(增量恢复:是指恢复OSD出现异常的期间,PG内发生变化的object。全量恢复:是指将PG内的全部object进行恢复)。需要全量恢复的操作叫做backfill操作。需要增量恢复的操作叫做recovery操作。Peering完成后,PG进入Active状态,并根据PG的副本状态将自己标记为Degraded/Undersized状态,在Degraded状态下,PGLog存储的日志数量默认会扩展到10000条记录,提供更多的数据记录便于副本节点上线后的数据恢复。进入Active状态后,PG可用并开始接受数据IO的请求,并根据Peering的信息决定是否进行Recovery和Backfill操作。Primary PG将根据对象的缺失列表进行具体对象的数据拷贝,对于Replica PG缺失的数据Primary 会通过Push操作推送缺失数据,对于Primary PG缺失的数据会通过Pull操作从副本获取缺失数据。在恢复操作过程中,PG会传输完整4M大小的对象。对于无法依靠PGLog进行Recovery的,PG将进行Backfill操作,进行数据的全量拷贝。待各个副本的数据完全同步后,PG被标记为Clean状态,副本数据保持一致,数据恢复完成。下图为PG状态机。 

故障B:这些PG会重新分配副本到其他OSD上。上面的流程的前提故障 OSD 在 PGLog 保存的最大条目数以内加入集群都会利用 PGLog 恢复,那么如果在 N 天之后或者发生了永久故障需要新盘加入集群时,PGLog 就无法起到恢复数据的作用,这时候就需要 Backfill(全量拷贝) 流程介入。Backfill 会将所有数据复制到新上线的 PG,这里的流程跟上述过程基本一致,唯一的差异就是在Primary PG 发现 PGLog 已经不足以恢复数据时,这时候同样分为两种情况:

(1)故障 OSD 拥有 Primary PG,该 PG 在对比 PGLog 后发现需要全量拷贝数据,那么毫无疑问 Primary PG 在复制期间已经无法处理请求,它会发送一个特殊请求给 Monitor 告知自己需要全量复制,需要将 Replicate PG 临时性提升为 Primary,等到自己完成了复制过程才会重新接管 Primary 角色

(2)故障 OSD 拥有 Replicate PG,该 PG 的 Primary 角色会发起 backfill 流程向该 PG 复制数据,由于故障 OSD 是 Replicate 角色,因此不影响正常 IO 的处理。

一个PG中包含的object数量是不限制的,这时会将PG中所有的object进行复制,可能会产生很大的数据复制,因此为了避免产生数据迁移风暴,Monitor通过 一个名为 mon_osd_down_out_subtree_limit 的配置项来限制自动数据迁移的粒度,例如设置为主机,则当某个主机上的OSD全部宕掉时,这些OSD不再会被自动标记为Out,也就无法自动进行数据迁移,从而避免数据迁移风暴。

四.扩容时的数据再均衡

当Ceph OSD添加到Ceph存储集群时,集群映射会使用新的 OSD 进行更新。因为在CRUSH算法计算PG到OSD的映时,OSD_ID是参数之一,新加入的OSD改变了计算的输入,因此会有一部分PG根据CRUSH算法的计算原则进行迁移。下图粗略的展现了数据再均衡过程,假设之前某个PG计算出来straw值(CRUSH算法结果,PG选择OSD中最大的结果进行映射)分别为:straw1,straw2,straw3,增加OSD4之后计算,只有当straw4 > max(straw1, straw2, straw3),这种情况需要将PG数据迁移到OSD4上,会有w4/(w1+w2+w3+w4)的PG移动到osd4上(w为ODS权重),随着PG数量增多,理论上OSD上的PG分布比例为w1:w2:w3:w4。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/771986.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务网关-GateWay-微服务核心组件【分布式微服务笔记05】

服务网关-GateWay-微服务核心组件【分布式微服务笔记05】 服务网关-GateWay 引出GateWay 当我们后端的服务部署在不同的ip和端口上,存在一些问题:前端项目需要维护不同的后端服务ip/访问接口,非常麻烦 如果调用的是后端的集群服务,存在负载均衡问题 没有断言以及过滤机制 因…

ComfyUI插件:IPAdapter_plus(新版)节点

ComfyUI插件:IPAdapter_plus(新版)节点前言:学习ComfyUI是一场持久战,而IPAdapter_plus是常用且便捷有效的风格迁移模型,可以通过提供参考图像去进行图像的生成,比如风格迁移,风格融合,人物脸部模拟等各种工作,请大家重点关注本篇内容,深刻理解节点用法!!祝大家学习…

可以捕捉高动态范围成像的的AR0521SR2C09SURA0-DP2、AR0522SRSM09SURA0-DP2、AR0821CSSC18SMEA0-DPBR图像传感器

推出可以捕捉高动态范围成像的的AR0521SR2C09SURA0-DP2、AR0522SRSM09SURA0-DP2、AR0821CSSC18SMEA0-DPBR图像传感器AR0521SR2C09SURA0-DP2、AR0522SRSM09SURA0-DP2、AR0821CSSC18SMEA0-DPBR图像传感器——明佳达 1、AR0521SR2C09SURA0-DP2是一款 1/2.5 英寸 CMOS 数字图像传感…

波段空单 豆油

首先要破掉7780分型 反弹加空 损新高。

EasyExcel复杂导出 一对多

将数据一条一条查出来 千万不要用一对多查询 最后用方法进行合并public class ExcelFileCellMergeStrategy implements CellWriteHandler{ /** * 合并列的范围索引 */ private int[] mergeColumnIndex; /** * 合并起始行索引 */ private int merge…

DASCTF-Tele

首先提示通话流量,那就直接搜索Tele追踪流量发现是UDP的流,那就过滤打开发现了IPDASCTF{171.88.96.93}

Ryujinx(Switch模拟器) v1.1.1361 汉化版

Ryujinx 是一款免费、开源的 Nintendo Switch 模拟器,它可以在电脑上模拟 Nintendo Switch 游戏机的运行环境,让玩家们能够在 PC 上畅玩 Switch 游戏。Ryujinx 支持大部分 Nintendo Switch 游戏,包括 The Legend of Zelda: Breath of the Wild、Super Mario Odyssey 等知名游…

数业智能心大陆:定制你的专属心理健康方案

在快速变化的社会中,随着人们对自我健康认识的不断加深,心理健康已成为影响生活质量的关键因素,许多成年人在其一生中会遇到心理健康问题。在探索人类心理奥秘的旅程中,我们发现,每个人的心理状态和需求都是独一无二的。面对日益增长的心理健康需求,传统的“一刀切”服务…

在KubeSphere 容器中快速部署使用 GitLab 并构建 DevOps 项目

我们先这次的演练创建一个名为devops的企业空间,同时创建一个名为gitlab的项目供GitLabCE部署使用。首先我们还是要先在devops企业空间中添加GitLab的官方HelmChart仓库,推荐用这种自管理的方式来保障仓库内容是得到及时同步的。通过「应用管理」下面的「应用仓库」来添加如下…

梯度回归三步走

模型训练的每个周期内我们会碰到以下固定的代码逻辑组合:optimizer.no_grad()loss.backward()optimizer.step()他们的作用分别为:optimizer.no_grad(): 清空上一轮训练留下来的梯度值。 每一轮梯度训练过程中,针对模型的参数集,都会生成相应的梯度x.grad, 如果不显式清零,…

一文详解 JuiceFS 读性能:预读、预取、缓存、FUSE 和对象存储

在高性能计算场景中,往往采用全闪存架构和内核态并行文件系统,以满足性能要求。随着数据规模的增加和分布式系统集群规模的增加,全闪存的高成本和内核客户端的运维复杂性成为主要挑战。 JuiceFS,是一款全用户态的云原生分布式文件系统,通过分布式缓存大幅提升 I/O 吞吐量,…

EasyExcel简单导出

@ApiOperation("导出历史上送记录")@PostMapping(value = "/exportSend", produces = "application/octet-stream")public void exportExcel(@RequestBody ExportSendVO sendVO, HttpServletResponse response) throws Exception { // 获取数…