etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd 内部采用 raft 协议作为一致性算法,etcd 基于 Go 语言实现。
etcd 作为服务发现系统,有以下的特点:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
- 安全:支持SSL证书验证
- 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
下载安装
首先从 releases 列表中查找最新版本并下载
1 | $ sudo wget https://github.com/coreos/etcd/releases/download/v3.3.5/etcd-v3.3.5-linux-amd64.tar.gz |
因为etcd是go语言编写的,安装只需要下载对应的二进制文件 etcd
和 etcdctl
放入环境变量中即可
1 | $ cd etcd-v3.3.5-linux-amd64 |
运行
1 | $ etcd |
etcd 目前默认使用2379端口提供HTTP API服务,2380端口和peer通信(这两个端口已经被IANA官方预留给etcd)
简单使用
etcd 提供了 etcdctl
命令行和 RESTful
风格的 HTTP 接口
k/v 存储
k/v
存储也是 Nginx upsync
模块中主要用的功能,用于灵活的存储
添加/修改
1 | $ etcdctl set upstreams/127.0.0.1:8001 '{"server": "127.0.0.1:8001"}' |
HTTP
接口方式会返回完整的数据结构1
2
3$ curl -X PUT http://127.0.0.1:2379/v2/keys/upstreams/127.0.0.1:8004 -d value='{"server": "120.0.0.1:8004"}'
{"action":"set","node":{"key":"/upstreams/127.0.0.1:8004","value":"{\"server\": \"120.0.0.1:8004\"}","modifiedIndex":5,"createdIndex":5}}
获取
1 | $ etcdctl get upstreams/127.0.0.1:8001 |
1 | $ curl http://127.0.0.1:2379/v2/keys/upstreams/127.0.0.1:8004 |
upstreams/127.0.0.1:8001
作为 key,中间的 /
相当于在文件夹标示。HTTP
接口方式可以获取文件夹下的所有内容,这也是 upsync
模块中使用的方式
1 | $ curl http://127.0.0.1:2379/v2/keys/upstreams/ |
删除
1 | $ etcdctl rm upstreams/127.0.0.1:8001 |
1 | $ curl -X DELETE http://127.0.0.1:2379/v2/keys/upstreams/127.0.0.1:8004 |
TTL
我们也可以给 key 设置一个有效期,单位为秒
1 | $ etcdctl set /foo "Expiring Soon" --ttl 20 |
1 | $ curl -X PUT http://127.0.0.1:2379/v2/keys/foo?ttl=20 -d value=bar |
更多使用见文档
