ceph Monitor原理和代码流程介绍

news2024/11/23 10:49:30

Monitor介绍

Monitor在Ceph集群中扮演管理者的角色,维护了整个集群的状态,集群的状态被抽象成几个Map对象,包括monmap、osdmap、mdsmap、authmap、logmap等,保证集群的相关组件在同一时刻能够达成一致,相当于领导层。其中osdmap的更新采用了类似于灰度发布的机制,这会造成在某一时刻集群中所有OSD或Client持有的osdmap的版本可能不一致。

一句话总结Monitor的作用就是:负责收集集群信息、更新集群信息以及发布集群信息。

如果Monitor只有一个,那么事情就会容易很多,集群信息的增删改查都由这一个Monitor完成,但是这样会导致单点故障或性能热点问题,作为分布式解决方案Ceph会部署多个Monitor来规避单点故障。这样就引入了新的问题,例如:如何管理多个Monitor节点?数据谁来更新?多个Monitor之间如何同步数据?如何保持数据的一致性?等等。这样在Ceph集群中,Monitor做的事情就可以概况成两点:1)管理好自己:怎么更新数据?怎么同步数据?等。2)管理好集群:哪些数据,存在哪里?数据一致性等。

Monitor的基本架构

Ceph的Monitor维护了一份集群Map的主拷贝,Ceph通常包含一系列的Monitors,映射给Client。一个Monitor包含K/V store、Paxos、PaxosService。K/V store用于持久化存储Monitor数据,Paxos提供了对PaxosService的数据访问逻辑的一致性,每个PaxosService代表了集群的一种状态信息,以key-value的形式写入PaxosService层。

Monitor初始化主要流程:

Monitor会在启动或重启时,Connect连接monmap中的其他Monitor。如果第一次启动,Monitor会根据配置文件构建monmap,并存储到MonitorDBStore数据库中。如果不是第一次启动,Monitor会从MonitorDBStore数据库中读取monmap。Messenger是网络线程模块,Monitor会初始化它,并注册请求的回调处理函数。bootstrap处理会多次调用,在Monitor整个生命周期中非常重要。bootstrap之后,Monitor处于STATE_PROBING状态,Monitor会与其他Monitors通信并同步信息,然后集群开始选举,决定Monitor的角色。

Monitor状态转换:

STATE_PROBING:boostrap过程中节点间相互探测,发现数据差距;

  • STATE_SYNCHRONIZING:当数据差距较大无法通过后续机制补齐时,进行全同步;
  • STATE_ELECTING:Monitor在进行选主;
  • STATE_LEADER:当前Monitor成为Leader;
  • STATE_PEON:非Leader节点;

分布式系统的数据一致性

对分布式系统来说,数据的一致性尤为重要,在monitor节点中,有Leader和Peon两种角色,客户端的读操作Leader和Peon都能处理,而写操作都发送给Leader节点,由Leader节点分发给Peon节点。Paxos算法保证了一次修改操作只能批准一个值,从而保证分布式系统的数据一致性。

节点之间的通信模型

通常有两种:共享内存和消息传递,Paxos是基于消息传递的通信模型。

Paxos的转换时机:

#1. 在monitor启动时,完成Paxos的初始化操作;

#2. 在monitor进入bootstrap时,Paxos进行restart操作;

#3. monitor根据选举结果,Paxos初始化为对应的Leader或Peon;

#4. monitor异常后,Paxos进入recovery阶段;

#5. monitor运行过程中,进行Paxos决议;

概念解释

Epoch值

每次选举产生新的Leader,也会产生新的Epoch,不选举则不会改变Epoch。Leader发送的所有消息,都会带有这个Epoch,如果网络分区等现象,有新的选举发生,则根据Epoch就发现Leader已经变了。没有Leader则不需要Epoch。

Rank值

Rank值可以理解为ID值,代表主机节点在monmap中的位置,跟IP地址有关,如果主机还不在monmap中,此时rank=-1。rank值在选举中会用到,Leader的选择是根据rank值来定的,规则是rank值小的为Leader。

PN(Proposal Number)

Leader当选后,首先执行一次Phase 1过程,以确定PN。 在其为Leader期间, 所有的Phase 2操作都使用这个PN,这样就省略了大量的Phase 1操作,这也是Paxos能够减小网络开销的原因。PN是必须的,无论是否有Leader,都必须有PN。

