知识卡片

Watcher通知机制让客户端惰性同步快照序号

专业/工作 · 236.e.6

内容

多个客户端同时挂载同一个 RBD 时,一个客户端创建快照后,其他客户端手里的快照序号会变旧。Ceph 没有强制所有客户端在快照创建瞬间同步刷新,而是靠两条互补的路径兜底:一是 OSD 端维护了一套 Watcher 回调通知机制,主动推送最新快照信息给关注该对象的客户端;二是即使某个客户端没能及时收到通知,它带着旧序号发起写请求时会被 [[快照写操作用seq比较驱动的COW规则|OSD 拒绝并返回 -EOLDSNAP]],客户端据此主动拉取最新序号后重试。前者是尽力而为的主动推送,后者是绝不会失效的兜底校验——组合起来既保证了大多数情况下的低延迟同步,又不需要为了保证严格实时同步而牺牲可用性。

参考来源

《Ceph源码分析》第9章《Ceph快照和克隆》