当前位置:网站首页>云存储硬核技术内幕——(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次方?
请关注下期。
边栏推荐
猜你喜欢
从-99打造Sentinel高可用集群限流中间件
邮差"头":{“retCode”:“999999”
Flutter 运动鞋商铺小demo
GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
The electromagnetic compatibility EMC protection study notes
An article to answer what is the product library of the DevOps platform
DocuWare平台——用于文档管理的内容服务和工作流自动化的平台(上)
李沐的深度学习笔记来了!
(2022杭电多校五)C - Slipper (dijkstra+虚拟结点)
Semaphore 基本原理
随机推荐
Redis 高可用
云存储硬核技术内幕——(13) 抓手,组合拳与闭环
【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
李沐的深度学习笔记来了!
In action: 10 ways to implement delayed tasks, with code!
软件性能测试包括哪些内容?国内权威软件检测机构排名
PHP 图片转PDF
2022杭电多校4
爬虫小白笔记(昨天的对于注意解析数据的补充)
Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
【已解决】allure无法生成json文件和AttributeError: module ‘allure‘ has no attribute ‘severity_level‘
Codeforces Round #811 A~F
OGG判断mgr状态并自动启动脚本
重构指标之如何监控代码圈复杂度
在Markdown文件中快速插入本地图片
Redis-哨兵模式
西安纵横资讯×JNPF:适配中国企业特色,全面集成费用管控体系
Go 事,如何成为一个Gopher ,并在7天找到 Go 语言相关工作,第1篇
吴恩达机器学习[12]-机器学习系统设计