etcd

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分布式数据存储的一致性

原文地址:https://www.cnblogs.com/tongyishu/p/12055520.html