etcd概述:
- Etcd 使用raft协议来维护集群内各个结点的致性。
- 简单地说,Etcd 集群是一个分布式系统,由多个结点相互通信构成整体对外服务,每个结点都存储了完整的数据,并且通过 raft 协议保证每个结点维护的数据是一致的。
Etcd使用raft共识算法解决一致性问题:
每一个 Raft 集群中都包含多个服务器,在任意时刻,每一台服务器只可能处于 Leader、Follower 以及 Candidate 三种状态;
在处于正常的状态时,集群中只会存在一个 Leader,其余的服务器都是 Follower。
所有的 Follower 节点都是被动的,它们不会主动发出任何的请求,只会响应 Leader 和 Candidate 发出的请求,对于每一个用户的可变操作,都会被路由给 Leader 节点进行处理,除了 Leader 和 Follower 节点之外,Candidate 节点其实只是集群运行过程中的一个临时状态。
手动搭建一个简单的etcd集群:
环境及工具准备:
三台linux虚机(172.31.0.81、172.31.0.82、172.31.0.82)
Etcd下载:https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz
分别在每台虚机上执行以下操作:
- 建立 /var/etcd/目录:
mkdir /var/etcd/
- 将etcd-v3.1.5-linux-amd64.tar.gz拷至 /var/etcd/目录下并解压:
tar xzf etcd-v3.1.5-linux-amd64.tar.gz
- 进入etcd-v3.1.5-linux-amd64目录会发现有两个可执行程序(etcd、etcdctl)和一些文档文件
- 对于三台不同的虚机,执行以下三条不同的命令(etcd 在
listen-client-urls
上接收客户端访问。etcd 成员将advertise-client-urls
指定的 URl 上通告给其他成员、代理和客户端。):
./etcd --name etcd0 --initial-advertise-peer-urls http://172.31.0.81:2380
--listen-peer-urls http://172.31.0.81:2380
--listen-client-urls http://172.31.0.81:2379,http://127.0.0.1:2379
--advertise-client-urls http://172.31.0.81:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://172.31.0.81:2380,etcd1=http://172.31.0.82:2380,etcd2=http://172.31.0.83:2380
--initial-cluster-state new
./etcd --name etcd1 --initial-advertise-peer-urls http://172.31.0.82:2380
--listen-peer-urls http://172.31.0.82:2380
--listen-client-urls http://172.31.0.82:2379,http://127.0.0.1:2379
--advertise-client-urls http://172.31.0.82:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://172.31.0.81:2380,etcd1=http://172.31.0.82:2380,etcd2=http://172.31.0.83:2380
--initial-cluster-state new
./etcd --name etcd2 --initial-advertise-peer-urls http://172.31.0.83:2380
--listen-peer-urls http://172.31.0.83:2380
--listen-client-urls http://172.31.0.83:2379,http://127.0.0.1:2379
--advertise-client-urls http://172.31.0.83:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://172.31.0.81:2380,etcd1=http://172.31.0.82:2380,etcd2=http://172.31.0.83:2380
--initial-cluster-state new
- 接下来是比较长的日志打印,当出现以下类似字段时表明建立集群成功:
- 在任意一台虚机上开一个终端,进入到etcd-v3.1.5-linux-amd64目录执行
./etcdctl -peers 127.0.0.1:2379 member list
会发现集群已经建立,leader已经选举出来:
验证etcd:
当在 172.31.0.81 虚机上执行 ./etcdctl set myval "tongyishu" 时
在 172.31.0.82 和 172.31.0.83 虚机上执行 ./etcdctl get myval 就会输出 "tongyishu" 字段,这就是etcd分布式数据存储的一致性。