介绍
ETCD 是一个分布式、可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据;当然,它不仅仅用于存储,还提供配置共享及服务发现;基于Go语言实现。
ETCD的特点
简单:定义明确,面向用户的API(gRPC)
安全:具有可选客户端证书身份验证的自动TLS
快速:基准10,000次写入/秒
可靠:使用Raft正确分发
ETCD的作用
etcd中存储了集群的元数据信息,集群状态和网络配置,在高可用集群中往往会采用奇数节点(最少3个)的集群。
ETCD proxy功能简介
etcd提供了proxy功能,即代理功能,etcd可以代理的方式来运行。
etcd代理可以运行在每一台主机,在这种代理模式下,etcd的作用就是一个反向代理,把客户端的etcd请求转发到真正的etcd集群。这种方式既加强了集群的弹性,又不会降低集群的写的性能。
在rainbond集群中,除管理节点以外的其他节点都通过etcd-proxy方式与etcd服务端建立连接。
ETCD常用运维命令
etcd 提供了 etcdctl 命令行工具 和 HTTP API 两种交互方法。etcdctl命令行工具用 go 语言编写,也是对 HTTP API 的封装,日常使用起来也更容易。所以这里我们主要使用 etcdctl 命令行工具演示。
- etcd最新的API版本是v3,与v2相比,v3更高效更清晰。要使用v3,设置环境变量即可。
export ETCDCTL_API=3
etcdctl version
- 列出集群内的成员以及他们当前的角色是不是leader
etcdctl member list
- 查看节点状态
etcdctl endpoint health
- 跟集群成员相关的命令如下:
member add 添加成员
member remove 删除成员
member update 更新集群中的一个成员
member list 列出及集群中的成员
- 通过 put 将 key 和 value 存储到 etcd 集群中。每个存储的密钥都通过 Raft 协议复制到所有 etcd 集群成员,以实现一致性和可靠性。示例:
设置键的值的命令 key 到 value:
[root@ ~]#: etcdctl put key value
OK
- 从etcd 集群中读取 key 的值。
etcdctl get key
上述命令同时返回 key 和 value,如果只读取 key 对应的值,则使用以下命令
etcdctl get key --print-value-only
按key前缀查找rainbond集群所有节点信息
etcdctl get /rainbond/node --prefix
- 监测一个键值的变化,一旦键值发生更新,就会输出最新的值
etcdctl watch key
- 删除key
删除 key 为 key的命令
[root@ ~]#: etcdctl del key
1
删除具有前缀的键的命令:
etcdctl del --prefix key
- 更新内容
[root@ ~]#: etcdctl put key testvalue
OK
[root@ ~]#: etcdctl get key
key
testvalue
端口
端口 | 端口说明 |
---|---|
2380 | 和集群中其他节点通信 |
2379 | 提供 HTTP API 服务,供客户端交互 |
ETCD备份恢复
备份
由于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