一、部署3个ectd实例
1、安装etcd:yum install etcd
2、查看etcd版本:etcd --version
3、在一个目录下创建三个文件(etcd1_conf.yml,etcd2_conf.yml,etcd2_conf.yml)和三个文件夹(etcd1/data,etcd2/data,etcd3/data)分别存放三个etcd实例的配置文件和其对应的运行目录。
etcd1_conf.yml 内容
name: etcd1
data-dir: /home/test/etcd_conf/etcd1/data
listen-client-urls: http://127.0.0.1:12379
advertise-client-urls: http://127.0.0.1:12379
listen-peer-urls: http://127.0.0.1:12380
initial-advertise-peer-urls: http://127.0.0.1:12380
initial-cluster: etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
etcd2_conf.yml 内容
name: etcd2
data-dir: /home/test/etcd_conf/etcd2/data
listen-client-urls: http://127.0.0.1:22379
advertise-client-urls: http://127.0.0.1:22379
listen-peer-urls: http://127.0.0.1:22380
initial-advertise-peer-urls: http://127.0.0.1:22380
initial-cluster: etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
etcd3_conf.yml 内容
name: etcd3
data-dir: /home/test/etcd_conf/etcd3/data
listen-client-urls: http://127.0.0.1:32379
advertise-client-urls: http://127.0.0.1:32379
listen-peer-urls: http://127.0.0.1:32380
initial-advertise-peer-urls: http://127.0.0.1:32380
initial-cluster: etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
创建三个运行的data目录:
4、分别启动三个ETCD进程
etcd --config-file=/home/test/etcd_conf/etcd1_conf.yml
etcd --config-file=/home/test/etcd_conf/etcd2_conf.yml
etcd --config-file=/home/test/etcd_conf/etcd3_conf.yml
查看三个ETCD进程是否运行
此时ECCD集群可以被访问了,同时这个集群有自己的主,备等节点。
5、读写ETCD集群
写数据
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:12379 put key1 zhangyi //表示从节点1上写下去
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:22379 put key2 zhangyi //表示从节点2上写下去
读数据,可以从任意节点读取
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:12379 get key1
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:22379 get key1
一、部署单个ectd实例
编辑单个etcd实例配置文件etcd_conf.yml:
name: etcd
data-dir: /home/test/etcd_conf/etcd/data
listen-client-urls: http://127.0.0.1:2379
advertise-client-urls: http://127.0.0.1:2379
listen-peer-urls: http://127.0.0.1:2380
initial-advertise-peer-urls: http://127.0.0.1:2380
initial-cluster: etcd=http://127.0.0.1:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
运行:etcd --config-file=/home/test/etcd_conf/etcd_conf.yml
争产运行可以查看单个节点信息,可以put get操作。注意put get需要加上:ETCDCTL_API=3
三、ETCD原理简单理解(转载)
ETCD架构
HTTP Server:用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
Raft:Raft强一致性算法的具体实现,是etcd的核心。
WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容。
通常,一个用户的请求发送过来,会经由HTTP Server转发给Store进行具体的事务处理,如果涉及到节点的修改,则交给Raft模块进行状态的变更、日志的记录,然后再同步给别的etcd节点以确认数据提交,最后进行数据的提交,再次同步。
在默认设定下,etcd 通过主机的 2379 端口向 Client 提供服务。如下图:
每个主机上的应用程序都可以通过主机的 2379 以 HTTP + JSON 的方式向 etcd 读写数据。写入的数据会由 etcd 同步到集群的其它节点中。
在peer状态多机下,etcd 通过主机的 2380 端口在各个节点中同步 raft 状态及数据。
ETCD提供HTTP协议,在最新版本中支持Google gRPC方式访问。具体支持接口情况如下:
a. ETCD是一个高可靠的KV存储系统,支持PUT/GET/DELETE接口;
b. 为了支持服务注册与发现,支持WATCH接口(通过http long poll实现);
c. 支持KEY持有TTL属性;
d. CAS(compare and swap)操作;
e. 支持多key的事务操作;
f. 支持目录操作