什么是etcd
etcd是基于Go语言开发的一个开源且高可用的分布式key-value
存储系统,我们可以在上面实现配置共享与服务的注册与发现。
和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用)
etcd有以下几点特点:
- 完全复制:集群中的每个节点都可以使用完整的存档
- 高可用:Etcd可用于避免硬件的单点故障或网络问题
- 一致性:每次读取都会返回跨多主机的最新写入
- 简单:包含一个定义良好,面相用户的API(grpc)
- 安全:实现了带有可选的客户端证书身份验证的自动化TLS
- 可靠:使用raft算法实现了强一一致,高可用的服务存储目录
etcd应用场景
服务发现
服务发现是分布式系统中比较常见的问题之一,指的是在同一个分布式集群中的进程或服务如何找到彼此并建立连接,而从本质上来说,就是了解集群中是否有集群
在监听udp/tcp端口,并且通过名字就可以查找或连接。
配置中心
我们将一些配置信息发到etcd上进行集中管理,主要流程是应用在启动的时候主动从etcd
中获取一次配置信息,同时我们在etcd上注册一个Watcher
并等
待,每次配置更新时,etcd实时通知订阅者来获取最新配置消息。
分布式锁
因为etcd使用了raft算法来实现强一致性,所以某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁,而锁服务主要的使用方式有以下两种:
- 保证获取锁的用户最后只有一个可以得到
- 控制时序,所有想获得锁的用户都会被安排执行,但是获取锁的顺序是全局唯一的,这也决定了执行顺序
etcd结构图
- Http Server:用于处理用户发送的API请求与其他etcd节点的同步与心跳信息请求
- Raft:强一致散发的具体实现
- Store:用于处理etcd支持的各种功能的事务,包括数据索引,节点状态变更,事件的助理与执行等等。
- WAL:预写式日志,是etcd数据存储的方式。除了在内存存有数据的状态以及节点的索引外,都主要通过WAL做持久化存储,WAL中,所有数据在提交前都会事先
记录日志,Snapshot是用于防止存储WAL中数据过多的状态快照,Entry表示存储具体日志。
etcd的下载与简单使用
etcd的下载地址
下载地址
简单使用
-
打开服务端
下载完后将压缩包解压,打开文件夹:
双击etcd.exe
,打开服务端 -
打开命令行,将客户端与服务端连接起来,输入键值对:
查询键值对: