当前位置:网站首页>云存储硬核技术内幕——(8) 只缘身在此山中
云存储硬核技术内幕——(8) 只缘身在此山中
2022-08-04 15:38:00 【用户8289326】
在上回,我们提到:
在Ceph中,每个块(/dev/vda)设备会被拆分为若干个小块,并均匀分配到各个物理节点(服务器)的各个物理磁盘上。那么,Ceph是如何做到这样的均匀分配的呢?
宋代大文豪苏轼的一首词形象地形容了Ceph的分布式存储机制:
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。
/dev/vda 这样的设备,实际上是宿主机上的QEMU为各个VM呈现的虚拟设备。在QEMU上,Ceph RBD Driver一方面对VM呈现可挂载到VFS的块设备(RBD块),另一方面,接管VM对这个块设备发起的IO,并将其转发到这个块设备对应的多个物理节点的多个磁盘上。
这种转发机制如下图所示:
如图,Ceph的RBD Driver会将为VM提供的块设备拆成大小为特定尺寸的小块(Chunk),并且尽量均匀地让这些小块分布到集群中的各个物理磁盘。
我们发现,RBD块对VM,和对Ceph呈现的实际上是两个不同的层次,这就是“横看成岭侧成峰”,远近高低各不同”。
这样看来,Ceph需要解决的问题就是两个:
1、我应该把数据写到什么地方?
2、我之前把数据写到什么地方了?
Ceph集群中的物理磁盘,在Ceph术语中称为OSD(Object Storage Device)。OSD是一个逻辑概念,实际上由真实存在的物理磁盘以及Ceph中的守护进程两部分构成。当然,运行在存储节点(服务器)上的软件所看到的是OSD的守护进程部分。如果一台服务器有12个物理磁盘,就应该运行12个OSD守护进程实例,整个集群中的OSD(物理硬盘)数量一般由数百个到数千个不等。
这么多的OSD应当如何组织和管理呢?
Ceph中引入了一个概念:PG (Placement Group)。实际上PG是存储对象的一部分。
每个PG可以对应n个OSD,n取决于Ceph的副本数。如最常见的三副本,n=3。
而每个OSD上也会有很多个PG——这个非常容易理解,一块硬盘不可能只用于存储一个对象。
下图是一个PG与OSD的映射的例子:
如何从PG映射到OSD,这种均匀分布的算法实际上是Ceph的关键技术,叫做CRUSH算法。对CRUSH算法感兴趣的同学可以查阅Ceph的文档,在这不展开讨论。
Ceph的PG,实际上是RBD块或其他对象的一部分。在Ceph中,万物皆对象,RBD块也不例外。
Ceph的官方文档对“Object”的概念有所混淆,我们在这里做一个澄清:
在用户视角的对象,可以是一个文件(file),或RBD块(image),而RADOS视角的“Object”,实际上是file或image拆分以后的Object。一个Object大小一般为2MB或4MB。
Objcect的下一级是拆分为PG。PG的数量必须是2的整数次幂,PG将自身复制N份,对应到N个OSD。(N就是N副本的N)
如下图所示:
RBD块(Block Device)是Ceph中用户视角的一个对象。它被拆分为多个Object,每个Object的尺寸是固定的——也就是说,拆分Object的数量未知。
Object被拆分为2的整数次幂的PG,并按副本数写入对应数量的OSD落盘。(想一想为什么)
最后,每个磁盘(OSD)都只有块设备(image)的一部分,组合在一起才是整个块设备的内容。
这就是“不识庐山真面目,只缘身在此山中”。
本期我们留下两个问题:
1、为什么不把RBD块直接拆分为PG并映射到OSD,而要隔一层Object?
2、为什么每个Object的大小恒定,而拆分为PG的数量为2的N次方?
请关注下期。
边栏推荐
猜你喜欢

DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)

全球电子产品需求放缓,三星手机越南工厂每周只需要干 3~4 天

基于 Next.js实现在线Excel

成功 解决 @keyup.enter=“search()“ 在el-input 组件中不生效的问题

HarePoint Analytics for SharePoint Online

一文解答DevOps平台的制品库是什么

#夏日挑战赛# HarmonyOS 实现一个滑块验证

Redis持久化操作

postman “header“:{“retCode“:“999999“

Task Computing【动态规划_牛客】
随机推荐
2022 Hangzhou Electric Multi-School 4
MySQL select加锁分析
初学爬虫笔记(收集数据)
现代 ABAP 编程语言中的正则表达式
IP报文头解析
Online Excel based on Next.js
DevOps平台中的制品库是什么?有什么用处?
Semaphore 基本原理
游戏网络 UDP+FEC+KCP
【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
H5 开发内嵌页面跨域问题
NUS颜水成等发布首篇《深度长尾学习》综述
洛谷题解P4326 求圆的面积
保证通信的机制有哪些
Why, when you added a unique index or create duplicate data?
【Go事】一眼看穿 Go 的集合和切片
浅谈一下跨端技术方案
H5 之 文件流转base64下载
Redis-哨兵模式
Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)