Ceph的Crush算法思想

[置顶]Ceph源码解析:CRUSH算法 1、简介      随着大规模分布式存储系统(PB级的数据和成百上千台存储设备)的出现。这些系统必须平衡的分布数据和负载(提高资源利用率),最大化系统的性能,并要处理系统的扩展和硬件失效。ceph设计了CRUSH(一个可扩展的伪随机数据分布算法),用在分布式对象存储系统上,可以有效映射数据对象到存储设备上(不需要中心设备)。因为大型系统的结构式动态变化的,CRUSH能够处理存储设备的添加和移除, 阅读详情

Ceph 的 CRUSH(Controlled Replication Under Scalable Hashing)算法 是一种去中心化的数据分布算法,用于确定对象在 OSD(Object Storage Device)上的存储位置。它通过伪随机计算实现数据的均匀分布,同时支持故障域隔离、动态扩展和负载均衡。以下是 CRUSH 算法的核心工作原理:


1. CRUSH 算法的核心目标

CRUSH 算法的主要目标包括:

  • 去中心化:无需元数据服务器,客户端可直接计算数据位置。
  • 负载均衡:数据均匀分布在 OSD 上,避免热点问题。
  • 故障域感知:确保数据副本分布在不同的故障域(如不同主机、机架、机房)。
  • 动态扩展:新增或移除 OSD 时,最小化数据迁移量。

2. CRUSH 算法的输入与输出

  • 输入:
    • 对象 ID(如文件名或哈希值)。
    • PG ID(Placement Group,归置组)。
    • CRUSH Map(描述集群拓扑结构,包括 OSD、Bucket 层级)。
    • Placement Rule(数据分布规则,如副本数、故障域策略)。
  • 输出:
    • 一组 OSD(存储对象的设备列表,如 [osd.1, osd.5, osd.9])。

3. CRUSH 算法的关键步骤

CRUSH 算法的工作流程可以分为两个主要阶段:

(1) 对象 → PG 映射

  • 每个对象通过哈希计算映射到某个 PG:
    PG_ID=Hash(Object_ID) % pg_num \text{PG\_ID} = \text{Hash(Object\_ID)} \ \% \ \text{pg\_num} PG_ID=Hash(Object_ID) % pg_num
    • pg_num 是存储池的 PG 数量。
    • 相同 Object_ID 始终映射到同一个 PG。

(2) PG → OSD 映射

  • CRUSH 算法计算 PG 应该存储在哪些 OSD 上:
    CRUSH(PG_ID,CRUSH Map,Rule)→[OSD1,OSD2,OSD3] \text{CRUSH}(PG\_ID, \text{CRUSH Map}, \text{Rule}) \rightarrow [OSD_1, OSD_2, OSD_3] CRUSH(PG_ID,CRUSH Map,Rule)→[OSD1​,OSD2​,OSD3​]
    • 采用 伪随机选择,确保相同 PG 始终映射到相同 OSD 集合。
    • 考虑 OSD 权重(容量越大,被选中的概率越高)。
    • 按照 Placement Rule 选择不同的故障域(如 host、rack、row)。

4. CRUSH Map 的层级结构

CRUSH Map 定义了 OSD 的物理拓扑,通常采用树状结构:

  • 叶子节点:OSD(如 osd.1、osd.2)。
  • Bucket 节点:逻辑分组(如 host、rack、datacenter)。
  • Root 节点:整个集群的入口点。

示例 CRUSH Map 结构:

root default
  ├── host node1
  │   ├── osd.1 (weight 1.0)
  │   └── osd.2 (weight 1.0)
  ├── host node2
  │   ├── osd.3 (weight 1.0)
  │   └── osd.4 (weight 1.0)
  └── rack rack1
      ├── host node3
      │   ├── osd.5 (weight 1.0)
      │   └── osd.6 (weight 1.0)
      └── host node4
          ├── osd.7 (weight 1.0)
          └── osd.8 (weight 1.0)

5. Placement Rule(放置规则)

CRUSH Rule 定义了数据如何选择 OSD,典型规则如下:

rule replicated_rule {
    ruleset 0
    type replicated
    min_size 1
    max_size 10
    step take default           # 从 root bucket 开始
    step chooseleaf firstn 0 type host  # 选择不同 host 的 OSD
    step emit
}
  • step take:从哪个 Bucket 开始选择(如 root)。
  • step chooseleaf:选择 OSD 的策略(如 firstn 选择多个副本)。
  • step emit:结束选择并返回 OSD 列表。

