Ceph Monitor基础架构与模块详解
转自:https://www.ustack.com/blog/ceph-monitor/
Ceph rados cluster离不开Monitor,如果没有Monitor,则Ceph将无法执行一条简单的命令。Monitor由于其特殊性,了解它,对于我们深入理解Ceph,保证Ceph的稳定性,有很大帮助。
Monitor 基本架构介绍
Monitor的基本架构图:

Monitor的主要任务就是维护集群视图的一致性,在维护一致性的时候使用了Paxos协议,并将其实例化到数据库中,方便后续的访问。所以Monitor基本上是由三类结构支撑起来的,第一类是管理各种map和相关内容的PaxosService实例,第二类是Paxos实例,第三类是对k/v store的封装,即MonitorDBStore实例。
这样看起来,分工是很明确的,PaxosService handle client过来的请求,Paxos用来处理Paxos协议相关的东西,一般在选主和处理update请求的时候才会涉及,而在处理读请求的时候一般不会涉及。 MonitorDBStore是处理数据存储相关的封装,用来将update的数据进行持久化。
模块详解
1、AuthMonitor
用来提供对auth的一致性,比如keyring,这些keyring的生成都是要走Paxos流程的。
2、LogMonitor
将log的东西写入到monitor,且是一致的,就是所有的mon都有这个日志。比如我们经常看到的wrongly marked me down就是由clog利用monitor的log机制发送到monitor的,这样你在osd上能看到,monitor里也可以查看到。可以将一些重要信息保存下来。
3、MdsMonitor
用来维护Mds的状态,然后通过Mdsmap来进行更新。目前Mds默认有一个Active,其它的是Standby。
4、OsdMonitor
用来维护Osd的状态,当osd有up,down等状态变化的时候,会改变osdmap,然后将osdmap通过随机选择一个osd 的方式将osdmap扩散出去。其中有些细微差别,比如up的时候,除了随机选择的osd外,还会将osdmap直接发送给向mon报启动的osd。
5、PGMonitor
用来维护PG的state,这些信息是由Primary osd来通过tick发送给Mon的。
6、K/V Store
对K/V Store(这里使用的是LevelDB)的封装是主要是在MonitorDBStore这个类中,其中封装的Op主要有三类:
- PUT操作
- ERASE操作
- COMPACT操作
目前Monitor可以通过重启(mon_compact_on_start)或者命令(ceph compact)来进行Compact,所以Monitor的空间是不会用的那么多。
7、Paxos
Paxos实例主要是实现Paxos协议,然后应用于选主和处理update请求。
选主(三个mon同时启动):
1) mon 启动进入prboing
2) 当一个mon probing到超半数的mon的时候,就会发起选举
3) 发起选举的mon会向所有的mon发起propose
4) mon处理propose消息的时候会根据自己的rank来决定是重新发起选举还是defer
5) 如果所有的mon 都ack,或者过半数mon回复ack(超时后检查),则选举成功,自己进行leader init,向其它mon发victory消息
6) 其它mon则lose_election,进入peon_init。
7) 在此之后,leader会发collect消息去收集peon的信息,为了后续处理请求能达成一致。
Ceph Monitor基础架构与模块详解的更多相关文章
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- Ansible安装部署及常用模块详解
Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...
- Spring学习(一)-----Spring 模块详解
官方下载链接:http://repo.spring.io/release/org/springframework/spring/ Spring 模块详解: Core 模块 spring-beans-3 ...
- 计算机网络基础之IP地址详解
计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...
- Python的logging模块详解
Python的logging模块详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
随机推荐
- 我的Android进阶之旅------>解决:Failed to create 'build\outputs\apk\watch-debug-unaligned.apks': 拒绝访问。
1. 错误描述 今天用Android Studio进行项目编译的时候,报错如下所示: FAILURE: Build failed with an exception. * What went wron ...
- Tomcat WEB站点部署
上线的代码有两种方式, 第一种方式是直接将程序目录放在webapps目录下面 第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面.下面让我们见识一下这种方式 这个网站里面已 ...
- Cocos2dx3.1-Android环境搭建初体验
初玩Cocos2dx,多多包涵. 感觉版本号之间的差异比較大.相对前面的版本号来说.3.X更easy上手.更方便了. 一.安装python.我的python-2.7.3. 配置环境变量 系统变量里:在 ...
- excel数据生成sql insert语句
excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age . 在你的excel表格中增加一列,利用excel的公式自动生成sql语句,方法如下: ...
- golang的极简流式编程实现
传统的过程编码方式带来的弊端是显而易见,我们经常有这样的经验,一段时间不维护的代码或者别人的代码,突然拉回来看需要花费较长的时间,理解原来的思路,如果此时有个文档或者注释写的很好的话,可能花的时间会短 ...
- mapreduce中获取输入文件的路径
InputSplit inputSplit = context.getInputSplit(); String fileName = ((FileSplit) inputSplit).getPath( ...
- Python 网络编程了解
阅读目录 一: 网络编程socket http://www.cnblogs.com/zhoujunhao/articles/7592671.html 二: TCP粘包处理 http://www.cnb ...
- BCB直接访问硬件端口和物理内存 - WinIO的应用
BCB直接访问硬件端口和物理内存 - WinIO的应用 (读硬盘参数和主板BIOS信息, 支持 Win9x/NT/2k/XP/2003) 关于直接访问端口, 有很多网站很多文章都讨论过, 但总找不到非 ...
- c#中类和成员的修饰符介绍
类访问修饰符: public 访问级别最高,公共访问没有限制. internal 只允许在本程序集内访问,其他程序集或站点引用其所在的程序集无法访问此类. 例如程序集LibraryA写有ClassA, ...
- PAT 天梯赛 L1-013. 计算阶乘和 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-013 AC代码 #include <iostream> #include <cstdio&g ...