
etcd
思维的深度
这个作者很懒,什么都没留下…
展开
-
Golang基于etcd实现服务注册和发现功能
windows安装etcd:https://skaygo.blog.youkuaiyun.com/article/details/80712214linux安装etcd:https://skaygo.blog.youkuaiyun.com/article/details/80714661etcd是一个分布式的,一致的 key-value 存储,主要用途是共享配置和服务发现。Etcd 已经在很多分布式系统中得到广泛的使用。etcd实现服务注册与发现功能,主要使用key-value存储,租约(lease)以及watc.原创 2020-12-17 18:22:00 · 1541 阅读 · 2 评论 -
etcd中raft协议的消息(三) ——MspApp和MsgAppResp消息
MsgApp消息 上小结我们看到节点发起选举的相关消息,当候选人通过选举成为新的Leader后,首先会调用becomeLeader方法初始化相关状态,然后会调用bcastAppend方法,该方法主要向集群中其他节点广播MsgApp消息。消息的简略流程如下: becomeLeader方法的主要功能:作用:节点赢得选举变成Leader节点1.检测当前节点如果是Foll...原创 2019-01-31 11:24:00 · 1527 阅读 · 0 评论 -
etcd中raft协议的消息(四) —— 心跳相关的消息(MsgBeat、MsgHeartbeat、MsgHeartbeatResp和MsgCheckQuorum)
MsgBeat和MsgHeartbeat消息 Leader推动心跳计时器(heartbeatElapsed),而Follower推动选举计时器(electionElapsed),选举计时器的流程前面已经提到,这里主要介绍心跳计时器。当上层模块调用Tick()时,Leader会推动心跳计时器,在tickHeartbeat函数中有详细介绍。有两种情况会是Leader向集群中其他的节点发送...原创 2019-01-31 11:46:17 · 1857 阅读 · 0 评论 -
etcd网络通讯层(一)——rafthttp中重要的接口
前面我们提到etcd-raft模块,etcd-raft模块并未提供网络层的相关实现,而是将待发送的消息封装进Ready实例返回给上层模块,然后由上层模块决定如何将这些消息发送到集群中的其他节点。etcd将网络层的相关实现单独封装成一个模块,也就是etcd-rafthttp模块。从而降低了etcd-raft和etcd-rafthttp之间的耦合,提高程序的可扩展性。 et...原创 2019-04-29 19:56:01 · 1573 阅读 · 0 评论 -
etcd网络层(二)——pipeline通道实现
一、pipeline结构体pipeline通道主要负责传递快照数据pipeline结构体及相关字段如下:type pipeline struct { peerID types.ID //该pipeline对应节点的ID tr *Transport //关联的rafthttp.Transport实例 picker ...原创 2019-05-07 17:57:03 · 729 阅读 · 0 评论 -
etcd网络层(三)——stream实现过程
stream消息通道主要是通过长连接的方式和对端进行数据交互,peer结构体中的stream相关数据如下(忽略V2版本):type peer struct { writer *streamWriter //负责向Stream消息通道中写消息 msgAppReader *streamReader //负责从Stream消息通道中读消息...原创 2019-05-07 18:03:53 · 1543 阅读 · 5 评论 -
etcd网络层(五)——Transporter接口实现
一、Transport结构体type Transport struct { Logger *zap.Logger DialTimeout time.Duration // maximum duration before timing out dial of the request,dial的超时时间 // DialRetryFrequency defines the frequenc...原创 2019-05-24 18:49:06 · 1910 阅读 · 0 评论 -
etcd网络层(四)——Peer接口的实现
peer结构体是Peer接口的实现,peer是远程raft节点的代表,本地raft节点通过peer给远程raft节点发送消息每个peer有两个发送消息的基本机制:stream和pipelinestream是长连接,它始终可以传输消息。除了通常的stream,还有优化的stream用于leader发送msgApp消息,因为msgApp占了大部分的消息pipeline是一系列客户端发送请求...原创 2019-05-24 18:42:56 · 1274 阅读 · 1 评论 -
etcd网络层(六)——模拟etcd网络层的stream通道维护长连接
代码如下:package mainimport ( "io" "log" "net" "fmt" "sync" "time" "strings" "strconv" "net/http" "encoding/json" "encoding/binary")func main() { peerURL1 := "http://127.0.0.1:8081" p...原创 2019-06-28 16:32:29 · 847 阅读 · 0 评论 -
etcd中raft协议的消息(二) —— 选举相关的消息(MsgHup、MsgPreVote/MsgPreVoteResp、MsgVote/MsgVoteResp)
一、MsgHup消息 在raft协议中我们看到,Leader节点推动心跳计时器,而Follower节点会推动选举计时器。源码主要在etcd的github.com/etcd-io/etcd/tree/master/raft/node.go和raft.go中,raft结构体中有一个electionElapsed字段,该字段是选举计时器的指针,逻辑时钟每推进一次,该字段的值递增1,逻辑时钟是有上...原创 2019-01-31 10:39:47 · 1994 阅读 · 0 评论 -
etcd中raft协议的消息(一) —— 简述raft中的所有类型消息
etcd中的Raft算法简介 Raft 是一种为了管理复制日志的一致性算法。一致性算法是从复制状态机的背景下提出的(参考英文原文引用37)。在这种方法中,一组服务器上的状态机产生相同状态的副本,并且在一些机器宕掉的情况下也可以继续运行。复制状态机在分布式系统中被用于解决很多容错的问题。例如,大规模的系统中通常都有一个集群领导者,像 GFS、HDFS 和 RAMCloud,典型应用就是一个独...原创 2019-01-31 09:55:02 · 1542 阅读 · 0 评论 -
windows系统下etcd的安装与使用
一、简介etcd是一个分布式一致性键值存储,其主要用于分布式系统的共享配置和服务发现。etcd由Go语言编写二、下载并安装1.下载地址:https://github.com/coreos/etcd/releases2.将压缩文件解压到指定文件夹解压后的目录如下:其中etcd.exe是服务端,etcdctl.exe是客户端二、简单实用1.点击etcd.exe运行etcd...原创 2018-06-16 12:11:21 · 95138 阅读 · 19 评论 -
linux下安装使用etcd
一、简介 etcd是一个分布式一致性键值存储系统,用于共享配置和服务发现,专注于:简单:良好定义的,面向用户的API (gRPC)安全: 带有可选客户端证书认证的自动TLS快速:测试验证,每秒10000写入可靠:使用Raft适当分布etcd是Go编写,并使用Raft一致性算法来管理高可用复制日志: 二、安装1.方法1$curl -L https://github.com/coreos/etcd/r...原创 2018-06-16 19:22:34 · 17313 阅读 · 3 评论 -
etcd中raft算法实现原理
摘要Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举、日志复制和安全性。同时它通过实施一个更强的一致性来减少需要考虑的状态的数量。从一个用户研究的结果可以证明,对于学生而言,Raf...转载 2018-07-12 17:28:01 · 5069 阅读 · 0 评论 -
etcd应用场景和实现原理
随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。etcd为解决这类问题带来了福音,本文...转载 2018-07-13 17:32:50 · 489 阅读 · 0 评论 -
etcd中raft协议的消息(五)—— 客户端只读相关的消息(MsgReadIndex和MsgReadIndexResp消息)
readOnly模式 在看MsgReadIndex类型的消息之前需要先对readOnly的模式有所了解,raft结构体中的readOnly作用是批量处理只读请求,只读请求有两种模式,分别是ReadOnlySafe和ReadOnlyLeaseBased,ReadOnlySafe是ETCD作者推荐的模式,因为这种模式不受节点之间时钟差异和网络分区的影响,我们主要看一下ReadOnlyS...原创 2019-01-31 13:46:26 · 1323 阅读 · 0 评论 -
etcd中raft协议的消息(六)——客户端的写请求相关的消息(MsgProp消息)
在etcd-raft模块中,客户端发往集群中的写请求是通过MsgProp消息表示的。Raft集群中只有Leader节点能够响应客户端的写入请求。 客户端请求的写操作,会通过调用Node接口的Propose函数请求到raft模块中,当Follower接收到MsgProp类型的消息会转发到Leader节点,所以MsgProp消息的主要处理是在raft.stepLead...原创 2019-01-31 13:52:42 · 1140 阅读 · 0 评论 -
etcd中raft协议的消息(七)——快照复制消息(MsgSnap消息)
MsgSnap消息 通过前面介绍的raft.sendAppend()方法可知,在Leader节点尝试向集群中的Follower节点发送MsgApp消息时,如果查找不到待发送的Entry记录(即该Follower节点对应的Progress.Next指定的Entry记录),则会尝试通过MsgSnap消息将快照数据发送到Follower节点,Follower节点之后会通过快照数据回复其自...原创 2019-01-31 13:59:41 · 1135 阅读 · 0 评论 -
etcd中的环形队列inflights
inflights结构体在progress.go文件中,主要用于记录当前节点已发出未收到的响应的MsgApp消息,具体实现如下type inflights struct { // the starting index in the buffer start int //记录第一条MsgApp消息的下标 // number of inflights in the buffer co...原创 2019-01-31 16:54:33 · 857 阅读 · 0 评论 -
etcd实现原理
前一段时间的项目里用到了 Etcd(http://jolestar.com/etcd-architecture), 所以研究了一下它的源码以及实现。网上关于 Etcd 的使用介绍的文章不少,但分析具体架构实现的文章不多,同时 Etcd v3的文档也非常稀缺。本文通过分析 Etcd 的架构与实现,了解其优缺点以及瓶颈点,一方面可以学习分布式系统的架构,另外一方面也可以保证在业务中正确使用 Etcd,...转载 2018-06-23 13:33:16 · 3258 阅读 · 0 评论