ceph Monitor原理和代码流程介绍

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.mzph.cn/news/68382.shtml

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

相关文章

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…

嵌入式学习笔记(12)汇编写启动代码之设置栈和调用C语言

C语言运行时需求和栈的意义 “C语言运行时&#xff08;runtime&#xff09;”需要一定的条件&#xff0c;这些条件由汇编来提供。C语言运行时主要是需要栈。 C语言和栈的关系&#xff1a;C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给C部分预先设置合理合法的栈…

【STM32】学习笔记-时间戳RTC

Unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区通…

命令执行漏洞复现攻击:识别威胁并加强安全

环境准备 这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 一、攻击相关介绍 原理 主要是输入验证不严格、代码逻辑错误、应用程序或系统中缺少安全机制等。攻击者可以通过构造特定的输入向应用程序或系统注入恶意代码&#xff…

Linux下 /sys/class 一些操作

Linux下&#xff0c;/dev、/sys/class的区别 /dev下面有很多节点&#xff0c;每一个节点代表一个设备&#xff0c;/dev目录下面是按物理器件进行分类&#xff1b;而/sys/class下面的更多是按功能抽象出来的。 参考1 demo 在正点原子的基础上进行演示 #include <linux/ty…

基于Matlab实现多个图像压缩案例(附上源码+数据集)

图像压缩是一种将图像数据量减少的技术&#xff0c;以减少存储空间和传输带宽的需求。在本文中&#xff0c;我们将介绍如何使用Matlab实现图像压缩。 文章目录 简单案例源码数据集下载 简单案例 首先&#xff0c;我们需要了解图像压缩的两种主要方法&#xff1a;有损压缩和无…

防火墙日志分析工具

防火墙提供对进入组织网络的网络流量的来源和类型的可见性&#xff0c;这使得防火墙日志成为重要的信息源&#xff0c;包括所有连接的源地址、目标地址、协议和端口号等详细信息&#xff0c;此信息可以提供对未知安全威胁的见解&#xff0c;是威胁管理中的重要工具。 防火墙日…

bat批处理——统计当前文件夹下的所有文件名

一、在当前文件夹下建立XX.txt文件&#xff0c;将指令dir *.* /b/s>test.txt写到XX.txt文件中 测试文件夹目录及文件结构图&#xff1a; 指令说明&#xff1a; dir *.* /b/s>test.txt /*** 此部分为注释内容* dir 获取当前目录下的目录及文件* *.* 对文件进行筛选&…

手写Mybatis:第17章-Plugin插件功能实现

文章目录 一、目标&#xff1a;Plugin插件二、设计&#xff1a;Plugin插件三、实现&#xff1a;Plugin插件3.1 工程结构3.2 Plugin插件代理模式类图3.3 自定义拦截注解3.3.1 方法签名3.3.2 拦截注解 3.4 拦截器接口定义3.4.1 调用信息3.4.2 拦截器接口 3.5 类代理包装操作3.5.1…

冯诺依曼体系结构/什么是OS?

一、体系结构图 示意图 控制器可以控制其它4个硬件&#xff0c;四个硬件直接可以进行数据传输。 5大硬件 但是这些个体需要用“线”连接。 为什么要有存储器&#xff1f; 如果没有&#xff0c;实际速度则为输入、输出设备的速度。 加上后&#xff0c;变为内存的速度。&#…

大厂面试 | 百度一面,顶不住

题目来源&#xff1a;https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348 前文 本期是【捞捞面经】系列文章的第 2 期&#xff0c;持续更新中…。&#xff08;更多与往期下方仓库直达&#xff09; 《捞捞面经》系列正式开始连载啦&#xff0c;据说看…

Kubernetes(k8s) 架构原理一文详解

目录 一、k8s 概述 1.什么是k8s&#xff1f; 2.特性 3.主要功能 三、集群架构与组件 1.Master 组件 &#xff08;1&#xff09;Kube-apiserver &#xff08;2&#xff09;Kube-controller-manager &#xff08;3&#xff09;Kube-scheduler 2.配置存储中心 3.Node 组…

【Sentinel】ProcessorSlotChain处理器插槽链与Node

文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断…

一文读懂GPU显卡的10个重要参数

在当今的高性能计算机世界中&#xff0c;GPU显卡的性能至关重要。这一领域的快速发展&#xff0c;使得图形渲染、游戏体验、视频编辑等高性能计算任务变得更加高效和流畅。正因如此&#xff0c;选择一款合适的GPU显卡变得越来越重要。在挑选GPU显卡时&#xff0c;了解其关键参数…

【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(综合知识)

本文为系统集成项目管理工程师考试(软考) 2023 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析(问答题 4 道,75分)综合知识(选择题*75)1-10 题11-20 题21-30 题31-40 题41-50 题51-60 …

进程、线程与构造方法

进程、线程与构造方法 目录 一&#xff0e; 进程与线程1. 通俗解释2. 代码实现3. 线程生命周期&#xff08;图解&#xff09; 二&#xff0e; 构造方法 一&#xff0e; 进程与线程 1. 通俗解释 进程&#xff1a;就像电脑上运行的软件&#xff0c;例如QQ等。 线程&#xff1a;…

接口测试与功能测试的区别~

今天为大家分享的是我们在日常测试工作中, 一定会接触并且目前在企业中是主要测试内容的 功能测试与接口测试 一.功能测试与接口测试的基本概念。 1.1 什么是功能测试呢? 功能测试: 是黑盒测试的一方面, 检查实际软件的功能是否符合用户的需求 功能测试测试的内容包括以下…

改变金融贷款市场营销方式 ---- 运营商大数据精准获客

与传统的企业网络营销相比&#xff0c;最常见的是网络推广和硬广告推广。一些企业无法找到可靠准确的数据来源&#xff0c;也无法找到一些未知的总数据。这些数据大多存在持续时间长、准确性差的缺点&#xff0c;企业在将这些数据信息应用于商品在线营销时往往会遇到不足。 在…

SpringCloudAlibaba之Sentinel介绍

文章目录 1 Sentinel1.1 Sentinel简介1.2 核心概念1.2.1 资源1.2.2 规则 1.3 入门Demo1.3.1 引入依赖1.3.2 集成Spring1.3.3 Spring中资源规则 1.4 Sentinel控制台1.5 核心原理1.5.1 NodeSelectorSlot1.5.2 ClusterBuilderSlot1.5.3 LogSlot1.5.4 StatisticSlot1.5.5 Authority…