当 Leader 选出来之后,Client 客户端发起的写请求都会由 Leader 节点来处理。
即使其他的 Follower 节点收到了 Client 客户端的请求,也会将请求转交给 Leader 来处理。
Leader 接收到 Client 的请求之后,会优先将数据写入到自身节点的 log 日志文件中。
被写入到日志文件里的日志条目,被称为 append entries 。
Leader 将发送 append entries 消息给其他节点,这里并不是每次都将相同的日志条目,都发送给其他节点,而是根据节点的不同对应的消息也是不同的。因为集群中节点之间数据可能会有不一致的情况。
其他 Follower 节点收到 Leader 的消息后,将数据添加到本地,然后返回给 Leader 响应,确认消息已收到。
Leader 节点收到其他节点确认消息且过半数,先 Commit 提交记录,返回 Client 客户端响应。
然后,Leader 节点再次向其他 Follower 节点发送 Commit 提交数据通知。
其他 Follower 节点收到通知后,Commit 提交自身的日志条目数据,返回 Leader 更新结束的通知。
日志条目提交保证两点:
容错:
在数量少于 Raft 服务器节点总数一半的 Follower 失败的情况下 ,Raft 集群仍然可以正常处理来自客户端的请求。
确保重叠:
一旦 Leader 响应了一个客户端的请求,即使出现了 Raft 集群中少数服务器的失败,也会有一个服务器包含所有以前提交的日志条目。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。