Etcd介绍和使用
简介
- Etcd 是 CoreOS 团队于2013年6月发起的开源项目。
- Etcd 的目标是构建一个高可用的分布式键值(key-value)数据库。
- Etcd 内部采用 Raft 协议作为一致性算法,Etcd 会保证所有的节点都会保存数据,并保证数据的一致性和正确性。
- Etcd 基于 Go 语言实现。
- Etcd 既支持 gRPC 交互,也提供了 HTTP API 进行交互。
- Ectd 支持每秒 1w 写操作,数据来源于官方提供的 Benchmark 数据。
- Etcd 支持 SSL/TLS。
- Etcd 比较多的应用场景是用于服务发现,服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。
- Etcd 目前默认使用 2379 端口提供 HTTP API 服务,2380 端口和 peer 通信。
- 虽然 Etcd 支持单点部署,但是在生产环境中推荐使用集群方式部署。
- 由于 Etcd 内部使用投票机制,一般 Etcd 节点数会选择 3、5、7等奇数,最少节点数量是3个。
服务发现
- 从本质上说,服务发现就是要了解集群中是否有进程在监听 UDP 或者 TCP 端口,并且通过名字就可以进行查找和链接。
- 用户可以在 Etcd 中注册服务,并且对注册的服务配置 Key TTL,定时保持服务的心跳以达到监控健康状态的效果。
安装
安装:brew install etcd
启动服务:brew services start etcd
检查服务状态:etcdctl endpoint health
查看版本信息:etcd --version
etcd是 server 端,etcdctl 是客户端。
使用
查看版本信息
curl http://127.0.0.1:2379/version
添加key
etcdctl put mykey "this is myvalue"
查询key
etcdctl get mykey
删除key
etcdctl del mykey
监控key的变化事件并得到通知
etcdctl watch mykey
使用Raft一致性协议
与Zookeeper的区别
- Zookeeper 起源于 Hadoop 生态系统,etcd 的流行是因为它是 kubernetes 的后台支撑。
- Zookeeper 使用 Zab 协议作为其一致性协议。
- 对于 CAP 模型,zookeeper 保障的是 CP。
- Etcd 使用 Raft 算法实现的一致性,比 Zookeeper 的 Zab 算法更简单。
其他
- 在正常节点上查看集群状态
etcdctl endpoint status
- 摘除异常节点
etcdctl member remove $ID