etcd

用于分布式系统的最重要数据的分布式的、可靠的键值存储。

提示:

  1. 在阅读本文之前,建议先阅读 raft 算法

1. 简介

1.1. etcd 是什么?

ectd 是强一致的、分布式的键值存储,它提供一种可靠的方式,来存储分布式系统或机器集群需要访问的数据。它在网络分区期间优雅地处理 Leader 选举,并且可以容忍机器故障,即使是在 Leader 节点中。

1.2. 特性

1.2.1. 接口简单

使用标准的 HTTP 工具,比如 curl,读写值。

interface.svg

1.2.2. 键值存储

与标准文件系统一样,在层次结构组织的目录中,存储数据。

kv.svg

1.2.3. 监听变化

监听特定键或目录的变化,对值的变化做出反应。

watch.svg

1.2.4. 可选的 SSL 客户端证书认证
1.2.5. 以每个实例每秒 1000 次写入为基准
1.2.6. 用于密钥过期的可选 TTL
1.2.7. 通过 Raft 协议正确分发

2. 安装

关于从预构建二进制文件(pre-built binaries)或源码安装 etcd 的细节,请参阅官方文档。接下来讲述如何安装预构建二进制文件。

2.1. 安装预构建二进制文件

安装 etcd 的最简单方式是从预构建二进制文件:


3. 如何设置 Demo ectd 集群

官网教程:https://etcd.io/docs/v3.5/tutorials/how-to-setup-cluster/

在 etcd 中设置集群指南

01_etcd_clustering_2016051001.gif

在每个 etcd 节点上,指定集群成员:

在每台机器上运行:

现在 etcd 集群已经就绪,使用 etcdctl 连接 etcd:


4. 如何访问 etcd

etcd 集群访问指南

02_etcdctl_access_etcd_2016051001.gif

put 命令用于写:

get 用于从 etcd 读:


5. 如何根据前缀获取键

根据前缀提取 etcd 键的指南

03_etcdctl_get_by_prefix_2016050501.gif


6. 如何删除键

描述删除 etcd 键的方式

04_etcdctl_delete_2016050601.gif


7. 如何在事务中进行多个写操作

进行事务性写入的指南

txn 将多个请求包装进单个事务:

05_etcdctl_transaction_2016050501.gif


8. 如何监视键

监视 etcd 键的指南

watch 用于获取未来变更的通知:

06_etcdctl_watch_2016050501.gif


9. 如何创建租约

在 etcd 中创建租约(lease)的指南

lease 用于带 TTL 的写:

07_etcdctl_lease_2016050501.gif


10. 如何创建锁

在 etcd 中创建分布式锁的指南

lock 用于分布式锁:

08_etcdctl_lock_2016050501.gif


11. 如何在 etcd 集群中实施主节点选举

在 etcd 集群中,实施主节点选举的指南

elect 用于主节点选举:

09_etcdctl_elect_2016050501.gif


12. 如何检查集群状态

检查 etcd 集群状态的指南

为每台机器指定初始集群配置:


13. 如何保存数据库

关于 etcd 数据库快照的指南

snapshot 用于保存 etcd 数据库的时间点(point-in-time)快照:

11_etcdctl_snapshot_2016051001.gif

快照只能从一个 etcd 节点请求,因此 --endpoints 标志应该只包含一个端点。


14. 如何添加和移除成员

处理 etcd 集群成员的指南

memeber 用于添加、移除、更新成员:

13_etcdctl_member_2016062301.gif

在每台机器上执行:

在 node 1 上执行:

在 node 2 上执行:

在 node3 上执行:

然后使用 member removemember add 命令替换成员:

下面,使用 --initial-cluster-state existing 标记启动新成员: