美文网首页
CEPH消息整理

CEPH消息整理

作者: 东京的雨不会淋湿首尔 | 来源:发表于2019-11-05 21:33 被阅读0次

    1. Librados

    objecter业务消息

    rwlock

    timer_lock

    linger_callback_lock

    MonClient业务消息

    消息类型 消息结构 消息作用 消息处理
    CEPH_MSG_MON_MAP MMonMap 处理获取MonMap请求; handle_monmap
    CEPH_MSG_AUTH_REPLY MAuthReply 处理认证返回请求 handle_auth
    CEPH_MSG_MON_SUBSCRIBE_ACK MMonSubscribeAck 订阅MonMap更新; handle_subscribe_ack
    CEPH_MSG_MON_GET_VERSION_REPLY MMonGetVersionReply 获取map版本信息 handle_get_version_reply
    MSG_MON_COMMAND_ACK MMonCommandAck 命令行请求返回处理 handle_mon_command_ack
    MSG_LOGACK MLogAck 向monitor发送Log后处理Log响应请求 handle_log_ack

    MonClient会在authenticate内部发送MMonSubscribe请求订阅MonMap,默认采用一次订阅,定时起会在mon_subscribe_interval/2之后重新发送订阅消息,如果MonMap有变化Monitor就会重新发送MonMap给MonClient;

    在初始化时调用schedule_tick,定时起每隔mon_client_ping_interval会send_keepalive并且查看认证的ticket是否过期,如果keepalive距目前时间超过mon_client_ping_timeout,那么会调用_reopen_session重新auth建立session,如果ticket过期,那么重新申请ticket;

    2. Monitor模块

    Monitor业务消息

    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_LOGACK
    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
    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
    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

    在PaxosService中调用完prepare_update后都会调用propose_pending发起决议,paxos结束后,更新clustermap到db中;

    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
    MonMapMonitor业务消息处理
    消息类型 消息结构体 消息作用 处理接口
    MSG_MON_JOIN MMonJoin 更新MonMap preprocess_join prepare_join
    MSG_MON_COMMAND MMonCommand 处理ceph mon xxx相关命令行 preprocess_command prepare_command
    MDSMonitor业务消息处理
    消息类型 消息结构体 消息作用 处理接口
    MSG_MDS_BEACON
    MSG_MDS_OFFLOAD_TARGETS
    LogMonitor业务消息处理
    消息类型 消息结构体 消息作用 处理接口
    MSG_LOG

    所有业务消息类型解析的源码为Message *decode_message(switch优化);

    Monitor处理业务消息接口实现为Monitor::dispatch

    3. OSD模块

    OSD业务消息

    objecter与OSD交互对象操作业务消息
    消息描述
    Op类型 Op作用 处理函数
    CEPH_OSD_OP_READ 读对象 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_STAT 获取对象信息 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_WRITE 写对象数据 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_TRUNCATE 截断对象 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_APPEND 附加对象数据 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_CREATE 创建对象 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_GETXATTR 获取对象附加属性 ReplicatedPG::do_osd_ops
    CEPH_OSD_OP_SETXATTR 设置对象附加属性 ReplicatedPG::do_osd_ops

    以上CEPH_OSD_OP_xxx定义在rados.h中,无法直接通过编辑器或IDE找到定义,而是通过宏__CEPH_FORALL_OSD_OPS(GENERATE_ENUM_ENTRY)内部连接符定义。

    MOSDOp 代码处理流程简述

    TODO:确认CEPH_OSD_OP_CALL这个消息的作用,跟cls是否有关;

    TODO: 阅读do_pg_op中的内容

    OSD与OSD交互业务消息
    消息描述
    Op类型 消息结构 消息类型 Op作用 处理函数
    OSDOp/ CEPH_OSD_OP_SCRUB_MAP MOSDSubOp MSG_OSD_SUBOP 响应ScrubMap给PrimaryPG ReplicatedPG::do_sub_op
    OSDOp/ CEPH_OSD_OP_SCRUB_RESERVE MOSDSubOp MSG_OSD_SUBOP PrimaryPG向ReplicatedPG scrub开始时发送scrub reserve ReplicatedPG::do_sub_op
    PushOp MOSDPGPush MSG_OSD_PG_PUSH ReplicatedPG获取PrimaryPG的Push请求恢复最新数据 ReplicatedBackend::handle_message
    PullOp MOSDPGPull MSG_OSD_PG_PULL PrimaryPG向ReplicatePG主动拉取最新数据 ReplicatedBackend::handle_message
    __u32/ OP_BACKFILL_PROGRESS MOSDPGBackfill MSG_OSD_PG_BACKFILL 在发生永久性故障或者PGlog无法起到恢复作用时,需要做全量恢复,同样也是PrimaryPg主动发起Backfill向ReplicatedPG复制数据 ReplicatedPG::do_backfill
    MOSDPGQuery MSG_OSD_PG_QUERY 命令行查询pg状态信息 OSD:: handle_pg_query
    MOSDPGCreate MSG_OSD_PG_CREATE 创建PG OSD:: handle_pg_create
    MOSDPGNotify MSG_OSD_PG_NOTIFY Nonprimary到primary发送 OSD:: handle_pg_notify
    MOSDPGInfo MSG_OSD_PG_INFO 获取PG信息 OSD:: handle_pg_info
    MOSDPGLog MSG_OSD_PG_LOG PG log OSD:: handle_pg_log
    MOSDPGRemove MSG_OSD_PG_REMOVE 删除PG OSD:: handle_pg_remove
    MOSDPGTrim MSG_OSD_PG_TRIM PG修剪 OSD:: handle_pg_trim
    MBackfillReserve MSG_OSD_BACKFILL_RESERVE PG Backfill开始前资源申请 OSD:: handle_pg_backfill_reserve
    MRecoveryReserve MSG_OSD_RECOVERY_RESERVE PG Recovery开始前资源申请 OSD:: handle_pg_recovery_reserve
    MOSDRepScrub MSG_OSD_REP_SCRUB PrimaryPG向ReplicatedPG请求scrubmap PG::replica_scrub
    MOSDRepOp MSG_OSD_REPOP 类似于MOSDSubOp ReplicatedBackend::handle_message
    __u32/OP_SCAN_GET_DIGEST MOSDPGScan MSG_OSD_PG_SCAN 扫描PG内容 ReplicatedPG::do_scan
    MOSDECSubOpRead MSG_OSD_EC_READ 纠删码读数据 ECBackend::handle_message
    MOSDECSubOpWrite MSG_OSD_EC_WRITE 纠删码写数据 ECBackend::handle_message
    Monitor与OSD交互业务消息
    消息结构 消息类型 消息作用 处理函数
    MOSDScrub MSG_OSD_SCRUB 命令行启动scrub机制 OSD:: handle_scrub
    MOSDMAP CEPH_MSG_OSD_MAP OSD map更新后发送给OSD OSD::handle_osd_map

    相关文章

      网友评论

          本文标题:CEPH消息整理

          本文链接:https://www.haomeiwen.com/subject/bwoebctx.html