etcd(共享配置、服务发现)分布式的KV存储系统

特点

1.简单:基于HTTP+JSON的API让你用curl就可以轻松使用。
2.安全:可选SSL客户认证机制。( https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全性高)
3.快速:每个实例每秒支持一千次写操作。
4.可信:使用Raft算法充分实现了分布式。
PS:分布式系统中的数据分为控制数据和应用数据。
ETCD的使用场景默认处理的数据都是控制数据,对于应用数据,只推荐数据量很小,但是更新访问频繁的情况。

Zookeeper,ETCD的比较

•一致性与复杂度:ETCD使用[Raft]协议, ZK使用[ZAB](类PAXOS协议),前者容易理解,方便实现; 
                         paxos 和raft的对比: https://blog.csdn.net/colorant/article/details/73887706
•运维方面:ETCD安装部署与运维简单,ZK安装部署复杂,依赖较多,维护相对复杂;
•项目活跃度:ETCD社区与开发活跃,ZK发展缓慢;
•API:ETCD提供HTTP+JSON,跨平台跨语言,ZK需要使用其客户端;
•访问安全方面:ETCD支持HTTPS访问,ZK在这方面缺失;
•编写语言:ETCD用go编写;ZK使用JAVA编写,偏向于重型应用,有大量依赖。
Raft:etcd所采用的保证分布式系统强一致性的算法。
Node:一个Raft状态机实例。
Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
Cluster:由多个Member构成可以协同工作的etcd集群。
Peer:对同一个etcd集群中另外一个Member的称呼。
Client: 向etcd集群发送HTTP请求的客户端。
WAL:预写式日志,etcd用于持久化存储的日志格式。
snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
Leader:Raft算法中通过竞选而产生的处理所有数据提交的节点。
Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始竞选。
Term:某个节点成为Leader到下一次竞选时间,称为一个Term。
Index:数据项编号。Raft中通过Term和Index来定位数据。

 

 

下载

去官方的GitHub下载最新版本的etcd。https://github.com/etcd-io/etcd/releases
以最新版本v3.3.13为例,打开上面的链接将页面向下滑动,直到看到类似下面的内容:

 

安装

Windows

下载etcd-v3.3.13-windows-amd64.zip文件到本地。然后解压得到如下文件: 双击etcd.exe就是启动了etcd。其他平台解压之后在bin目录下找etcd可执行文件。 默认会在2379端口监听客户端通信,在2380端口监听节点间通信。 etcdctl.exe可以理解为一个客户端或本机etcd的控制端。

 

Mac平台
方法一:下载etcd-v3.3.13-darwin-amd64.zip,解压即可。
方法二:brew install etcd

 

./etcdctl cluster-health

 

./etcd.exe --name node1 --initial-advertise-peer-urls http://192.168.205.10:2380 \
--listen-peer-urls http://192.168.205.10:2380 \
--listen-client-urls http://192.168.205.10:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://192.168.205.10:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster node1=http://192.168.205.10:2380,node2=http://192.168.205.11:2380 \
--initial-cluster-state new

 

 

连接etcd

集群间通讯使用2380
客户端与节点使用2379通讯
注意: 默认的etcdctrl使用的时v2版本的命令。 我们需要设置环境变量ETCDCTL_API
=3来使用v3版本的API,而默认的也就是环境变量为 ETCDCTL_API=2是使用v2版本的API。

修改环境变量指定使用API的版本

Windows平台
set ETCDCTL_API=3
Mac&Linux平台
export ETCDCTL_API=3

 

 

简单使用

etcdctl --endpoints=http://127.0.0.1:2379 put nazha "dsb"
etcdctl --endpoints=http://127.0.0.1:2379 get nazha 
etcdctl --endpoints=http://127.0.0.1:2379 del nazha 
etcdctl.exe  get "" --prefix=true

 

 

 

 

 

 

 

posted @ 2020-01-27 19:15  慕沁  阅读(930)  评论(0)    收藏  举报