你知道etcd吗?随着k8s的使用普遍以后,etcd被很是多的人所知道,同时又由于它可靠的分布式特性被不少人喜欢。因此,我准备有几篇博文来记录一下,从基本使用到线上部署再到原理分析,作一个系列。那么,今天先来讲说它的简介与命令行的使用。git
我我的总结为下面用几个要点:github
总结:etcd是一个分布式高可用k-v存储,经过复制达到每一个节点存储的信息一致,从而保证高可用。redis
这里简单说一下复制的具体流程:

(client为咱们的客户端,用来发出存储请求,leader和follower都是etcd的节点)
就如图上所看到的,我叫它两段式提交:算法
咱们也能够看到,etcd经过先将数据存放在大多数节点上面从而保证数据不会出错而且效率较高,最终全部节点数据仍是会同步一致的。网络
PS:这里由于是简介,因此就简单提一下,有关如何选举出leader还有raft协议的一些具体细节,以及当出现网络分区或者节点异常问题的恢复会在以后的博客中给出。分布式
底层存储key是有序排列的
'key' -> 'value'性能
aaa/bbb -> 111
aaa/bbc -> 3333
bbb/aaa -> 1321
ccc -> 24
就是按照key的顺序依次排列,相同前缀的key会被放在一块儿,这样到存储结构,当查询时能够经过key的前缀将一系列的value都取出来学习
etcd有一个很棒的机制要单独提一句,就是watch,它容许你去监控一个key的变化。当你监控了以后,这个key的添加修改删除都会被监控到。
lease租约,这个机制和redis中的key过时机制同样,能够申请一个租约,这个租约有一个时间限制,好比60秒,你能够将这个租约设置到一个key上,那么这个key过60秒就会被自动删除。固然也能够进行续租。测试
具体使用状况,能够从后面的命令行操做中看到。spa
咱们一开始学习和测试的时候只须要在本地部署一个单节点就能够了,单节点的部署比较方便这边简单说明一下。
首先下载对应的版本:https://github.com/etcd-io/etcd/releases
我这边使用的mac对应的darwin-amd64的版本,其余版本应该相似。
下载解压以后有两个文件比较重要:
使用节点命令
➜ ./etcd
使用客户端命令
➜ ./etcdctl NAME: etcdctl - A simple command line client for etcd. WARNING: Environment variable ETCDCTL_API is not set; defaults to etcdctl v2. Set environment variable ETCDCTL_API=3 to use v3 API or ETCDCTL_API=2 to use v2 API.
以后会出现上述相似警告,告诉你,默认使用的是v2版本的API,你须要设置环境变量ETCDCTL_API=3就能使用v3版本的API了,这里咱们使用命令export ETCDCTL_API=3
或者你能够手动修改环境变量添加export ETCDCTL_API=3就能够了,当不出现警告的时候证实环境变量设置正确。
下面介绍几个最基本的etcd的操做,其实很是简单。主要与redis不一样的是拥有独特的watch机制,这个机制很是棒。
➜ ./etcdctl put /aaa/a 1 OK ➜ ./etcdctl put /aaa/b 2 OK
➜ ./etcdctl get /aaa/a /aaa/a 1 ➜ ./etcdctl get --prefix /aaa /aaa/a 1 /aaa/b 2
--prefix意思是取出全部前缀为/aaa的key
新开一个窗口使用命令watch进行监听
➜ ./etcdctl watch /aaa/a
而后对/aaa/a这个key的操做所有都会被监听到
➜ ./etcdctl put /aaa/a 123 OK ➜ ./etcdctl del /aaa/a 1 ➜ ./etcdctl watch /aaa/a PUT /aaa/a 123 DELETE /aaa/a
建立一个60s的租约
➜ ./etcdctl lease grant 60 lease 694d6b2b7d7e6a0c granted with TTL(60s) ➜ ./etcdctl put /aaa/a 123 --lease=694d6b2b7d7e6a0c OK
put的时候使用租约注意,这里须要输入上面租约的16进制标识符
而后监听的地方会发现,60秒后,/aaa/a这个key被自动删除了
固然你可使用keep-alive进行续租,如:
➜ ./etcdctl lease keep-alive 694d6b2ac4a35625
以上简单说明了etcd的一些基本信息,单节点部署,以及一些基本用法,从上述信息咱们总结可知:
那这里就说这么多,看完你就应该大体知道etcd是个啥玩意了,从如今看来你可能尚未感受它有什么厉害的地方,后面咱们结合实际的场景使用就能更加明白了。