当前位置:网站首页>云存储硬核技术内幕——(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次方?
请关注下期。
边栏推荐
- Beginner crawler notes (collecting data)
- DocuWare平台——用于文档管理的内容服务和工作流自动化的平台(上)
- 第三章 Scala运算符
- 2022年7月国产数据库大事记-墨天轮
- 你以为在做的是微服务?不!你做的只是分布式单体!
- 2022杭电多校3
- DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)
- Projector reached the party benefits 】 【 beginners entry - brightness projection and curtain selection - from entry to the master
- Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)
- uni-app之renderjs
猜你喜欢
随机推荐
第三章 Scala运算符
An article to answer what is the product library of the DevOps platform
基于 Next.js实现在线Excel
ICDE‘22推荐系统论文之Research篇
明明加了唯一索引,为什么还是产生重复数据?
Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
Beginner crawler notes (collecting data)
Tinymce plugins [Tinymce 扩展插件集合]
初学爬虫笔记(收集数据)
如何优雅的消除系统重复代码?
C端折戟,转战B端,联想的元宇宙梦能成吗?
2022杭电多校4
界面组件DevExpress ASP.NET Core v22.1 - 增强数据导出功能
动态数组底层是如何实现的
游戏网络 UDP+FEC+KCP
74行代码实现浪漫的红心下落的动画效果
IP报文头解析
《2022 年上半年全球独角兽企业发展研究报告》发布——DEMO WORLD世界创新峰会圆满落幕
tif转mat







![吴恩达机器学习[9]-神经网络学习](/img/07/0eeb3cd5f3ea7c2baeec1732ea8d9a.png)

