简介
- 分布式系统中,同一份数据通常会有多个副本,这样即使少数副本发生故障,系统仍可正常运行。这就需要一定的技术手段来保证多个副本之间的一致性。
- 通过 保证集群所有节点
log一致性
来保证log一致性保证了即可保证多个副本之间的数据一致性
- 通过 保证集群所有节点
基本原理
- 赢得”超过半数”副本投票的(候选)副本成为 Leader,由 Leader 代表所有副本对外提供服务;其他 Follower 作为备份。
- 当该 Leader 出现异常后(通信故障、运维命令等),其余 Follower 进行新一轮选举,投票出一个新的 Leader。
- Leader 和 Follower 之间通过心跳的方式相互探测是否存活,并以 Raft-wal 的方式写入硬盘,超过多个心跳仍无响应的副本会被认为发生故障。
并以 Raft-wal 的方式写入硬盘 啥意思?写入探测结果?
读写流程
- 对于客户端的每个写入请求,Leader 会将该写入以 Raft-wal 的方式,将该条同步给其他 Follower,并只有在“超过半数”副本都成功收到 Raft-wal 后,才会返回客户端该写入成功(即
日志复制
:所有 log 都必须交给 leader 节点处理,并由 leader 复制给其他节点
)。 - 对于客户端的每个读取请求,都直接访问 Leader,而 Follower 并不参与读请求服务。