知识卡片

Primary-Replica模型如何保证强一致性

专业/工作 · 555.e

内容

Ceph客户端不会同时给多个副本写数据,而是只连接Primary OSD发起写请求,由Primary负责把数据转发给Secondary、Tertiary等副本,只有确认所有副本都写入成功后,Primary才向客户端回应写完成。这样设计一方面因为所有写操作都经过同一个Primary做串行化,天然避免了多个客户端并发写入不同副本导致的冲突;另一方面客户端只需要和一个节点通信,减少了跨网络的连接数和带宽消耗。读操作默认也由Primary提供,保证读到的数据一定是最新写入的,需要分散读压力时才允许从其他副本读。发散:这是”通过引入一个临时的单点串行化入口来换取强一致性”的经典模式——牺牲一点点客户端到副本的直接并行度,换来完全不需要额外分布式锁就能保证顺序性,这个入口不是永久的中心节点,而是随PG归属动态变化的Primary角色。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第7章《分布式存储与Ceph》