Ceph Monitor实现

在之前的一篇博客Ceph Monitor and Paxos中介绍了Ceph Monitor利用改进的Paxos算法,以集群的形式对外提供元信息管理服务。本文讲分别从Ceph Monitor的架构,其初始化过程、选主过程、Recovery过程、读写过程、状态转换六个方面介绍Ceph Monitor的实现。本文假设读者已经了解Paxos算法的基本过程,了解Prepare、Promise、Commit、Accept、Quorum等概念。注意Ceph Monitor中的Accept概念其实相当于Paxos中的Promise。

架构

Ceph Monitor Architecture

上图所示是Ceph Monitor的结构图,自下而上有以下几个部分组成:

初始化

Ceph Monitor Initial

可以看出,Ceph Monitor在启动节点端,主要做了三件事情:

Boostrap

上述交互过程见下图:

Ceph Monitor Boostrap

目的:可以看出,经过了Boostrap过程,可以完成以下两步保证:

选主

接着,节点进入选主过程:

victory

上述交互过程见下图:

Ceph Monitor Election

目的:可以看出,Monitor选主过程的目的如下:

RECOVERY阶段

经过了上述的选主阶段,便确定了leader,peon角色,以及quorum成员。在真正的开始一致性读写之前,还需要经过RECOVERY阶段:

这个阶段的交互过程如下图:

Ceph Monitor Collect

目的

读写流程

经过了上面的初始化、选主、恢复阶段整个集群进入到一个非常正常的状况,终于可以利用Paxos进行一致性地读写了,其中读过程比较简单,在lease内的所有quroum均可以提供服务。而所有的写都会转发给leader,写过程如下:

交互过程如下:

Ceph Monitor Write

目的

数据存储:我们知道commit以后的数据才算真正写入到集群,那么为什么在begin过程中,leader和peon都会将数据写入db呢?这是因为Ceph Montor利用db来完成了log和value两部分数据的存储,而commit时会将log数据反序列化后以value的格式重新存储到db。

状态

在Monitor的生命周期,贯穿于上述各个过程的包括两个层面的状态转换,Monitor自身的状态,以及Monitor进入主从状态后,其Paxos过程中的状态。

Monitor状态转换

Ceph Monitor Status

Paxos状态转换

Ceph Monitor Paxos Status

参考:

RADOS: A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters

SOURCE CODE

Table of Contents