![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
zookeeper学习笔记
zookeeper 专栏
土豆rose
这个作者很懒,什么都没留下…
展开
-
zookeeper学习笔记之-Zookeeper知识点总结
Zookeeper客户端发送数据Packet整理:https://www.processon.com/view/link/5ea56c5ae0b34d05e1af99ed#map原创 2020-07-26 12:46:33 · 129 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper集群同步数据原理
Leader和Learner什么时候开始同步数据当服务器启动时,完成了领导者选举后,确定了服务器的角色后(比如Leader、Follower、Observer),会先统一Epoch,然后就开始数据同步,最后再构造RequestProcessor,处理客户端的请求。Learner节点向Leader发送LearnerInfo数据(包含了acceptEpoch),然后等待Leader响应 Leader不停的从Learner节点接收到发送过来的LearnerInfo数据,比较Epoch,超过过..原创 2020-07-26 12:46:46 · 537 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper集群两阶段提交原理
Leader、Follower、Observer中的RequestProcess整理:https://www.processon.com/view/link/5e993d5de0b34d6feab4b435Zookeeper集群为了保证数据一致性,利用两阶段提交机制。对于Leader节点和非Leader节点(Follower或Observer)在处理读写请求时是不一样的。 Leader节点 非Leader节点(Follower或...原创 2020-07-26 12:46:59 · 1523 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper快速领导者选举原理
人类选举的基本原理正常情况下,选举是一定要投票的。我们应该都经历过投票,在投票时我们可能会将票投给和我们关系比较好的人,如果你和几个候选人都比较熟,这种情况下你会将选票投给你认为能力比较强的人,如果你和几个候选人都不熟,并且你自己也是候选人的话,这时你应该会认为你是这些候选人里面最厉害的那个人,大家都应该选你,这时你就会去和别人交流以获得别人的投票,但是很有可能在交流的过程中,你发现了比你更厉害的人,这时你如果脸皮不是那么厚的话,你应该会改变你的决定,去投你觉得更厉害的人,最终你将得到在你心中.原创 2020-07-26 12:47:09 · 171 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper如何解决脑裂问题
什么是脑裂脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。本篇文章着重来给大家讲一下Zookeeper...原创 2020-07-26 12:47:17 · 176 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper中Session的底层原理
Session的创建流程客户端和服务端Socket连接建立成功后,客户端会向服务端发送一个ConnectRequest请求,服务端接收到ConnectRequest请求后,会创建SessionImpl对象,并且把SessionImpl对象放入sessionsById中(sessionById是一个Map),并且会把Session的过期时间更新到sessionExpiryQueue中,然后会在服务端内部构造一个OpCode.createSession的Request,该Request...原创 2020-07-26 12:47:23 · 337 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper中的Watch
watcher 机制主要提供了服务通知功能Watche的分类客户端三类,服务端两类dataWatches:表示监听的是某节点的数据变化,比如数据的新增、修改、删除 childWathes:表示监听的是某节点的孩子节点的变化,如果某个节点新增或删除了,会触发其父节点上的NodeChildrenChanged事件 existWatches(只在客户端):服务端无需单独触发该事件,由客户端接收其他事件自己判断,比如客户端接收到一个NodeCreated事件,客户端如果注册了existWa.原创 2020-07-26 12:47:29 · 430 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper连接建立流程
SendThread功能负责建立socket连接 负责从outgoingQueue中获取命令数据发送给服务端 ping命令 CRUD命令 auth命令 负责读取服务端响应数据 ping的结果 auth结果 通知 监听器事件:添加到waitingEvents队列中。 设置数据包Packet的响应信息 注册监听器 如果是异步调用,则把Packet添加到waitingEvents队列中。 如果是同步调用,则notifyAll ..原创 2020-07-26 12:47:35 · 319 阅读 · 0 评论 -
zookeeper学习笔记之-RequestProcessor详解
PrepRequestProcessor通常是一个Requestprocessor Chain中的第一个Processor,用来预处理请求。主要包括:检查ACL,如果不匹配ACL,则直接结束对该请求的处理 生成并记录ChangeRecord 设置持久化txn 调用下一个RequestProcessor通俗一点理解就是,过滤Request,不是所有的Request都是合法的,所以需要对Request进行合法的验证,验证通过后,对于Request而言就要进行持久化了,所以Prep..原创 2020-07-26 12:47:41 · 500 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper单机模式下的启动流程与数据接收模型
启动流程启动类:org.apache.zookeeper.server.quorum.QuorumPeerMain调用ZooKeeperServerMain.main(args) 把配置解析成ServerConfig对象 初始化FileTxnSnapLog对象:快照和日志操作工具类 初始化JvmPauseMonitor 初始化ZooKeeperServer 启动AdminServer 创建NIOServerCnxnFactory对象 开启ServerSocketChanne..原创 2020-07-25 17:56:21 · 102 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper详细功能介绍与客户端框架使用
节点类型(znode)持久节点,所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。 临时节点,和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。 持久顺序节点,这类节点的基本特性和持久节点是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的.原创 2020-07-25 17:55:35 · 281 阅读 · 0 评论 -
zookeeper学习笔记之-分布式系统介绍以及zookeeper快速入门
发展背景单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。分布式服务架构当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。什么是分布式系统?《分布式系统原理和范型》一书中是这样定义分布式系...原创 2020-07-25 17:54:51 · 503 阅读 · 0 评论 -
zookeeper学习笔记之-Zookeeper 3.6源码编译
利用git拉取项目 切分支:release-3.6.1 利用maven下载依赖 直接运行QuorumPeerMain类,编译过程会报错,比如找不到如下包这些包需要jute生成,进入到zookeeper-jute模块,编译一下: 编译后会生成对应的包,再次运行QuorumPeerMain类,还是报错, 找不到Info接口,这个接口也需要生成,进入到zookeeper-server模块,编译一下: 编译后会生成Info接口,再次运行QuorumPeerMain类,没有报错了,只不过没有启.原创 2020-07-25 17:53:03 · 878 阅读 · 1 评论 -
zookeeper学习笔记之-ZAB协议:如何实现操作的顺序性?
很多同学应该使用过 ZooKeeper,它是一个开源的分布式协调服务,比如你可以使用它进行配置管理、名字服务等等。在 ZooKeeper 中,数据是以节点的形式存储的。如果你要用 ZooKeeper 做配置管理,那么就需要在里面创建指定配置,假设创建节点"/geekbang"和"/geekbang/time",步骤如下:[zk: localhost:2181(CONNECTED) 7] create /geekbang 123 Created /geekbang[zk: localhost原创 2020-07-25 17:50:26 · 509 阅读 · 0 评论 -
zookeeper学习笔记之-Raft算法(三):如何解决成员变更的问题?
在日常工作中,你可能会遇到服务器故障的情况,这时你就需要替换集群中的服务器。如果遇到需要改变数据副本数的情况,则需要增加或移除集群中的服务器。总的来说,在日常工作中,集群中的服务器数量是会发生变化的。讲到这儿,也许你会问:“老韩,Raft 是共识算法,对集群成员进行变更时(比如增加 2 台服务器),会不会因为集群分裂,出现 2 个领导者呢?”在我看来,的确会出现这个问题,因为 Raft 的领导者选举,建立在“大多数”的基础之上,那么当成员变更时,集群成员发生了变化,就可能同时存在新旧配置..原创 2020-07-25 17:47:45 · 522 阅读 · 0 评论 -
zookeeper学习笔记之-Raft算法(二):如何复制日志?
通过上一讲的学习,你应该知道 Raft 除了能实现一系列值的共识之外,还能实现各节点日志的一致,不过你也许会有这样的疑惑:“什么是日志呢?它和我的业务数据有什么关系呢?”想象一下,一个木筏(Raft)是由多根整齐一致的原木(Log)组成的,而原木又是由木质材料组成,所以你可以认为日志是由多条日志项(Log entry)组成的,如果把日志比喻成原木,那么日志项就是木质材料。在 Raft 算法中,副本数据是以日志的形式存在的,领导者接收到来自客户端写请求后,处理写请求的过程就是一个复制和应用..原创 2020-07-25 17:44:08 · 376 阅读 · 0 评论 -
zookeeper学习笔记之-Raft算法(一):如何选举领导者?
Raft算法(一):如何选举领导者?参考动画更容易理解:http://thesecretlivesofdata.com/raft/(自备梯子)Raft算法官网:https://raft.github.io/ (官网上也有动画教程)Raft 算法属于 Multi-Paxos 算法,它是在兰伯特 Multi-Paxos 思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。除此之外,Raft 算法是现在分..原创 2020-07-25 17:41:59 · 1521 阅读 · 1 评论 -
zookeeper学习笔记之-Paxos算法(二)- Multi-Paxos
Basic Paxos 只能就单个值(Value)达成共识,一旦遇到为一系列的值实现共识的时候,它就不管用了。虽然兰伯特提到可以通过多次执行 Basic Paxos 实例(比如每接收到一个值时,就执行一次 Basic Paxos 算法)实现一系列值的共识。但是,很多同学读完论文后,应该还是两眼摸黑,虽然每个英文单词都能读懂,但还是不理解兰伯特提到的 Multi-Paxos,为什么 Multi-Paxos 这么难理解呢?在我看来,兰伯特并没有把 Multi-Paxos 讲清楚,只是介绍了大概的思想,.原创 2020-07-25 17:35:56 · 273 阅读 · 0 评论 -
zookeeper学习笔记之-Paxos算法(一)- Basic Paxos
提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos 算法、Cheap Paxos 算法、Raft 算法等等。而很多同学都会在准确和系统理解 Paxos 算法上踩坑,比如,只知道它可以用来达成共识,但不知道它是如何达成共识的。这其实侧面说明了 Paxos 算法有一定的难度,可分布式算法本身就很复杂,Paxos 算法自然也不会例外,当然了,除了这一点,还跟兰伯特有关。兰伯特提出的..原创 2020-07-25 17:32:42 · 290 阅读 · 0 评论