etcd 介绍与使用

目录

1.etcd 简介

2. Raft选举算法 

3. etcd 安装

4. etcd基本使用


1.etcd 简介

etcd是一个高可用的分布式的键值对存储系统,常用做配置共享和服务发现,由CoreOS公司发起的一个开源项目,受到ZooKeeper与doozer启发而催生的项目,名称”etcd”源自两个想法,即Unix的”/etc”文件夹和”d”分布式系统。”/etc”文件夹是用于存储单个系统的配置数据的地方,而etcd用于存储大规模分布式的配置信息,etcd有如下特点:

  • 简单:基于HTTP+JSON的API,用curl就可以轻松使用。
  • 可信:使用Raft算法充分实现了分布式。
  • 安全:可选SSL客户认证机制。
  • 快速:每个节点可支持上万QPS读写。

etcd有V2和V3两个版本,V3版本供了更多功能并提高了性能,应用程序使用新的grpc API访问mvcc存储,mvcc存储区和旧存储区v2是分开且隔离的,写入存储v2不会影响mvcc存储,写入mvcc存储也不会影响存储v2。

API v2和API v3之间存在一些显着差异:

  • 事务:在v3中,etcd提供了多键条件事务。应用程序应使用事务代替Compare-And-Swap操作。
  • 平面键空间:API v3中没有目录,只有键。例如,”/a/b/c/“是键。范围查询支持获取与给定前缀匹配的所有键。
  • 紧凑的响应:delete操作不再返回以前的值。为了获得删除的值,可以使用事务原子地获取密钥,然后删除其值。
  • 租约:替代v2 TTL;TTL绑定到租约,密钥附加到租约。TTL过期后,租约将被撤销,所有附加密钥也将被删除。

2. Raft选举算法 

集群一般是由两个或两个以上的服务器组建而成,每个服务器都是一个节点。数据库集群、管理集群...数据库集群提供了读写功能,管理集群提供了管理、故障恢复等功能。
对于一个集群来说,多个节点的协同和管理是非常重要的。而主节点则实现了协同和管理,主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上 的一致性。
这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。分布式选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的一致性。
采用 Raft 算法选举,集群节点的角色有 3 种:

  • Leader: 即主节点,同一时刻只有一个 Leader,负责协调和管理其他节点;
  • Candidate: 即候选者,每一个节点都可以成为 Candidate,
  • 节点在该角色下才可以被选为新的 Leader; Follower: Leader 的跟随者,不可以发起选举。

选举特点如下: 

  • 当集群初始化时候,每个节点都是Follower角色。
  • 集群中存在至多1个有效的主节点,通过心跳与其他节点同步数据;
  • 当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选举投票。
  • 当收到包括自己在内超过半数节点赞成后,选举成功。
  • 当收到票数不足半数选举失败,或者选举超时。
  • 若本轮未选出主节点,将进行下一轮选举(出现这种情况,是由于多个节点同时选举,所有节点均为获得过半选票)。
  • Candidate节点收到来自主节点的信息后,会立即终止选举过程,进入Follower角色。

为了避免陷入选举失败循环,每个节点未收到心跳发起选举的时间是一定范围内的随机值,这样能够避免2个节点同时发起选举。

3. etcd 安装

下载地址:Releases · etcd-io/etcd · GitHub

 切换至etcd根目录,将etcd和etcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序

cp etcd etcdctl /usr/local/bin

输入命令etcd,即可启动一个单节点的etcd服务,ctrl+c即可停止服务

xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: name = default
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: data dir = default.etcd 
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: member dir = default.etcd/member 
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: heartbeat = 100ms 
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: election = 1000ms 
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: snapshot count = 100000 
xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: advertise client URLs = http://localhost:2379 
xxxx-xx-xx xx:xx:xx.xxxxxx I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32

 建立etcd相关目录(即数据文件和配置文件的保存位置)

mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/

创建etcd配置文件

vim /etc/etcd/etcd.conf
# 节点名称
ETCD_NAME="etcd0"
# 指定数据文件存放位置
ETCD_DATA_DIR="/var/lib/etcd/"

创建systemd配置文件

vim /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
User=root
Type=notify
WorkingDirectory=/var/lib/etcd/
## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

4. etcd基本使用

增加和修改,如果存在则替换

etcdctl put <键名> <键值> 

查询 

etcdctl get <键名> 

删除 

etcdctl del <键名>

查看集群状态

etcdctl endpoint status --write-out=table

 watch命令

watch是监听键或前缀发生改变的事件流。

# 对某个key监听操作,当/key1发生改变时,会返回最新值 
etcdctl watch /key1 
# 监听key前缀 
etcdctl watch /key --prefix 
# 监听到改变后执行相关操作 
etcdctl watch /key1 -- etcdctl member list

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值