暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Ping1024 2019-04-23
620

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_PINGMPing定期Ping Monitor确认Monitor的存在handle_ping
CEPH_MSG_MON_GET_MAPMMonGetMap认证前获取MonMaphandle_mon_get_map
CEPH_MSG_MON_METADATAMMonMetadata处理保存某个Monitor的系统信息(cpu,内存等)handle_mon_metadata
MSG_MON_COMMANDMMonCommand传递命令行消息给Monitor,Monitor再分发给相应的XXXMonitor进行处理handle_command
CEPH_MSG_MON_GET_VERSIONMMonGetVersion获取cluster map的版本信息handle_get_version
CEPH_MSG_MON_SUBSCRIBEMMonSubscribeCluster map订阅更新handle_subscribe
MSG_ROUTEMRoute路由请求转发(待确认)handle_route
MSG_MON_PROBEMMonProbe启动加入时需要向其他Monitor发送Probe请求handle_probe
MSG_MON_SYNCMMonSync同步Paxos状态数据handle_sync
MSG_MON_SCRUBMMonScrubMonitorDBStore数据一致性检测handle_scrub
MSG_MON_JOINMMonJoin如果不在MonMap中申请加入到MonMapMonmapMonitor::prepare_join
MSG_MON_PAXOSMMonPaxos选举完成后,leader会触发Paxos::leader_init,状态置为STATE_RECOVERING,并发起该消息的OP_COLLECT流程Paxos::dispatch
MSG_MON_ELECTIONMMonElection发起选举流程Elector::dispatch
MSG_FORWARDMForward将请求转发到leaderhandle_forward
MSG_TIMECHECKMTimeCheckMonitor每隔mon_timecheck_interval检测所有Monitor的系统时间来检测节点之间的时间差handle_timecheck
MSG_MON_HEALTHMMonHealth每隔mon_health_data_update_interval检测存放Monitor上面使用的leveldb数据的状态HealthMonitor::service_dispatch

3.2 AuthMonitor

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

3.3 OSDMonitor

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

3.4 PGMonitor

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

3.5 MonMapMonitor

消息类型消息结构体消息作用处理接口
MSG_MON_JOINMMonJoin更新MonMappreprocess_join
prepare_join
MSG_MON_COMMANDMMonCommand处理ceph mon xxx相关命令行preprocess_command
prepare_command

3.6 MDSMonitor

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


MSG_MDS_OFFLOAD_TARGETS


3.7 LogMonitor

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



文章转载自Ping1024,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论