1. etcd 介绍
etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。
etcd 基于 Raft 协议,通过复制日志文件的方式来保证数据的强一致性。
客户端应用写一个 key 时,首先会存储到 etcd Leader 上,然后再通过 Raft 协议复制到 etcd 集群的所有成员中,以此维护各成员(节点)状态的一致性与实现可靠性。
虽然 etcd 是一个强一致性的系统,但也支持从非 Leader 节点读取数据以提高性能,而且写操作仍然需要 Leader 支持,所以当发生网络分区时,写操作仍可能失败。
etcd 具有一定的容错能力,假设集群中共有N个节点,即便集群中( n-1) /2个节点发生了故障,只要剩下的( n+1) /2 个节点达成一致, 也能操作成功,因此,它能够有效地应对网络分区和机器故障带来的数据丢失风险。
etcd 默认数据一更新就落盘持久化,数据持久化存储使用 WAL (write ahead log) ,预写式日志。
格式 WAL 记录了数据变化的全过程,在 etcd 中所有数据在提交之前都要先写入 WAL 中; etcd Snapshot (快照)文件则存储了某一时刻 etcd 的所有数据,默认设置为每 10 000 条记录做一次快照,经过快照后WAL 文件即可删除。