分布式-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掉,则锁到租期后会自动解锁。
分布式-Etcd介绍的更多相关文章
- MemSQL分布式架构介绍(一)
最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...
- MemSQL分布式架构介绍(二)
接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...
- Elasticsearch 6.x版本全文检索学习之分布式特性介绍
1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...
- Celery学习---Celery 分布式队列介绍及安装
Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...
- etcd介绍
etcd是一个开源的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现. etcd与zookeeper相比算是轻量级系统.etcd的raft比zookeeper的paxos简单. 我们用et ...
- Etcd学习(一)安装和.NETclient測试
Etcd是一个比較新的分布式协调框架,由CoreOS的开发团队开发,如今才仅仅到0.4.6版本号,还没公布1.0版本号 我看了一下GitHub上作者们的提交记录,如今应该还在如火如荼的开发以及改动Bu ...
- Go语言学习之12 etcd、contex、kafka消费实例、logagent
本节内容: 1. etcd介绍与使用 2. ElastcSearch介绍与使用 1. etcd介绍与使用 概念:高可用的分布式key-value存储,可以使用配置共享和服务发现 ...
- go etcd
etcd介绍 GitHub:https://github.com/coreos/etcd 官网:https://coreos.com/etcd/ 下载:https://github.com/coreo ...
- Go操作etcd
etcd是近几年比较火热的一个开源的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现,本文主要介绍etcd的安装和使用. etcd etcd介绍 etcd是使用Go语言开发的一个开源的.高 ...
- 彻底搞懂 etcd 系列文章(一):初识 etcd
0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...
随机推荐
- vue3 门户网站搭建6-wangeditor
门户网站的新闻.公告等文章,内容可配置,故引入 wagneditor 1.安装: npm i wangeditor 2.方便调用,抽成组件: <template> <div ref= ...
- Django操作mongo数据库二(MongoClient方式)
一.基本环境 1.开发环境: Python环境:Python 3.8.16 Django环境:4.1 2.需要安装的包 pip install pymongo pip install mongoeng ...
- 黑马程序员Javaweb综合案例错误总结整理
案例整理(呕心沥血的教训) 其他的我大部分还是不知道那里出了问了,我这个新建的项目must3终于成功了 那个品牌名称和企业名称没有,是要在BrandMapper里加注解@ResultMap 一直报那个 ...
- Kotlin源码分析 - 元编程(使用自身语言编写生成自身代码)
Kotlin源码分析 Kotlin模块FIR分析发现,在生成fir tree的时候,kotlin使用了元编程的技术,以前看到这个技术还是在JastAdd上,使用jastadd语法去写代码,生成Java ...
- UI动画练习 - CABasicAnimation:视图绕X/Y轴旋转(3D效果)
视图 3D 旋转 1 - 代码示例:以绕 X 轴旋转为例 1 #import "ViewController.h" 2 @interface ViewController () 3 ...
- [Oracle19C 数据库管理] 管理PDB
更改PDB的打开模式 RESTRICT模式 维护时使用,可以让只有RESTRICT权限的用户才能连接到数据库,其他用户无法连接. ALTER PLUGGABLE DATABASE 数据库名 CLOSE ...
- windows下运行.sh文件
1.安装git,配置git环境(D:\Tools\Git\cmd) .cmd命令检查是否安装成功(git --version). 2.打开Git Bash窗口,命令运行.sh文件. 3.运行.sh文件 ...
- 思科IPsecVPN建立
实验拓扑 实验目标: 1.不配置中间的三个路由器的路由实现router0和router2的vpn隧道 2.PC0能够ping通PC1 实验IP预定: PC0 10.1.1.1/24 PC1 20.1. ...
- maven 引入了jar包,但却不能使用jar包里类
无报错,但是就是 无法 使用 lombok 的类. 发现classpath 里面也的确没有lombok jar包. 最后把json 的 version 属性加上 就正常了. 所以 结论: 不加vers ...
- unity tex2Dlod in vert
https://forum.unity.com/threads/how-to-sample-a-texture-in-vertex-shader.513816/ GreatWall said: ↑ ...