Li Sheng | Backend / Distributed Storage Engineer Li Sheng | Backend / Distributed Storage Engineer
Home
Resume
Projects
Topics
Notes
GitHub (opens new window)
Home
Resume
Projects
Topics
Notes
GitHub (opens new window)
  • Go语言

  • C++

  • 算法题

  • 存储系统

    • 导航

    • 单机IO基础

    • IO语义与持久化

    • 块层与高速路径

    • Ceph

      • 架构与核心概念

        • Ceph架构设计
        • ceph分布式存储-MDS介绍
        • ceph分布式存储-MON模块内部结构分析
          • 3.1 Monitor自身
          • 3.2 AuthMonitor
          • 3.3 OSDMonitor
          • 3.4 PGMonitor
          • 3.5 MonMapMonitor
          • 3.6 MDSMonitor
          • 3.7 LogMonitor
      • 数据分布与一致性

      • 数据路径与存储引擎

      • 运维与调优

      • 实验与性能测试

    • DAOS

    • 归档

  • CephFS

  • 分布式系统

  • 计算机网络

  • Redis与缓存

  • Kubernetes

  • 技术笔记
  • 存储系统
  • Ceph
  • 架构与核心概念
lisheng
2024-10-27
目录

ceph分布式存储-MON模块内部结构分析

# 1. 模块简介

Monitor 作为Ceph的 Metada Server 维护了集群的信息,它包括了6个 Map, 分别是 MONMap,OSDMap,PGMap,LogMap,AuthMap,MDSMap。 其中 PGMap 和 OSDMap 是最重要的两张Map。

# 2. 模块的基本结构

image.png

  1. Monitor内部使用一套Paxos来实现各种数据的更新,所以所有继承自PaxosService的Monitor 实现数据更新时需要通过Paxos达成一致后才能进行。
  2. PaxosService的dispatch内部调用子类的preprocess_query进行查询相关操作,如果非查询类处理, 再调用子类的prepare_update接口实现数据的更新,所以子类Monitor实现两个接口来处理相关的业务消息。

# 3. Monitor业务消息

# 3.1 Monitor自身

消息类型 消息结构体 消息作用 处理接口
CEPH_MSG_PING MPing 定期Ping Monitor确认Monitor的存在 handle_ping
CEPH_MSG_MON_GET_MAP MMonGetMap 认证前获取MonMap handle_mon_get_map
CEPH_MSG_MON_METADATA MMonMetadata 处理保存某个Monitor的系统信息(cpu,内存等) handle_mon_metadata
MSG_MON_COMMAND MMonCommand 传递命令行消息给Monitor,Monitor再分发给相应的XXXMonitor进行处理 handle_command
CEPH_MSG_MON_GET_VERSION MMonGetVersion 获取cluster map的版本信息 handle_get_version
CEPH_MSG_MON_SUBSCRIBE MMonSubscribe Cluster map订阅更新 handle_subscribe
MSG_ROUTE MRoute 路由请求转发(待确认) handle_route
MSG_MON_PROBE MMonProbe 启动加入时需要向其他Monitor发送Probe请求 handle_probe
MSG_MON_SYNC MMonSync 同步Paxos状态数据 handle_sync
MSG_MON_SCRUB MMonScrub MonitorDBStore数据一致性检测 handle_scrub
MSG_MON_JOIN MMonJoin 如果不在MonMap中申请加入到MonMap MonmapMonitor::prepare_join
MSG_MON_PAXOS MMonPaxos 选举完成后,leader会触发Paxos::leader_init,状态置为STATE_RECOVERING,并发起该消息的OP_COLLECT流程 Paxos::dispatch
MSG_MON_ELECTION MMonElection 发起选举流程 Elector::dispatch
MSG_FORWARD MForward 将请求转发到leader handle_forward
MSG_TIMECHECK MTimeCheck Monitor每隔mon_timecheck_interval检测所有Monitor的系统时间来检测节点之间的时间差 handle_timecheck
MSG_MON_HEALTH MMonHealth 每隔mon_health_data_update_interval检测存放Monitor上面使用的leveldb数据的状态 HealthMonitor::service_dispatch

# 3.2 AuthMonitor

消息类型 消息结构体 消息作用 处理接口
MSG_MON_COMMAND MMonCommand 处理ceph auth xxx命令行相关处理 preprocess_command处理ceph auth get/export/list等
prepare_command处理ceph auth import/add/get-or-create/caps等
CEPH_MSG_AUTH MAuth 实现认证和授权消息处理 prep_auth

# 3.3 OSDMonitor

消息类型 消息结构体 消息作用 处理接口
CEPH_MSG_MON_GET_OSDMAP MMonGetOSDMap 获取OSDMap preprocess_get_osdmap
MSG_OSD_MARK_ME_DOWN MOSDMarkMeDown OSD shutdown之前通知Monitor发送该消息 preprocess_mark_me_down
prepare_mark_me_down
MSG_OSD_FAILURE MOSDFailure 1. OSD每隔OSD_TICK_INTERVAL检测心跳无响应的OSD,并将失败的OSD report给Monitor
2. Monitor判断上报次数>=mon_osd_min_down_reports,那么就将target_osd标识为down
preprocess_failure
MSG_OSD_BOOT MOSDBoot 新OSD加入时发送请求到Monitor,参考新OSD的加入流程 preprocess_bootprepare_boot
MSG_OSD_ALIVE MOSDAlive OSD判断up_thru_wanted决定是否发送请求给Monitor,Monitor发送Incremental OSDMap返回给OSD preprocess_alive
prepare_alive
MSG_OSD_PGTEMP MOSDPGTemp Primary OSD处于backfilling状态无法提供读取服务时,会发送该消息到Monitor,将PG临时映射到其他的OSD上提供去服务 preprocess_pgtemp
prepare_pgtemp
MSG_REMOVE_SNAPS MRemoveSnaps 删除快照信息 prepare_remove_snaps
CEPH_MSG_POOLOP MPoolOp 删除/创建Pool,创建/删除pool快照等 prepare_pool_op

# 3.4 PGMonitor

消息类型 消息结构体 消息作用 处理接口
CEPH_MSG_STATFS MStatfs 返回文件系统osd占用的kb容量 handle_statfs
MSG_PGSTATS MPGStats 查询或者更新pg状态 preprocess_pg_stats
prepare_pg_stats
MSG_GETPOOLSTATS MGetPoolStats 获取pool汇总状态信息 preprocess_getpoolstats
MSG_MON_COMMAND MMonCommand 处理ceph pg xxx相关命令行 preprocess_command

# 3.5 MonMapMonitor

消息类型 消息结构体 消息作用 处理接口
MSG_MON_JOIN MMonJoin 更新MonMap preprocess_join
prepare_join
MSG_MON_COMMAND MMonCommand 处理ceph mon xxx相关命令行 preprocess_command
prepare_command

# 3.6 MDSMonitor

消息类型 消息结构体 消息作用 处理接口
MSG_MDS_BEACON
MSG_MDS_OFFLOAD_TARGETS

# 3.7 LogMonitor

消息类型 消息结构体 消息作用 处理接口
MSG_LOG
Edit (opens new window)
Last Updated: 2026/04/27, 18:05:52
ceph分布式存储-MDS介绍
CRUSH算法

← ceph分布式存储-MDS介绍 CRUSH算法→

最近更新
01
待完成专题池
04-28
02
待完成专题池
04-28
03
为什么 Kubernetes CSI 插件架构要拆成 Controller、Node 与 Sidecar
04-28
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式