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 |
网友评论