什么是Etcd,如何运维Etcd ?

介绍

ETCD 是一个分布式、可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据;当然,它不仅仅用于存储,还提供配置共享及服务发现;基于Go语言实现。

ETCD的特点

简单:定义明确,面向用户的API(gRPC)
安全:具有可选客户端证书身份验证的自动TLS
快速:基准10,000次写入/秒
可靠:使用Raft正确分发

ETCD在rainbond中的作用

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