6. CRUSH 的伪随机选择机制

CRUSH 使用 Straw2 算法 选择 OSD:

  1. 计算每个 OSD 的“签长”:
    straw=(CRUSH_HASH(PG_ID,OSD_ID,r) & 0xFFFF)×weight \text{straw} = (\text{CRUSH\_HASH}(PG\_ID, OSD\_ID, r) \ \& \ 0xFFFF) \times \text{weight} straw=(CRUSH_HASH(PG_ID,OSD_ID,r) & 0xFFFF)×weight
    • r 是副本序号(用于多副本场景)。
    • weight 是 OSD 的权重(如 1.0 代表 1TB 磁盘)。
  2. 选择 straw 值最大的 OSD:
    • 权重越高的 OSD 被选中的概率越大。

7. CRUSH 算法的优势

  • 去中心化:无需全局元数据,客户端可独立计算数据位置。
  • 动态扩展:新增 OSD 时,数据自动均衡,迁移量最小化。
  • 故障域隔离:副本可分布在不同的机架、主机,提高容灾能力。
  • 权重感知:大容量 OSD 存储更多数据,实现负载均衡。

8. 总结

CRUSH 算法通过 伪随机计算 + 层级化拓扑结构 + 规则引擎,实现高效、灵活的数据分布。其核心流程为:

  1. 对象 → PG(哈希取模)。
  2. PG → OSD(CRUSH 计算,考虑权重、故障域)。
  3. 副本策略(按 Rule 选择多个 OSD)。

默认 CRUSH Map 适用于大多数场景,但 大规模或异构集群可能需要手动优化(如调整权重、自定义 Rule)。

ceph crush算法分析 数据分布算法 (1)集中式的元数据查询,如hdfs (2)分布式算法,例如一致性哈希算法,如crush 算法步骤: 1、pool_id+hash(object_id)得到pg_id 2、针对每一个osd,通过同样的常量r,CRUSH_HASH(PG_ID, OSD_ID, r) 得出一个不同的随机数,然后使用自己的随机数与osd的weight相乘,得到draw,选出其中最大的draw值作为第一个o... 阅读详情

相关推荐

ceph osdmap crush 分析

1 maps 更新1.1 更新规则 Because cluster map changes may be frequent, as in a very large system where OSDs failures and recoveries are the norm, updates are distributed as incremental maps(增量更新): small mes

周健华的专栏 1万+

CRUSH 算法

