etcd 是一个高度一致的分布式键值 (key-value) 存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。etcd 是用 Go 语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。 etcd 机器之间的通信通过 Raft 共识算法处理。
Raft : etcd 所采用的保证分布式系统强一致性的算法。Node :一个 Raft 状态机实例。Member : 一个 etcd 实例。它管理着一个 Node ,并且可以为客户端请求提供服务。Cluster :由多个 Member 构成可以协同工作的 etcd 集群。Peer :对同一个 etcd 集群中另外一个 Member 的称呼。Client : 向 etcd 集群发送 HTTP 请求的客户端。WAL :预写式日志, etcd 用于持久化存储的日志格式。snapshot : etcd 防止 WAL 文件过多而设置的快照,存储 etcd 数据状态。Proxy : etcd 的一种模式,为 etcd 集群提供反向代理服务。Leader( 领导者 ) : Raft 算法中通过竞选而产生的处理所有数据提交的节点。Follower( 跟随者 ) :竞选失败的节点作为 Raft 中的从属节点,为算法提供强一致性保证。Candidate :当 Follower 超过一定时间接收不到 Leader 的心跳时转变为 Candidate 开始 Leader 竞选。Term :某个节点成为 Leader 到下一次竞选开始的时间周期,称为一个 Term 。Index :数据项编号。 Raft 中通过 Term 和 Index 来定位数据。
创建一个local文件夹
mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/
vim /etc/etcd/etcd.conf
vim /etc/systemd/system/etcd.service
systemctl daemon-reload && systemctl enable etcd && systemctl start etcd && systemctl status etcd
etcdctl -h
etcdctl put /testdir/testkey "Hello world"
--sort 对结果进行排序
--consistent 将请求发给主节点,保证获取内容的一致性
清空数据
etcdctl del / --prefix
删除所有/test前缀的节点
etcdctl del /test --prefix
etcdctl watch key1