Ceph /sɛf/ 一种分布式存储系统
浅薄认识:云存储的一种实现方式,多个节点分布数据。
主要架构组件
MDS (Metadata Server):负责管理文件系统的元数据(如目录结构、文件属性等)。
OSD (Object Storage Daemon):负责存储实际的文件数据,将文件分割为对象并分布到集群中。
Monitors (MON):维护集群的状态信息,如 OSD 和 MDS 的映射关系。
Clients:通过内核模块或用户空间客户端(如 FUSE)访问 CephFS。
其他:
Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
PG(Placement Grouops):逻辑概念,一个PG包含多个OSD。引入PG概念能更好的分配数据和定位数据。
RADOS(Reliable Autonomic Distributed Object Store):Ceph集群的精华,用户实现数据分配、Failover等集群操作。
Libradio:Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH:Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方
RBD(RADOS block device):Ceph对外提供的块设备服务。
RGW(RADOS gateway):Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
CephFS(Ceph File System):是Ceph对外提供的文件系统服务。
主要存储流程
1.客户端发起写入请求
客户端通过挂载的 CephFS 文件系统发起文件写入请求。
请求首先发送到 MDS,获取文件的元数据信息(如文件是否存在、权限等)。
2.MDS 处理元数据
MDS 检查文件的元数据:
如果文件是新的,MDS 会为其分配一个唯一的 inode 号,并更新目录结构。
如果文件已存在,MDS 会更新文件的元数据(如大小、修改时间等)。
MDS 将元数据操作记录到日志中,确保一致性。
3.数据分片和分布
文件数据被分割为多个对象(默认大小为 4MB)。
每个对象通过 CRUSH 算法映射到多个 OSD 上,确保数据分布均匀和冗余。
4.数据写入 OSD
客户端将数据对象直接写入对应的 OSD。
OSD 将数据写入本地磁盘,并根据配置的副本数(如 3 副本)将数据复制到其他 OSD。
OSD 确认数据写入成功后,向客户端返回成功响应。
5.元数据更新完成
客户端通知 MDS 文件写入完成。
MDS 更新文件的元数据(如文件大小、修改时间等),并确保元数据的一致性。