tikv学习4etcd1
以下是一个关于 etcd 如何更新和提交应用数据、客户端如何确认写入成功、服务端如何保障一致性和可靠性 的完整技术文档,基于你提供的内容进行深入完善和结构化整理:
etcd 写入流程与一致性保障机制
本文档详细介绍了 etcd 如何处理客户端提交的数据、写入流程中客户端如何确认操作成功、以及服务端在高可用集群环境中如何保障数据一致性与可靠性。
一、etcd 写入数据的整体流程
etcd 作为一个强一致性的分布式键值数据库,采用 Raft 共识算法 来确保在分布式环境中的数据一致性。
1. 写请求的基本流程(Put 请求为例)
-
客户端发起写入请求(如
PUT /v3/kv/put)-
请求一般通过 HTTP/gRPC 接口发送到某个 etcd 节点(可以是任意节点,Leader 或 Follower)。
-
-
请求重定向到 Leader
-
若接收到请求的是 Follower 节点,会将请求重定向(或代理)至当前集群的 Leader 节点。
-
只有 Leader 节点具有写权限。
-
-
Leader 将写请求封装为 Raft 日志(Log Entry)
-
Leader 将该请求转化为一条待提交的 Raft 日志。
-
-
日志复制
-
Leader 将日志广播给其他所有 Follower 节点。
-
-
Follower 节点响应日志复制
-
每个 Follower 接收到日志后会先写入本地的日志存储中,然后响应 Leader。
-
-
日志提交(commit)
-
一旦大多数节点(> 50%)确认日志持久化,Leader 即认为日志“已提交”,然后应用到本地状态机。
-
-
返回响应给客户端
-
写入成功后,Leader 将操作结果通过 gRPC/HTTP 响应返回给客户端。
-
二、客户端如何知道写入成功?
etcd 使用以下机制来确保客户端知道写入是否成功:
-
客户端收到 200/OK 或 gRPC
OK响应-
表示该写入操作已在 Leader 节点被多数节点确认并成功提交。
-
-
版本号/修订号反馈
-
成功响应中包含修改的
revision(修订版本号)和mod_revision,可以用于客户端追踪变化。
-
-
失败情况
-
若网络异常或写入失败,客户端会接收到错误码(如
unavailable,timeout,not leader等)。
-
三、服务端如何保障数据一致与可靠?
etcd 的高可用与数据一致性保障主要依赖以下机制:
1. Raft 算法
-
etcd 内部使用 Raft 协议来复制日志和达成一致:
-
Leader 提议日志
-
多数派确认后提交
-
所有节点应用相同的日志顺序到状态机,确保数据一致性。
-
2. WAL(Write Ahead Log)+ 快照(Snapshot)机制
-
所有写操作都会先写入 WAL,确保即使宕机也能重放。
-
定期生成快照,减少 WAL 日志数量,加快恢复速度。
3. 硬盘持久化
-
所有的日志和快照都写入磁盘,避免内存丢失。
-
使用
fsync保证写入被刷盘。
4. 网络分区处理(Leader lease)
-
etcd 使用 Leader 租约(lease)和心跳机制防止脑裂。
-
若 Leader 超时未心跳,选举新 Leader,保证始终存在唯一写入口。
5. 线性一致性保障
-
提供
serializable与linearizable两种一致性读。 -
默认写操作和强一致读操作是线性一致的,保证不会读取到旧值。
四、示意图:etcd 写入流程
Client
|
v
+--------+ Redirect if not Leader
| etcd | ----------------------> +---------+
| Client | | Follower |
+--------+ +---------+
|
v
+--------+
| Leader |
+--------+
|
| Broadcast Log
v
+--------+ +--------+
|Follower| <-- |Follower|
+--------+ +--------+
|
| Commit Log after majority Ack
v
Apply to State Machine
|
v
Response to Client (Success)
五、总结关键点
| 关键点 | 说明 |
|---|---|
| 写入路径 | 客户端 → Leader → Raft 日志广播 → 多数派确认 → Leader 应用 → 响应客户端 |
| 成功标志 | 客户端收到 OK 响应和修订号 |
| 一致性保证 | Raft 共识、WAL、快照、Leader 租约、fsync |
| 故障恢复 | 通过 WAL + 快照快速恢复 |
| 脑裂防护 | 通过 Leader 租约与心跳检测避免双 Leader |
如需进一步扩展如事务写入、lease机制、watch事件一致性等,可以继续添加子章节。需要我继续扩展哪些部分?
浙公网安备 33010602011771号