K8s中的ETCD存储机制

在这里插入图片描述

当客户端有请求发到Leader时

第1步:做预检查,会检查当前节点的配额是否还能写入数据,配额不足直接拒绝请求;会检查请求频率,触发限流则阻塞请求;会对请求做鉴权操作,权限不足或请求不合法则拒绝请求;同时会拒绝包大小超过1.5M的请求

第2步:会将通过预检查的请求转发到KVserver

第3步:KVserver会调用propose方法将请求发送到一致性模块,此时一致性模块会把该请求置于其raftLog的unstable集合中,并返回给KVserver一个ready的结构体

第4步:Leader会把该请求写入本地WAL二进制日志(unstable),执行fsync后变为stable;之后通过MsgApp RPC并发地发送给所有Follower;Follower收到Msgapp后类似的写入WAl日志并持久化后会向Leader发送MsgAppResp

第5步:当KVserver收到半数Follower的MsgAppResp,此时会将raftlog的请求的状态转到commited的状态,并应用到状态机,此时MVCC模块(多版本并发控制模块)会更新内存中的treeindex,该索引记录的是请求的key和revision映射关系和gerneration信息;同时把revision→(key, value, create/mod revision, version) 写入BoltDB,当需要读取key的值时,只需要在treeindex中匹配key和revison,匹配到就可以去Boltdb读到值,实现多版本并发控制

注:

1、(写请求到follower会转发到leader)

2、wal日志存在的意义:保证数据的一致性

wal日志存在的意义:保证数据的一致性

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