Ceph CRUSH算法

Ceph CRUSH算法是一种用于数据分布和负载均衡的算法,适用于大规模分布式存储系统。它通过层次化的Cluster Map和Placement Rules确保数据在节点间的均衡分布,并具备应对集群伸缩的能力。CRUSH Map是一个树形结构,包含buckets和OSD,提供了机架感知能力。Placement Rules允许用户自定义副本分布策略。算法中还包含了不同类型的bucket策略,如一般buckets、list buckets、tree buckets和straw buckets,以适应不同的场景需求。案例展示了如何通过配置规则将高优先级业务数据存放在SSD磁盘上。
摘要由CSDN通过智能技术生成

1. 数据分布算法挑战

  • 数据分布和负载均衡:
    a. 数据分布均衡,使数据能均匀的分布到各个节点上。
    b. 负载均衡,使数据访问读写操作的负载在各个节点和磁盘的负载均衡。
  • 灵活应对集群伸缩
    a. 系统可以方便的增加或者删除节点设备,并且对节点失效进行处理。
    b. 增加或者删除节点设备后,能自动实现数据的均衡,并且尽可能少的迁移数据。
  • 支持大规模集群
    a. 要求数据分布算法维护的元数据相对较小,并且计算量不能太大。随着集群规模的增 加,数据分布算法开销相对比较小。

2. Ceph CRUSH算法说明

  • CRUSH算法的全称为:Controlled Scalable Decentralized Placement of Replicated Data,可控的、可扩展的、分布式的副本数据放置算法。
  • pg到OSD的映射的过程算法叫做CRUSH 算法。(一个Object需要保存三个副本,也就是需要保存在三个osd上)。
  • CRUSH算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。

3. Ceph CRUSH算法原理
CRUSH算法因子:

  • 层次化的Cluster Map
    反映了存储系统层级的物理拓扑结构。定义了OSD集群具有层级关系的 静态拓扑结构。OSD层级使得 CRUSH算法在选择OSD时实现了机架感知能力,也就是通过规则定义, 使得副本可以分布在不同的机 架、不同的机房中、提供数据的安全性 。
  • Placement Rules
    决定了一个PG的对象副本如何选择的规则,通过这些可以自己设定规则,用户可以自定义设置副本在集群中的分布。

3.1 层级化的Cluster Map

v2-b102b4e02bf8eaa018a319c597745379_b.jpg



CRUSH Map是一个树形结构,OSDMap更多记录的是OSDMap的属性(epoch/fsid/pool信息以及osd的ip等等)。
叶子节点是device(也就是osd),其他的节点称为bucket节点,这些bucket都是虚构的节点,可以根据物理结构进行抽象,当然树形结构只有一个最终的根节点称之为root节点,中间虚拟的bucket节点可以是数据中心抽象、机房抽象、机架抽象、主机抽象等。


3.2 数据分布策略Placement Rules


数据分布策略Placement Rules主要有特点:
a. 从CRUSH Map中的哪个节点开始查找
b. 使用那个节点作为故障隔离域
c. 定位副本的搜索模式(广度优先 or 深度优先)

 rule replicated_ruleset  #规则集的命名,创建pool时可以指定rule集 
{     
ruleset 0                #rules集的编号,顺序编即可        
type replicated          #定义pool类型为replicated(还有erasure模式)        
min_size 1                #pool中最小指定的副本数量不能小1     
max_size 10               #pool中最大指定的副本数量不能大于10            
step take default         #查找bucket入口点,一般是root类型的bucket         
step chooseleaf  firstn  0  type  host #选择一个host,并递归选择叶子节点osd          
step emit        #结束 
} 
 

3.3 Bucket随机算法类型

v2-e86577fd4c7af2966b914cd4d897a8f0_b.jpg


  • 一般的buckets:适合所有子节点权重相同,而且很少添加删除item。
  • list buckets:适用于集群扩展类型。增加item,产生最优的数据移动,查找item,时间复杂度O(n)。
  • tree buckets:查找负责度是O (log n), 添加删除叶子节点时,其他节点node_id不变。
  • straw buckets:允许所有项通过类似抽签的方式来与其他项公平“竞争”。定位副本时,bucket中的每一项都对应一个随机长度的straw,且拥有最长长度的straw会获得胜利(被选中),添加或者重新计算,子树之间的数据移动提供最优的解决方案。

4. CRUSH算法案例


说明:
集群中有部分sas和ssd磁盘,现在有个业务线性能及可用性优先级高于其他业务线,能否让这个高优业务线的数据都存放在ssd磁盘上。

普通用户:

v2-df1f157d1ac1d5bae8a0834961213fc5_b.jpg


ceph_sas.png


高优用户:

v2-1760398a83a2f2689a0cd3321b487d26_b.jpg




配置规则:

v2-7428303ca0d1f355cf83f4d274f69487_b.jpg


作者:李航【滴滴出行专家工程师】


滴滴云-为开发者而生 滴滴云使者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值