Recovery阶段

在Leader选举成功后,Leader和Peon都进入Recovery阶段。该阶段的目的是为了保证新Quorum的所有成员状态一致,这些状态包括:最后一个批准(Committed)的提案,最后一个没批准的提案,最后一个接受(Acceppted)的提案。每个节点的这些状态都持久化到磁盘。对旧Quorum的所有成员来说,最后一个通过的提案应该都是相同的,但对不属于旧Quorum的成员来说,它的最后一个通过的提案是落后的。

同步已批准提案的方法是,Leader先向新Quorum的所有Peon节点发送OP_COLLECT消息,并在消息中携带Leader自己的第1个和最后1个批准的提案的值的版本号。Peon收到OP_COLLECT消息后,将自己的第1个和最后1个批准的提案的值的版本号返回给Leader,并且如果Peon的最后1个批准的版本号大于Leader最后一个批准的版本号时,将所有在大于Leader最后一个版本号的提案值发送给Leader。Leader将根据这些信息填补自己错过的提案。这样,当Leader接收到所有Peon对OP_COLLECT消息的回应后,也就将自己更新到了最新的状态。这时Leader又反过来将最新状态同步到其它节点。

为获取新Quorum所有成员中的最大提案号,Leader在发送OP_COLLECT消息时,提出它知道的最大的提案号,并将该提案号附加在OP_COLLECT消息中。如果Peon已接受的最大提案号大于Leader提出的提案号,则拒绝接受Leader提出的提案号并将自己已接受的最大提案号通过OP_LAST消息发送给Leader。Leader收到OP_LAST消息后,发现自己的提案号不是最大时,就在Peon接受的最大提案号的基础上提出更大的提案号,重新进入Recovery阶段。这样,最终可以获取到最大的提案号。

总而言之,Recovery阶段的目的是让新Quorum中所有节点处于一致状态。实现这一目的的方法分成两步:首先,在Leader节点收集所有节点的状态,通过比较得到最新状态;然后,Leader将最新状态同步给其它节点。有两个比较重要的状态,最后一次批准的提案和已接受的最大提案号。

注意 区分提案号(proposal number)、提案值(value)、提案值的版本号(value version)这三个概念。提案号由Leader提出,为避免不同Leader提出的提案号不冲突,同个Leader提出的提案号是不连续的。提案的值的版本号是连续的。

代码注释

函数
void Paxos::leader_init()
void Paxos::peon_init()
void Paxos::collect(version_t oldpn)
void Paxos::handle_collect(MMonPaxos *collect)
void Paxos::handle_last(MMonPaxos *last)
void Paxos::handle_commit(MMonPaxos *commit)Paxos属性
uncommitted_v、uncommitted_pn、uncommitted_value
last_committed、accepted_pn配置
OPTION(mon_lease, OPT_FLOAT, 5)     // Lease租期

Lease阶段

Paxos算法分成两个阶段,第一个阶段为Prepare阶段。在这阶段中,(a)Proposer选择它知道的最大提案号n,并向所有Acceptor发送Prepare消息。(b)Acceptor承诺不再接受编号小于n的提案,(c)并返回它接受的编号小于n的提案中编号最大的提案给Proposer。这个过程中,如果Proposer选择的不是最大的提案号,那么Acceptor将拒绝Proposer的提案,而Proposer遭到拒绝后会提出编号更大的提案。这样循环反复,Proposer最终可以提出编号最大的提案。另外,Acceptor返回接受的编号小于n的提案中编号最大的提案给Proposer的目的是为让Proposer决定新提出的提案的值。对Ceph而言,由于Leader可以控制提案的进度,运行一次Paxos算法只有一个提案在审批,每次算法Leader都能够由自己决定提案的值,所以Peon不必返回接受的编号小于n的提案中编号最大的提案

Ceph中Paxos算法的实现,省略了Prepare阶段,并且Leader选举成功后每次执行算法使用同一个提案号。在Prepare阶段要完成(a)、(b)和(c)三件事,前两件事在Recovery阶段完成,Leader和Peon的已接受的最大提案号保持相同。最后一件事情,由于Leader的存在不需要做。

Paxos算法的第二阶段为Accept阶段。在这个阶段中,(d)Proposer根据在Prepare阶段中学习到的知识提出提案。(e)Acceptor根据接受到的提案的提案号决定拒绝还是接受。最后,(f)Proposer根据反馈情况决定提案是否得到批准。对Ceph来说,每次算法只有一个提案所以可以直接决定提案的值,因此不必关心(d)。对(e)和(f)的实现和标准Paxos算法保持一致。

Ceph的Paxos存在如下几个状态:
1) Recovery状态:Leader选举结束后进入该状态。该状态的目的是同步Quorum成员间的状态;
2) Active状态:即空闲状态,没有执行Paxos算法审批提案;
3) Updating状态:正在执行Paxos算法审批提案;
4) Updating Previous状态:正在执行Paxos算法审批旧提案,旧提案即Leader选举之前旧Leader提出但尚未批准的提案。

