转自: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基础架构与模块详解的更多相关文章

  1. 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析

    第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...

  2. Ansible安装部署及常用模块详解

    Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...

  3. Spring学习(一)-----Spring 模块详解

    官方下载链接:http://repo.spring.io/release/org/springframework/spring/ Spring 模块详解: Core 模块 spring-beans-3 ...

  4. 计算机网络基础之IP地址详解

    计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...

  5. Python的logging模块详解

          Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...

  6. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  7. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  8. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  9. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

随机推荐

  1. Java中堆内存与栈内存分配浅析

    Java把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间, ...

  2. module使用

    官方文档:http://modules.sourceforge.net/ 加载 module load 卸载 module unload 查看已加载 module list 查看可用 module a ...

  3. elastic search 查询语句

    部署了半个月,分析一下数据: 需要提前知道的是,tpot中,每天的数据存一个index,然后每个index里面有不同的type,每条请求一个document 共24万条请求: 查看整个集群所有数据 以 ...

  4. sp_who 查看数据库连接数

    create table #TempTable(spid int,ecid int,statusvarchar(32),loginname varchar(32),hostname varchar(3 ...

  5. vc判断当前用户是否具有administrator 权限代码

    BOOL IsAdmin() { HANDLE hAccessToken; BYTE * InfoBuffer = ]; PTOKEN_GROUPS ptgGroups; DWORD dwInfoBu ...

  6. struct 模块 把一个类型,如数字,转成固定长度的bytes

    该模块可以把一个类型,如数字,转成固定长度的bytes import struct headers=struct.pack('i',132333) print(headers,len(headers) ...

  7. android 布局属性详解

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料. 第一类:属性值为true或falseandroid:layout_centerHrizontal ...

  8. C# 调用win api获取chrome浏览器中地址

    //FindWindow 查找窗口 //FindWindowEx查找子窗口 //EnumWindows列举屏幕上的所有顶层窗口,如果回调函数成功则返回非零,失败则返回零 //GetWindowText ...

  9. Oracle Shared Pool 原理

    Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...

  10. java 获取request参数集

    request里有两个方法 request.getParameterMap(); request.getParameterNames(); 我想用这两种方法获取. 1.用request.getPara ...