分布式-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掉,则锁到租期后会自动解锁。
最新文章
- 前端学HTTP之摘要认证
- ubuntu搭建shad(-_-)owscoks(影梭)
- 10款最好的 Bootstrap 3.0 免费主题和模板
- C#中MySQL数据库的备份 还原 初始化
- iOS远程推送1
- Python的高级特性6:使用__slots__真的能省很多内存
- linux string 操作
- 超级内存NVDIMM:下一代数据中心存储关键技术
- SharePoint REST api
- Solr4.8.0源码分析(9)之Lucene的索引文件(2)
- 利用sql 存储过程把表中内容自动生成insert语句
- javascript笔记整理(字符串对象)
- Mac下改动Android Studio 所用的JDK版本号
- HDU 4309 Seikimatsu Occult Tonneru 网络流量+像缩进
- Android dumpsys命令的使用
- linux 在jetty中部署web工程
- java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用
- ssh连接原理介绍( 无密码连接登录的原理)
- RISC-V踩坑记----__builtin_clz((x)库函数的应用
- 异常来自 HRESULT:0x80070057 (E_INVALIDARG)(转)
热门文章
- SQL Server 2012主从数据库的订阅和发布,实现数据库读写分离(主从备份)
- Mysql 系统参数查看
- URLDecoder.decode() 特殊字符的处理
- vue-seamless-scroll 组件用法-区域内容滚动效果
- java写 变量到文件
- RabbitMQ 修改密码
- Nucmer+LINKVIEW实现序列水平的共线性分析
- How to Avoid Trivial Solutions in Physics-Informed Neural Networks
- nvim比较两个文件的不同
- Codeforces Round #781 (Div. 2) - D. GCD Guess