ceph OSD读写流程(1)–主OSD的处理流程

本文基于hammer版本对OSD的读写流程进行分析,对于消息的接收处理后续会单独进行分析。
primary-path
具体的处理流程从图中就可以体现出来,这里就不作过多的描述,需要提的几点:

  • 1)读请求由Primary OSD来进行处理;
  • 2)对于写请求,Primary OSD先发消息到副本OSD,然后记录PGLog(在log_operation里只是构造transaction,真正写到盘是和journal一起写的),然后再生成本地事务进行本地写的处理;
  • 3)写请求涉及到两步操作,一个是写journal,一个是写到本地缓存(page cache),对于每一个副本都有这两步操作,每个副本都是先写journal,然后再写到本地缓存,如果是3副本,就涉及到6次写操作;
  • 4)Primary OSD创建了2个回调函数来处理写journal和写到缓存(分别是C_OSD_RepopCommitC_OSD_RepOpApplied),主副本的写和从副本的写没有先后顺序,有可能主的journal先写完,也有可能从的journal先写完,ceph不管这个顺序,只要保证3副本都写完了之后才返回客户端响应(degrade情况下例外),3个副本的journal写完成(all_commit),会返回客户端“写操作完成”,而3个副本都写本地缓存完成后(all_applied),才返回客户端“数据可读”;