一个 Ceph 集群至少需要一个 Ceph Monitor
、Ceph Manager
和 Ceph OSD(Object Storage Daemon)
。 运行 Ceph 文件系统客户端时也需要 Ceph 元数据服务器
。
Ceph主要由以下几个核心组件组成
Monitor(ceph-mon)
维护集群Cluster Map的状态,维护集群的Cluster MAP二进制表,保证集群数据的一致性。Cluster MAP描述了对象块存储的物理位置,以及一个将设备聚合到物理位置的桶列表,map中包含monitor组件信息,manger 组件信息,osd 组件信息,mds 组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client 在连接ceph集群时通过此组件进行验证。
Manager(ceph-mgr)
收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui
)和 resetful api
。Manager组件开启高可用时,至少2个实现高可用性。
OSD(ceph-osd)
object storage daemon
,用于集群中所有数据与对象的存储。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。负责处理集群数据的复制、恢复、回填、再均衡,并向其他osd守护进程发送心跳,然后向Mon提供一些监控信息。当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要三个OSD守护进程即三个OSD节点,集群才能达到active+clean
状态,实现冗余和高可用。
MDS(ceph-mds)
Metadata server
,元数据服务。为 ceph 文件系统提供元数据计算、缓存与同步服务(ceph 对象存储和块存储不需要MDS)。同样,元数据也是存储在osd节点中的,mds类似于元数据的 代理缓存服务器 ,为 posix 文件系统用户提供性能良好的基础命令(ls,find等)不过只是在需要使用CEPHFS时,才需要配置MDS节点。
注意事项
1、通常一个节点有多个OSD守护进程和多个磁盘,所以通常来说OSD不是一个节点。
2、Ceph要求必须是奇数个Monitor监控节点,一般建议至少是3个(如果是自己私下测试,可以是1个,但是生产环境绝不建议1个)用于维护和监控整个集群的状态,至少三个mon才能实现冗余和高可用性,每个Monitor都有一个Cluster Map,只要有这个Map,就能够清楚知道每个对象存储在什么位置了。客户端会先tcp连接到Monitor,从中获取Cluster Map,并在客户端进行计算,当知道对象的位置后,再直接与OSD通信(去中心化的思想)。OSD节点平常会向Monitor节点发送简单心跳,只有当添加、删除或者出现异常状况时,才会自动上报信息给Monitor。
3、在Ceph中,如果要写数据,只能向主OSD写,然后再由主OSD向从OSD同步地写,只有当从OSD返回结果给主OSD后,主OSD才会向客户端报告写入完成的消息。如果要读数据,不会使用读写分离,而是也需要先向主OSD发请求,以保证数据的强一致性。