一、部署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 与服务发现 - 开发者头条

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.  支持目录操作

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