代码注释

函数
void Paxos::begin(bufferlist& v)
void handle_begin(MMonPaxos *begin)
void handle_accept(MMonPaxos *accept)
void commit()
void handle_commit(MMonPaxos *commit)Paxos属性
proposals //提案列表
accepted  // 接受(accept)新提案的节点,包括Leader和Peon
new_value

ceph存储 ceph集群Paxos算法实现相关推荐

  1. ceph存储 ceph整体学习记录(未整理较乱)

    转载:https://www.iyunv.com/thread-126458-1-4.html ceph源码下载: http://ceph.com/download/ 主要文档下载连接: http:/ ...

  2. p2p 文件服务器集群,基于云计算P2P流媒体服务器集群部署算法.doc

    基于云计算P2P流媒体服务器集群部署算法 基于云计算P2P流媒体服务器集群部署算法 摘 要: 针对云计算数据中心网络(DCN)环境下,P2P流媒体服务器集群部署引起的较高带宽占用问题,提出了一种基于云 ...

  3. p2p 文件服务器集群,基于云计算的P2P流媒体服务器集群部署算法.doc

    基于云计算的P2P流媒体服务器集群部署算法.doc 基于云计算的P2P流媒体服务器集群部署算法 摘 要: 针对云计算数据中心网络(DCN)环境下,P2P流媒体服务器集群部署引起的较高带宽占用问题,提出 ...

  4. 用Redis存储Tomcat集群的Session

    用Redis存储Tomcat集群的Session 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推 ...

  5. ceph存储 ceph集群监视器设置

    监视器配置参考 了解如何配置Ceph的监视器是建立一个可靠的Ceph的存储集群的重要组成部分.所有Ceph的存储集群中至少有一个监视器.监视器配置通常是一致的,但你可以添加,删除或替换集群中的一个监视 ...

  6. ceph存储 ceph集群ErasureCoding原理认知

    Ceph Erasure Coding Cognize 1.概述 RedHat公司日前发行了旗下Inktank Ceph企业版软件的1.2版本,增加了纠删码.缓存分层的特色,并且更新了管理和监控分布式 ...

  7. ceph1--ceph基础/搭建ceph高可用集群

    一.ceph基础 0.存储分类 单机存储 SCSI/IDE/SATA//SAS/USB/PCI-E/SSD/M.2NVME协议(提升性能) https://item.jd.com/4962067795 ...

  8. ceph 部署单机集群

    文章目录 ceph-deploy部署集群 ceph-deploy 部署单机 ceph-deploy 创建osd ceph osd创建资源池 ceph创建rbd块设备 ceph创建fs文件系统 本文档主 ...

  9. Ceph分布式文件系统集群搭建详解

    1.Ceph分布式文件系统简介 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统. Ceph 独一无二地在一个统一的系统中同时提供了对象.块.和文件存储功能. 基开发目标是: ...

最新文章

  1. xcache php5.3,CentOS 配置 xcache for php.5.3.3
  2. Linux-鸟菜-0-计算机概论
  3. centos ntfs-3g 安装和使用
  4. 如何用 Redis 实现延迟队列?
  5. 利用matlab对xml文件进行批量处理
  6. c++ 删除二叉树的子树_平衡二叉树
  7. Data Minig --- Decision Tree ID3 C4.5 Gini Index
  8. 华为交换机Trunk配置
  9. 从ARM裸机看驱动之按键中断方式控制LED(二)
  10. nemesis什么车_TSC名车品牌将推全新Nemesis全球最强超跑
  11. 大数据时代侦查机制有哪些改变
  12. EOVA_JFINAL实现分布式架构
  13. C语言 - 常见面试题整理
  14. 搭建邮件服务器 linux,Linux局域网邮件服务器搭建
  15. 过滤对象属性值为空的属性
  16. 《计算机工程》投稿经验
  17. Galgames Hgames下载中心,无毒
  18. SpringBoot Poi导出word,浏览器下载
  19. 老周语录-做出好产品的关键
  20. 分布式系统阅读笔记(十八)-----副本备份技术

热门文章

  1. R语言绘制股票K线图
  2. 从“冰山理论”看无代码开发与用户的科学分工
  3. 离散型特征编码方式:one-hot与哑变量
  4. Webpack项目中引入Bootstrap4.x
  5. Word文档打印时,出现“错误!未找到引用源。”
  6. 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
  7. 修改后的小米文件管理器(去掉远程管理)
  8. 轴承故障诊断之时域指标
  9. html是什么排列规律,单数和双数是什么 有什么排列规律
  10. 火狐浏览器播放媒体没有声音怎么办?