分布式-Etcd介绍

Etcd客户端基本操作

提供了如下操作接口:

  • put - 添加一个新的 key-value 到存储中
  • get - 获取一个 key 的 value
  • delete - 删除节点
  • range - 获取一个范围的 key 的 value,例如:key1 - key10
  • txn(Transaction) - 读、if-else、修改、写的组合(事务处理)
  • watch - 监控一个或一个范围的 key,发生变化后就会得到通知

Etcd整体架构

gRPC Server:集群之间的通讯及Server与Client之间的通讯

Boltdb:是支持事务的KV数据库,boltdb为每一个key都创建了一个索引(B+树),B+树中存储了这个key的版本信息(如下)

 

 

  • raft_term任期,每一个Leader当选,任期就+1
  • revision:全局版本号,只要对etcd进行修改,全局版本号就+1
  • create_revision:创建key时的全局版本号
  • mod_revision:修改key时的全局版本号

步骤:

0)写请求发送
1)转发给Leader
2)Leader写日志记录,
    2.1)Leader将写日志操作广播到Follower
    2.2)Follower写日志
3)Follower返回ack表示收到
4)Leader提交写数据到磁盘
    4.1)Leader广播commit信息到Follower
    4.2)Follower提交数据到磁盘

Etcd一致性实现 raft机制  

raft是Etcd的一致性实现机制,主要包括集群的Leader选举、数据复制、http://thesecretlivesofdata.com/raft/

Leader选举

0)集群三个节点为例
1)当未收到Leader发送的消息,则三个节点分别随机产生时间进行选举倒计时,谁先倒计时完成,谁成为候选者
2)候选者term任期+1,对自己的vote投票数+1,候选者节点重新选举倒计时,并向其他节点发送投票消息
3)其他节点收到消息后回复,也分别重新开始倒计时
4)候选者收到>n/2的消息,则自动成为Leader
5)成为Leader后,Leader会发送心跳/数据给Follower节点,每次Follower节点收到后都会重置选举倒计时
6)如果Leader节点Down机,循环1)->5)

Log复制

流程如上架构图

Etcd分布式锁机制

Lease租约(过期时间):etcd将过期时间相同的key放在一起,称为一个租约

续约:一般在主线程下再开启一个子线程专门用来续约,在租约时长还剩1/3时进行续约

1.获取锁,即存个key并规定这个key的过期时间(Lease),如果存在key则锁存在,如果key过期则无锁。

2.在获取锁的主线程下,开一个子线程专门用来续约,如果主线程没有执行完,则在租约时长还剩1/3时子线程会进行续约。

所以,如果服务Down掉,子线程也会Down掉,则锁到租期后会自动解锁。

posted @ 2022-03-28 14:48  =馨=星=  阅读(338)  评论(0)    收藏  举报