Linux持续不断进军可扩展计算空间,特别是可扩展存储空间。Ceph 最近加入到 Linux 中令人印象深刻的文件系统备选行列,它是一个分布式文件系统,能够在维护 POSIX 兼容性的同时加入了复制和容错功能。
其命名和UCSC(Ceph 的诞生地)的吉祥物有关,这个吉祥物是 “Sammy”,一个香蕉色的蛞蝓(就是蜗牛<..>),就是头足类中无壳的软体动物。这些有多触角的头足类动物,是对一个分布式文件系统高度并行的形象比喻。
(1)ceph简介
Ceph 的初创来自Sage Weil 博士的 PhD 论文,论文 “Ceph: A Scalable, High-Performance Distributed File System”详细的阐述了 Ceph 的设计架构(论文网址:https://www.ssrc.ucsc.edu/Papers/weil-osdi06.pdf)。ceph的特性包括:可靠性的、可扩展的、统一的、分布式的存储系统。ceph可以提供对象存储、块存储、和文件系统3种功能。
(2)ceph的发展历程
Ceph的设计目标是采用商用硬件来构建大规模的、具有高可用性、高可扩展性、高性能的分布式存储系统。
商用硬件:一般指标准的x86服务器,相对于专用硬件,性能和可靠性较差,但由于价格相对低廉,可通过集群优势来发
挥高性能。
高可用性:指系统的某个部件失效后,系统依然可以提供正常服务能力;可用设备部件和数据的冗余来提高可用性。
高可扩展性:系统可灵活的应对集群的伸缩,如任意添加或删除存储节点和存储设备;系统的性能随集群的增加而线性
增加。
Ceph基本架构图
(1)、Ceph核心组件:
在Ceph存储中,包含以下几个核心组件,分别是Ceph OSD;Ceph Monitor和Ceph MDS。
Ceph OSD:全称是Object Storage Device,主要功能包括存储数据,处理数据的复制、恢复、回补、平衡数据分
布,并将一些相关数据提供给Ceph Monitor,如Ceph OSD心跳等。
Ceph Monitor:Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含Monitor map、OSD
map、PG(Placement Group) map和CRUSH map。
Ceph MDS:全称是Ceph Metadata server。主要保存的是Ceph文件系统(File system)的元数据。(Ceph的块存
储和对象存储不需要Ceph MDS。Ceph MDS为基于POSIX文件系统的用户提供一些基础命令,如ls,
find等命令)。
(2)、Ceph功能特性:
对象存储功能特性:基于LIBRADOS之上,提供当前流行的RESTful协议的网关,并兼容S3和Swift接口,作为对象存
储,可以对接网盘应用以及HLS流媒体应用等,
块存储功能特性:也基于LIBRADOS之上,通过LIBRBD创建一个块设备,通过QEMU/KVM附加到VM上,作为传统的
块设备来用。
文件系统存储功能特性:是基于RADOS来实现分布式的文件系统,引入了MDS(Metadata server),主要为兼容
POSIX文件系统提供元数据,可当做文件系统挂载。
ceph底层核心是RADOS。
(1)、RBD(块存储)
RBD是通过librbd库对应用提供块存储,主要面向云平台的虚拟机提供虚拟磁盘,它类似于传统的SAN存储,都提供数据块级别的访问。
(2)、CephFS(文件系统)
CephFS通过在RADOS基础之上增加MDS(Metadata Server)来提供文件存储。它提供libcephfs库和标准的POSIX文件接口。CephFS类似于传统的NAS存储,通过NFS或者CIFS协议提供文件系统或文件目录服务。
3)、RadosGW(对象存储)
<1>提供RESTful Web API接口
其接口值提供了简单的GET、PUT、DEL等其他接口,对应对象文件的上传、下载、删除、查询等操作。
<2>采用扁平的数据组织形式
Amazon的S3接口已经成为事实上的对象存储的标准接口,如上图所示,其接口分为3级存储:Account/Bucket/Object(账户/桶/对象)。
RADOS是ceph存储系统的基石,是一个可扩展的、稳定的、自我管理的、自我修复的对象存储系统,是ceph存储系统的核心,包括: Monitor模块为整个存储集群提供全局的配置和系统信息;通过CRUSH算法实现对象的寻址过程; 提供数据均衡功能;通过peering过程完成一个PG内存达成数据一致性的过程; 提供克隆和快照功能;实现对象分层存储的功能;实现数据一致性检查工具Scrub。
(1)、Monitor
Monitor是一个独立部署的daemon进程,可保证自己的高可用。Cluster Map保存了系统的全局信息,包括:
Monitor Map:包括集群的fsid;所有Monitor的地址和端口;current epoch
OSD Map:所有OSD的列表,和OSD的状态等
MDS Map:所有的MDS的列表和状态
(2)、对象存储(指RADOS对象)
对象是数据存储的基本单元,一般默认4MB大小。
对象标识(ID),唯一标识一个对象
对象数据,其在本地文件系统中对应一个文件,对象的数据保存在文件中
对象的元数据,以键值对的形式,可以保存在文件对应的扩展属性中。RADOS增加了以Leveldb等的本地KV存储系统来保存对象的元数据。
(3)、pool和PG的概念
pool是一个抽象的存储池。它规定了数据冗余的类型以及对应的副本分布策略
PG(放置策略组),它是对象的集合,对象的副本都分布在相同的OSD列表上。一个对象只属于一个PG,一个PG对应于放置在其上的OSD列表,一个OSD可分布多个PG
(4)对象寻址过程
对象寻址过程是指查找对象在集群中分布的位置信息。分两步:
<1>对象到PG的映射
<2>PG到OSD列表映射
(5)、数据读写过程
(6)、数据均衡
当集群新添一个OSD存储设备时,整个集群会发生数据的迁移,使得数据分布到均衡。
(7)、Peering
ceph的peering过程是指一个PG内的所有副本通过PG日志达成数据一致的过程。
(8)、Recovery和Backfill
Recovery过程是根据在Peering的过程中产生的、依据PG日志推算出不一致对象列表来修复其他副本上的数据。
Backfill过程是通过逐一对比两个PG的对象列表来修复。
(9)、纠错码
将写入的数据分成N份原始数据块,通过这N份原始数据块计算出M份校验数据块,N+M份数据块可分别保存在不同的设备或节点中。可以允许最多M个数据块失效,通过N+M份中的任意N份数据,还原出其他数据块。
(10)、快照和克隆
快照就是一个存储设备在某一时刻的全部只读镜像。克隆是在某一时刻的全部可写镜像。快照和克隆的区别在于快照只能读,而克隆可写。
(11)、Cache Tier
Ceph Client对于Cache层是透明的
类Objector负责请求是发送给Cache Tier层,还是发给Storage Tier层
Cache Tier层为高速I/O层,保存热点数据,或称为活跃的数据
Storage Tier层为慢速层,保存非活跃的数据
(12)、Scrub
Scrub机制用于系统检查数据的一致性。
参考文献
【1】《Ceph分布式存储实战》
【2】《Ceph源码分析》