2.2 Monitor节点分析
每个Monitor节点上都在运行守护进程(ceph-mon)。该守护进程可维护集群映射的主副本,包括集群拓扑图。这意味着Ceph客户端只需连接到一个Monitor节点并检索当前的集群映射,即可确定所有Monitor和OSD节点的位置。
Ceph客户端读写OSD节点之前,必须先连接到Monitor节点。借助集群映射的当前副本和CRUSH算法,Ceph客户端可以计算任何对象的位置。这是Ceph具有高扩展性和高性能的一个非常重要的因素。
Ceph Monitor的主要作用是维护集群的数据主副本映射关系。同时,它为每个组件维护一个单独的信息图,包括OSD Map、MON Map、MDS Map、PG Map和CRUSH Map等。所有集群节点均向Monitor节点报告,并共享有关其状态的每个更改信息。Monitor不存储实际数据。存储数据是OSD的工作。
Ceph Monitor还提供身份验证和日志服务。Monitor将监控服务中的所有更改信息写入单个Paxos,并且Paxos更改写入的K/V存储,以实现强一致性。Ceph Monitor使用K/V存储的快照和迭代器(LevelDB数据库)来执行整个存储的同步。换句话说,Paxos是Ceph Monitor的核心服务,专门负责数据一致性工作。
Paxos服务解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致。Paxos服务运行在允许有服务器宕机的系统中,不要求可靠的消息传递,可容忍消息丢失、延迟、乱序和重复。它利用大多数(Majority)机制保证了2N+1的容错能力,即2N+1个节点的系统最多允许N个节点同时出现故障。
如图2-2所示,Ceph Monitor中包含分别负责OSD Map、Monitor Map、PG Map、CRUSH Map等的Paxos服务。Paxos服务负责将自己对应的数据序列化为K/V并写入Paxos层。Ceph集群中所有与Monitor节点的交互最终都是在调用对应的Paxos服务功能,多种Paxos服务将不同组件的Map数据序列化为K/V,共用同一个Paxos实例。对于Paxos的原理,这里不做过多介绍。
图2-2 Monitor中的数据一致性保证机制