Version

可以理解成Paxos的instance ID。

"uncommitted"开头的值,所有的提案都正常commit,就不会存在,如:正常关机,只有在异常情况下,才会存储尚未提交的提案。

Paxos的几个状态:

1)Recovery状态:Leader选举结束后进入该状态,目的是同步Quorum成员间的状态。

2)Active状态:空闲状态,没有审批提案,等待。

3)Updating状态:正在执行审批提案。

4)Updating Previous状态:正在审批上次的提案,即:Leader选举之前旧Leader提出但尚未批准的提案。

5)Writing状态:提交本次提案数据。

6)Writing Previous状态:提交上次尚未批准的提案数据。

7)Refresh状态:提案已完成提交。

Monitor的消息分发

Monitor进程只创建了一个Messenger,也就意味着它只有一个dispatch_queue队列和一个dispatcher线程,所有的请求都会排队。Monitor还会初始化一个timer,其会创建一个线程来处理所有的消息超时事件,包括probe、propose、lease等消息,所以这些消息的处理也是串行的。

Monitor如何处理Client请求的?

当Client发送请求给Monitor时,Monitor首先分发请求给相应的PaxosService,PaxosService会根据读操作或写操作调用方法,PaxosService决定是否触发propose处理流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

语言深入理解指针(非常详细)(三)

目录 数组名的理解使用指针访问数组 一维数组传参的本质二级指针指针数组指针数组模拟二维数组 数组名的理解 在上⼀个章节我们在使用指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0];这里我们使用 &am…

医者无疆 | AI赋能大医精诚,医疗制药的进阶与突破

在历史的长河中,医学一直是人类文明的重要组成部分。从古希腊的希波克拉底到现代医学研究,医学始终与时俱进,为人类的健康和福祉做出了巨大的贡献。在互联网、大数据、5G等信息技术的迭代下,人工智能(AI)的…

cpp20规范 vs2019 STL库 unordered_map源码分析(整理后上传)

(1) unordered_map 模板有如下的模板调用和包含关系。 绿箭头1 处的模板类,继承了绿箭头2 , 绿箭头2 又继承了红框模板。但红框模板有一个泛化版本和一个特化版本,选择哪一个呢? 经过源代码查找&#xff0…

腾讯张乐:“反内卷”潮流已至,研发效能是软件企业必由之路

目录 Why|“狂飙”踩下刹车,“湖水岩石效应”加速显现 What|效能 ≠ 效率,效能 效率 有效性 How|研发效能“黄金三角” e.g.|软件研发效能实践中的“坑”与“解” 1. 忽视重视工程师的声音 2. “迷…

【Spring】SpringBoot的10个参数验证技巧

这里写目录标题 前言1.使用验证注解2 使用自定义验证注解3 在服务器端验证4 提供有意义的错误信息5 将 i18n 用于错误消息messages.properties6 使用分组验证7 对复杂逻辑使用跨域验证8 对验证错误使用异常处理9 测试你的验证逻辑10 考虑客户端验证总结 前言 参数验证很重要&am…

跨空间域数据管理分布式共识算法:现状、挑战和展望

跨空间域数据管理分布式共识算法:现状、挑战和展望 李伟明1,李彤1,2, 张大方1,戴隆超1,2, 柴云鹏1,2 1 中国人民大学信息学院,北京 100872 2 数据工程与知识工程教育部重点实验室,北京 100872 摘要:随着数字…

生信学院|09月08日《SOLIDWORKS扣合特征应用》

课程主题:SOLIDWORKS扣合特征应用课程时间:2023年09月08日 14:00-14:30主讲人:陈冬冬 生信科技 售后服务工程师1、什么是扣合特征2、唇缘与凹槽3、装配体凸4、台通风孔5、弹簧扣与弹簧扣卡槽请安装腾讯会议客户端或APP,微信扫描海…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——分堆分配

⛲️ 一、考点讲解 1.方法介绍 在排列组合中,经常遇到元素分堆或分组问题,尤其难点是出现等数量的分堆,很多考生容易犯错误。 2.方法应用 平均分成的组,不管他们的顺序如何,都是一种情况,所以分组后一定要…

HTML5-3-表格

