ETCD 是一个分布式、可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据;固然,它不单单用于存储,还提供配置共享及服务发现;基于Go语言实现。html
简单:定义明确,面向用户的API(gRPC)
安全:具备可选客户端证书身份验证的自动TLS
快速:基准10,000次写入/秒
可靠:使用Raft正确分发node
etcd中存储了集群的元数据信息,集群状态和网络配置,在高可用集群中每每会采用奇数节点(最少3个)的集群。git
etcd提供了proxy功能,即代理功能,etcd能够代理的方式来运行。github
etcd代理能够运行在每一台主机,在这种代理模式下,etcd的做用就是一个反向代理,把客户端的etcd请求转发到真正的etcd集群。这种方式既增强了集群的弹性,又不会下降集群的写的性能。shell
在rainbond集群中,除管理节点之外的其余节点都经过etcd-proxy方式与etcd服务端创建链接。安全
etcd 提供了 etcdctl 命令行工具 和 HTTP API 两种交互方法。etcdctl命令行工具用 go 语言编写,也是对 HTTP API 的封装,平常使用起来也更容易。因此这里咱们主要使用 etcdctl 命令行工具演示。性能优化
export ETCDCTL_API=3 etcdctl version
etcdctl member list
etcdctl endpoint health
member add 添加成员 member remove 删除成员 member update 更新集群中的一个成员 member list 列出及集群中的成员
设置键的值的命令 key 到 value:网络
$ etcdctl put key value OK
etcdctl get key
上述命令同时返回 key 和 value,若是只读取 key 对应的值,则使用如下命令运维
etcdctl get key --print-value-only
按key前缀查找rainbond集群全部节点信息分布式
etcdctl get /rainbond/node --prefix
etcdctl watch key
删除 key 为 key的命令
$ etcdctl del key 1
删除具备前缀的键的命令:
etcdctl del --prefix key
$ etcdctl put key testvalue OK $ etcdctl get key key testvalue
端口 | 端口说明 |
---|---|
2380 | 和集群中其余节点通讯 |
2379 | 提供 HTTP API 服务,供客户端交互 |
备份
因为etcd的强一致性,备份一个节点的数据便可,生产环境中,为了防止单节点异常没有生成备份,能够多加几个节点
export ETCDCTL_API=3 etcdctl --endpoints=http://节点IP:2379 snapshot save /etcd_bak/snap-$(date +%Y%m%d%H%M).db
恢复
etcdctl snapshot restore snapshot.db --name m3 --data-dir=/etcd_bak/snap-...db
ETCD 项目地址:https://github.com/etcd-io/etcd
ETCD官方文档:https://etcd.io/
ETCD官方文档中文版:https://doczhcn.gitbook.io/etcd/
CoreOS实战剖析ETCD: https://www.infoq.cn/article/coreos-analyse-etcd/
ETCD性能优化实践:https://www.kubernetes.org.cn/6295.html
ETCD灾难恢复: https://skyao.gitbooks.io/learning-etcd3/content/documentation/op-guide/recovery.html