1. 简介 CRUSH 算法能够根据每个存储设备的权重来分布数据对象,使得这个分布近似于均匀分布。 数据分布是由具有层级结构的 cluster map 来控制的,其表示了可用的存储资源,以及一些逻辑元素。 数据分布策略是根据放置规则来定义的,其指定了要从集群中选出多少个存储设备以存储数据副本,以及数据副本的存放限制(如,故障域隔离)。 输入一个整数 xxx(通常是对象的 ID),CRUSH 算法会输出一个大小为 nnn 的有序列表 R→\mathop{R} \limits ^{\righta

gaoZhuanMing的博客 3446

Ceph的CRUSH算法原理

Ceph的CRUSH算法原理

crush算法

参考资料:《Ceph 设计原理与实现》 CRUSH(Controlled Replication Under Scalable Hashing),是一种基于哈希的数据分布算法。以数据唯一标识符、当前存储集群的拓扑机构以及数据备份策略作为 CRUSH 输入,可以随时随地通过计算获取数据所在的底层存储设备位置并直接与其通信,从而避免查表操作,实现去中心化和高度并发。 1 straw 与 starw2 straw 算法将所有元素比作吸管,针对指定输入,为每个元素随机计算一个长度,最后从中选择长度最长的那个元素

DeamonXiao的博客 2353

一文读懂水利无人机AI识别算法,概念、需求、解决方案

复亚智能的水利无人机AI识别算法通过先进的技术手段,为水利管理提供了高效、精准的解决方案。随着技术的不断进步和应用的深入,复亚智能的解决方案将在更多水利场景中发挥重要作用,助力智慧水利管理的全面升级。该系统通过搭载在无人机上的传感器和摄像头,结合先进的AI识别算法,实现对河道淤积、漂浮物、船只和水质污染等问题的自动检测和监控。基于大量实飞采集的数据,复亚智能的算法经过严格的训练,能够准确识别各种水利问题。复亚智能的系统具有高度的开放性和兼容性,能够与第三方平台和算法无缝对接,满足不同客户的多样化需求。

foiadrone的博客 1197

Android 13 Hotseat定制化修改——001 hotseat布局方向

一.背景由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher...

Java_fenxiang的博客 1102

CRUSH算法介绍

CRUSH数据分布算法的全称是:Controlled, Scalable, Decentralized Placement of Replicated Data. 开源的分布式存储Ceph采用CRUSH数据分布算法以达到以下几个要求: 1. 数据分布均衡 2. 负载均衡 3. 灵活应对集群扩容和缩容:无论是添加或删除设备,都能最小化数据迁移 4. 支持大规模集群,消除因几种存储元数据而可能的...

FinixLei的专栏 (https://github.com/FinixLei) 8519

ArcGISPro应用指南:ArcGISPro制图全流程详解

本文介绍了基于ArcGIS Pro的地图制作基本流程,旨在帮助读者快速掌握从数据加载到地图输出的完整制图操作。文章首先简要概述了GIS技术在当今数据驱动时代的重要作用,并引出ArcGIS Pro作为专业GIS平台的优势与应用价值。随后,内容围绕地图制作的核心步骤展开,包括数据加载、布局创建、地图范围设置以及各类地图要素(如指北针、比例尺、图例、图名)的插入与样式调整。此外,还介绍了如何通过添加图形、文本及动态元素增强地图表达效果,并最终完成地图导出设置与文件输出格式的选择。

weixin_45812624的博客 1358

分布式存储Ceph中的CRUSH算法

CRUSH算法是一种基于hash的数据分布算法,在Ceph集群中以cluster map作为输入将数据映射到所有的存储设备之间。本文简单介绍Ceph中的CRUSH算法原理。

牧羊人的方向 5926

01-FreeSWITCH 的安装、部署、配置以及可能遇到的问题和解决方法

一文让您了解从FreeSWITCH 的安装、部署、配置、可能遇到的问题及解决方法。一切从实际项目出发,以工程应用为目的。

秋风的博客 2127

SQL 通过sum() over(order by ,rownum)实现财务现金日记账实例

SELECT 类型,to_char(发生日期,'yyyy-MM-dd') 发生日期,期初余额,借方金额,贷方金额, (CASE WHEN 借方金额>0 THEN '借' WHEN 贷方金额>0 THEN '贷' ELSE '平' END) 方向, sum(收支金额) over(order by 发生日期, rownum) 余额 FROM( SELECT LX 类型,账户,账号,摘要,发生日期,单据ID, ...

qq_41451794的博客 1023

【ceph】CRUSH算法的原理与实现|File->Object->PG->OSD的映射方法

https://zhuanlan.zhihu.com/p/59317425 0. 前言 本文主要面向对Ceph及分布式系统有一定了解基础的同学;新入坑的读者可以先从Ceph文档官网获取基本信息。 1. 背景 在分布式存储系统中,数据的位置存放规则一直是研究的热门话题之一。一般来说,系统中所有角色(Clients、Servers)需要有一个统一的数据寻址算法Locator,满足: Locator(ID) -> [Device_1, Device_2, Device_3, ...] 其中输

我的笔记本 3641

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 188

Ceph的架构(一)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33778544的博客 170

告别 DEFINE VIEW:CDS View Entity 迁移全景实战(报表迁移 + ADT 向导 + 避坑清单)

CDS迁移的关键要点与策略 CDS DDIC-based View已被标记为废弃,迁移到CDS View Entity成为必要。迁移面临的主要挑战包括激活成本、命名约束和依赖风险。ABAP 7.57及以上版本必须优先处理,否则将积累技术债务。 迁移方式主要有两种: 报表路线:适合渐进式迁移的On-Premise项目 ADT向导:适合云环境批量迁移 关键注意事项: 必须提前检查SQL View依赖关系 金额/数量字段需要显式引用单位/货币字段 建议按使用场景分批迁移 最佳实践是结合报表进行系统盘点,再通过AD

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 208

MSBlock赋能C2f模块,让目标检测在轻量化与精度间双向突破

在文件夹下新建,将上述MSBlock和C2f_MS类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义模块。

LXY_LOVE36的博客 143

ceph课程(一)ceph组件与原理

分布式存储ceph 一、ceph介绍 1.1、ceph是什么 ceph一个统一的、分布式的存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。 “统一的”:意味着我们可以仅凭ceph这一套存储系统,同时提供对象存储、块存储和文件系统存储三种功能,这极大地简化了不同应用需求下的部署和运维工作。 “分布式”:ceph实现了真正的去中心化,理论上可以无限扩展集群系统的规模 致敬作者: Ceph项目最早起源于Sage就读博士期间的工作(最早的成果手2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目

givenchy_yzl的博客 2476

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Ceph对象存储(一)

一、Ceph RADOS组成 1、OSDs,负责存储所有的Objects数据; 2、Monitor,保存集群中所有OSDs状态信息,以及负责管理Cluster Map,其中Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发。多Monitor时,使用paxos算法来选择leader,避免单点故障; 二、RADOS 系统逻辑结构 ...

smart9527_zc的博客 1746

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Ceph学习之Crush算法—— 整体介绍

这篇博文主要回答三个问题:什么是CRUSH?它能做什么?它是怎么工作的?

scaleqiao的专栏 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CEPH CRUSH 算法源码分析 原文CEPH CRUSH algorithm source code analysis

原文地址 CEPH CRUSH algorithm source code analysis http://www.shalandis.com/original/2016/05/19/CEPH-CRUSH-algorithm-source-code-analysis/ 文章比较深入的写了CRUSH算法的原理和过程.通过调试深入的介绍了CRUSH计算的过程.文章中添加了些内容.写在前面读本文前,

周健华的专栏 1万+

分布式存储ceph:CRUSH算法

作为一个分布式存储系统,如何合理地分布数据非常重要。Ceph系统的许多特性,如去中心化、易扩展性和负载均衡等都和它采用的CRUSH数据分布算法是密不可分的。经过不断地实践和优化,Ceph作为开源云存储重要的后端之一,被大家认可,这也离不开CRUSH算法的先进设计。 CRUSH算法的基本特性 为一个分布式存储系统实现数据分布算法不简单,至少需要考虑下述情况。 · 实现数据的随机分布,并在读取时能快速索引。 · 能够高效地重新分布数据,在设备加入、删除和失效时最小化数据迁移。 · 能够根据设备的物理位

cyq6239075的博客 1890

Ceph 学习——CRUSH算法及源码分析(二)

前一章介绍CRUSH算法的基本原理和一些基本的数据结构,这一节将介CRUSH的源码实现,主要是一些对算法实现的具体函数的介绍。 回顾 Ceph 学习——CRUSH算法及源码分析(一) CRUSH 相关源代码 位于源码文件的 ceph/src/crush中 这个编辑器不能上传附件的吗?知道的朋友教下新手小白 怎么上传附件相关数据结构CRUSH 算法相关的数据结构主要有几个 分别是 crush_m

SEU_PAN的博客 1745

Ceph CRUSH 规则

Ceph 的 CRUSH(Controlled Replication Under Scalable Hashing)规则用于定义数据在集群中的分布策略。CRUSH 规则决定了数据在不同层级的分布方式,从根节点到具体的 OSD。

博客 1103

Ceph 学习——CRUSH算法及源码分析(一)

CRUSH 算法解决了PG副本如何分布在集群OSD上的问题,本文先介绍CRUSH算法基本原理和相关的数据结构,主要是CRUSH map中的内容如bucket、placement rule等以及他们的源码初探。 ps: 代码目前都没加注释,也没有删除冗余的东西哎。。。。整理文章是真的累,难怪大家都喜欢说转载请注明出处 :XD 限于篇幅有些重要的函数没有列出来,在下一章中再说好了

SEU_PAN的博客 3490

理解Ceph CRUSH数据定位算法

Ceph是当下最优秀的分布式存储系统之一。其中Ceph EBS块设备结合虚拟机的使用场景十分流行。 Ceph的核心之一是其数据定位算法,称之为CRUSH算法,这是一种用户可控的伪随机算法。理解此算法对掌握Ceph助益很大。 下面通过示例来分析CRUSH算法。我们部署一个Ceph集群,用一个节点做monitor,用两个节点(2×3=6块硬盘)做OSD数据服务器,OSD服务器的层次结构如下:

@xanpeng 3420

ceph的CRUSH算法

Ceph中关于副本位置的选择,采用的算法是CRUSH。核心思想是根据(object的ID,deviceID or number,deviceweight,replica number,伪随机参数)计算出副本的位置。 Ceph采用的CRUSH算法的实现,跟openstack swift等采用一致性一致性hash有着明显的区别。先说相同之处,目的都是类似,都是为了保证副本分布的均匀,设备空间利用率的

load2006的专栏 1719
上一篇: Ceph数据副本机制详解
下一篇: Ceph存储池参数中pg_num和pgp_num的关系
1990_super
博客等级 码龄15年 83粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值