文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr&#xff1a;tr 是 table row 的缩写&#xff0c;表示表格的一行。td&#xff1a;td 是 table data 的缩写&#xff0c;表示表格的数据单元格。th&#xff1a;th 是 table header的缩…

Python中if __name__ == ‘__main__‘:的作用和原理

if name ‘main’:的作用 一个python文件通常有两种使用方法&#xff0c; 第一是作为脚本直接执行&#xff0c;第二是 import 到其他的 python 脚本中被调用&#xff08;模块重用&#xff09;执行。 举例说明如下&#xff1a; 在本文件中&#xff0c;name 是main 在被impor…

Vue3---uni-app--高德地图引用BUG

先给报错信息&#xff1a;module libs/map//libs/map_min.js is not defined, require args is /libs/map_min.js 查看我引用方法&#xff1a; 本人查阅资料发现 是 require 使用的是 commonJS方式引用说这个适配Vue2可我项目是Vue3应该使用ES6语法糖 然后我有跑了项目发现BU…

【Unity编辑器扩展】 | 编辑器扩展入门基础

前言 【Unity编辑器扩展】 | 编辑器扩展入门基础一、基本概念二、核心知识点 简述三、相关API 总结 前言 当谈到游戏开发工具&#xff0c;Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境&#xff0c;使他们能够创建令人惊叹的游戏和交互式体验。然而…

1.若依框架介绍与环境搭建

文章目录 若依框架介绍官网地址相关技术栈 环境搭建1.git介绍下载与安装学习资料 2.maven介绍与下载环境变量配置资料学习 3.node4.java5.idea6.vscode7.mysql可视化工具HeidiSql 8.redis参考资料遇到问题 若依框架介绍 官网地址 若依框架官网地址&#xff1a;http://www.ruo…

stm32 学习笔记:GPIO输出

一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V&#xff0c;对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方&#xff0c;都可以用GPIO来完成&#xff0c;如果控制的功率比较大的设备&#xff0c;只需加入驱动电路即可 GPIO 通用输入输出口&#xff0c;可配置为 8种 …

【程序员必知必会3】你还不懂ClickHouse和Hive的区别?!

ClickHouse和Hive究竟哪些区别 ClickHouse和Hive都是用于大数据处理和分析的分布式存储和计算系统&#xff0c;但它们之间存在一些区别&#xff1a; 架构&#xff1a;ClickHouse采用列式存储和向量化执行引擎&#xff0c;可以实现亚秒级别的数据查询。而Hive采用基于Hadoop的数…

Nancy2.0引入Swagger并设置其为嵌入的资源

因为项目需求&#xff0c;需要在Nancy的基础上引入Swagger&#xff0c;万能的互联网上有现成的方案&#xff0c; 方案写的很详细&#xff0c;实际按文档也成功的实现了相应的功能&#xff0c;但因为我是在基础dll里包含了该功能&#xff0c;所以我希望swagger-ui是作为嵌入的资…

实时操作系统Freertos开坑学习笔记:(七):队列

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么&#xff1f;而在freertos中&#xff0c;队列是什么呢&#xff1f;①如果要进行中断、任务的交流&#xff0c;那我用全局变量行吗&#xff1f;②…

VMware虚拟机安装_新虚拟机创建_CentOS镜像导入_linux指令基本操作

文章目录 1 VMware下载安装1.1 下载网址1.2 安装步骤 2 创建虚拟机与CentOS镜像导入2.1 创建新虚拟机2.2 导入CentOS镜像 3 获取ip与连接Xshell3.1 查看虚拟机ip地址3.2 Xshell使用 1 VMware下载安装 1.1 下载网址 https://www.vmware.com/cn/products/workstation-pro/works…

MySQL的虚拟字段

MySQL中的虚拟字段指的是不实际存在于表中的逻辑字段,它们是在查询时由一些函数或表达式临时生成的。 参数&#xff1a;虚拟类型 在 MySQL 中,字段类型可以分为存储类型(Stored)和虚拟类型(Virtual)。存储类型是指实际存储在表中的数据类型,如 INT, VARCHAR, TEXT …

vue3 判断包含某个字符

<img v-if"node.level 1 && checkIfIncludeSubStr(node.label, 人口)"src"/assets/images/icon-convention-01.png" width"16"class"inlineBlock Vmiddle" style"margin-right: 8px;"/>const data reactive…