前言
为了保证分布式存储系统的高可靠和高可用,数据在存储系统中一般会冗余存储。当某个冗余数据所在的节点出现故障时(磁盘坏掉、静默错误、进程挂掉、机器宕机等),分布式存储系统能够返回其他冗余数据,从而实现自动容错。分布式存储系统的数据冗余一般有两种方式:副本冗余
和纠删冗余
,其中副本冗余是最常用的冗余方式,通常为3副本;纠删冗余是为了节省副本冗余的成本,多用于冷数据的存储。
目录
副本冗余
副本冗余是指同一份数据在存储系统中拥有相同的多个副本,一般为三副本。其中一个副本为主副本,其他两副本为从副本。复制协议也分为强同步复制和异步复制,二者的区别在于用户的写请求是否需要同步到各个副本才可以返回成功。如果主副本出现故障,分布式存储系统可以自动的切换到其他副本,实现自动容错。
异步复制
异步复制协议下,主副本写入成功后,不需要等待其他副本的ack,直接修改本地写成功然后返回客户端成功即可,比如可以使用单独的线程去异步的复制其他副本。好处在于系统的可用性比较好,延迟低,不易出现毛刺;但是一致性比较差,如果主副本出现故障,可能会丢失最后一部分更新操作。
同步复制
同步复制通俗的讲是主副本需要等待其他副本写入成功,才可以返回客户端成功,往往通过Log
的方式实现。同步复制经常需要通过一致性协议来保持正确性。比如Ceph通过基于OpLog
的自己设计的一致性协议来同步复制达到强一致、Raft则也是基于Log
来在多个节点达成共识。
在此不讨论异步复制,因为会有数据丢失的可能;同步复制往往和一致性协议有关,在后面一致性协议章节继续探讨。
纠删冗余
第二章内容
总结
第三章内容
参考资源
参考资源