分布式存储系统之Ceph基础

Ceph基础概述
Ceph是一个对象式存储系统 , 所谓对象式存储是指它把每一个待管理的数据流(比如一个文件)切分成一到多个固定大小的对象数据 , 并以其为原子单元完成数据的存取;对象数据的底层存储服务由多个主机组成的存储集群;该集群被称之为RADOS(Reliable Automatic Distributed Object Store)集群;翻译成中文就是可靠的、自动化分布式对象存储系统;
Ceph架构

分布式存储系统之Ceph基础

文章插图
提示:librados是RADOS存储集群的API , 它支持C、C++、java、python和php等变成语言;RADOSGW、RBD、CEPHFS都是RADOS存储服务的客户接口;它们分别把rados存储服务接口librados从不同角度做了进一步的抽象 , 因而各自适用于不同的应用场景;RADOSGW是将底层rados存储服务抽象为以RESTful风格接口提供对象存储服务 , 适用于存取对象数据的接口 , 比如web服务;RBD是将底层RADOS存储服务抽象为块设备的存储设备;主要用于虚拟化 , 比如给虚拟机提供硬盘;CEPHFS是将底层RADOS抽象为一个文件系统接口 , 供其他主机使用;
分布式存储系统之Ceph基础

文章插图
提示:RADOS集群主要由Monitors、Managers、Ceph OSDs、Ceph MDSs这几个组件组成;其中Monitor主要作用是监控整个集群的状态 , 健康与否等;它拥有整个集群的运行图(monitor map、manager map、OSD map、和CRUSH map);除此之外 , 它还负责维护集群各组件之间以及客户端接入RADOS集群存取数据时的认证信息和实行认证;简单讲mon组件就是管理和维护其他组件状态以及接入RADOS集群的认证信息并实行认证 , 一旦mon组件所在主机宕机 , 那么整个集群将不可用;有点类似k8s里的etcd;所以为实现冗余和高可用性 , 通常在集群我们部署大于1的奇数个mon(因为它使用Paxos协议 , 为防止网络分区等原因 , 保证服务的正常可用);manager组件主要负责跟踪运行时指标和Ceph集群的当前状态 , 包括存储利用率 , 当前性能指标和系统负载等 , Ceph集群信息 , 包括基于web的Ceph管理器仪表板和REST API 。高可用性通常需要至少两个mgr组件 。OSD组件是存储数据 , 处理数据复制、恢复、再平衡 , 并提供一些监视信息的组件;Ceph通过检查其他Ceph OSD进程来监控和管理心跳;通常为了高可用和冗余 , 至少需要3个ceph osd(即3块硬盘 , ceph为了每一个osd能够被单独使用和管理 , 每一个osd都会有一个单独的守护进程ceph-osd来管理 , 即服务器上有多少个osd,就会有多少个ceph-osd进程 , 一个ceph-osd进程就对应一个osd , 一个osd就对应一块磁盘设备);MDS是ceph元数据服务组件 , 主要实现分布式文件系统的控制层面 , 数据和元数据的存取依然由RADOS负责 , 即用户使用cephfs文件系统存取数据 , 用户存储的文件的元数据该怎么存放、怎么管理等都由MDS组件负责;当然如果我们没有使用cephfs文件系统的必要 , 对应mds组件也可以不用部署;所以mds组件不是必须组件;
Ceph数据抽象接口(客户端中间层)
Ceph存储集群提供了基础的对象数据存储服务 , 客户端可基于RADOS协议和librados API直接与存储系统交互进行对象数据存取; librados提供了访问RADOS存储集群支持异步通信的API接口 , 支持对集群中对象数据的直接并行访问 , 用户可通过支持的编程语言开发自定义客户端程序通过RADOS协议与存储系统进行交互;客户端应用程序必须与librados绑定方可连接到RADOS存储集群 , 因此 , 用户必须事先安装librados及其依赖后才能编写使用librados的应用程序; librados API本身是用C ++编写的 , 它额外支持C、Python、Java和PHP等开发接口;当然 , 并非所有用户都有能力自定义开发接口以接入RADOS存储集群的需要 , 为此 , Ceph也原生提供了几个较高级别的客户端接口 , 它们分别是RADOS GateWay(RGW)、ReliableBlock Device(RBD)和MDS(MetaData Server) , 分别为用户提供RESTful、块和POSIX文件系统接口;

经验总结扩展阅读