前情提要:
子虚期望让云上的虚拟机背起记忆的行囊浪迹天涯,但却发现虚拟机如果采用本地磁盘根本无法自由迁移,而基于FC的共享存储方案又具有极大的局限性。子虚自行思考答案,却发现自己的思考和Ceph殊途同归……
Ceph是一个PB级的分布式存储系统,其核心思想于2004年提出,2011年在社区启动,2012年推出第一个稳定版。
它的目标是:
1、扩展到PB量级;
2、高IOPS性能和吞吐带宽;
3、高可靠性;
熟悉分布式系统设计的同学会发现,这三者之间存者在很多矛盾。而Ceph这一分布式存储的经典之作,在十年的演进过程中,利用一系列巧妙的设计兼顾了这三点,正所谓,面壁十年,邃密群科。
让我们从Ceph对外的接口讲起。Ceph可以提供块存储、对象存储和文件存储,我们前面介绍了块存储和文件存储,对象存储在未来会给大家详解。
虚拟机需要挂载的所谓“云硬盘”,实际上就是块存储。
Ceph提供的块存储,叫做RBD。它是RADOS Block Device的简称。RADOS是Ceph的一个内部概念,以后会详解。
RBD分为客户端和服务端。客户端以RBD块驱动的形式在宿主机的操作系统上工作,并通过QEMU为虚拟机提供服务,如下图:
如图,来自VM的IO操作,QEMU将其拦截并调用RBD驱动,RBD驱动再通过网络协议,调用TCP/IP协议栈,通过网络适配器发送到Ceph RBD服务器端。
注意上面斜体下划线的部分:RBD驱动究竟采用什么样的网络协议去调用TCP/IP协议栈呢?
我们很容易想到块存储常见的网络协议iSCSI (IP SAN)。然而,Ceph在这里采用了非标准的私有协议,在Linux的librados模块中实现。这种私有协议叫做RADOS CLIENT PROTOCOL (RCP),会访问服务端(RADOS GW)的6789端口。
它与iSCSI的区别是,iSCSI中传递的是SCSI命令字,是基于磁盘LBA寻址方式的。而RADOS协议传递的内容中,传递的却是描述image的数据结构。
什么是image呢?
我们阅读了Ceph的文档,会发现,Ceph本身是一个基于对象的分布式存储系统,RBD块也是存储系统中的一个对象。
如图,Ceph中的对象可以是一个文件,也可以是image。image对外可以呈现为RBD块,并通过RADOS Client的方式挂载到宿主机、VM或容器上。
那么,Ceph是怎么样把对象存储到具体的物理节点和磁盘的呢?
请看下回分解。
附言:
今天是一个伟大的人逝世45周年的日子,谨在此文中化用他的诗句向他致敬,愿今天的一切,他能够看到。也期望朋友们能学以致用,一起建设更美好的数字化世界……