当前位置:网站首页>云存储硬核技术内幕——(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次方?
请关注下期。
边栏推荐
- RSA306B,500,600系列API接口代码
- Task Computing【动态规划_牛客】
- GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
- Byte、Short、Integer、Long内部缓存类的对比与源码分析
- Why, when you added a unique index or create duplicate data?
- A detailed explanation of what is software deployment
- 初学爬虫笔记(收集数据)
- 【已解决】allure无法生成json文件和AttributeError: module ‘allure‘ has no attribute ‘severity_level‘
- 7 天学个Go,Go 结构体 + Go range 来学学
- numpy入门详细代码
猜你喜欢
如何防止重复下单?
Projector reached the party benefits 】 【 beginners entry - brightness projection and curtain selection - from entry to the master
浅谈一下跨端技术方案
Redis-主从复制
分支控制if-else
postman “header“:{“retCode“:“999999“
A detailed explanation of what is software deployment
remote: Check Access Error, please check your access right or username and password!fatal: Authenti
QT笔记——Q_INVOKABLE了解
西安纵横资讯×JNPF:适配中国企业特色,全面集成费用管控体系
随机推荐
OGG判断mgr状态并自动启动脚本
74行代码实现浪漫的红心下落的动画效果
初学爬虫笔记(收集数据)
如何优雅的消除系统重复代码?
卖家寄卖流程梳理
阿尔萨斯监控平台&普罗米修斯监控平台对服务器资源的监控
Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
字节API鉴权方法
Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)
Flutter 运动鞋商铺小demo
农产品期货开户哪家好??
Manacher(求解最长回文子串)
MySQL select加锁分析
Go 言 Go 语,一文看懂 Go 语言文件操作
快速整明白Redis中的字典到底是个啥
7 天学个Go,Go 结构体 + Go range 来学学
inter-process communication
【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
洛谷题解P1028 数的计算
2022杭电多校3