zookeeper
文章平均质量分 94
xqcode
积累知识是个漫长过程,学而不用容易淡忘,但是再捡起来就很快,所以只是为了自身快速捡起淡忘的知识的备忘录
展开
-
zookeeper(七) 集群调用链(源码结束)
还是上图:原创 2021-03-30 17:00:26 · 216 阅读 · 0 评论 -
zookeeper(六)集群初始化的数据同步
zookeeper数据同步流程及概念zookeeper有三种差异同步DIFF:就是当前的zxid大于最新的快照,但又没到leader最新的zxid,所以做法就是从这个zxid开始一直同步到最新的。TRUNC:就是当前的zxid比leader最新的zxid都大,证明follower已经越界了,必须回滚到leader最新的zxid那个地方上去。SNAP:就是当前的zxid比最新的SNAP要小,说明最新的快照都比follower新,所以直接就把最新的快照给follower,然后再通过committedLo原创 2021-03-29 16:39:42 · 390 阅读 · 0 评论 -
zookeeper(五)集群角色epoch的选取
在zookeeper的第三篇有个流程图,不知道是否还有印象。这个图在刚开始是非常抽象的。现在就可以对照这个图来说一下源码来的流程了。因为上一篇已经讲解了zookeeper怎么选取leader的,所以这里主要是来看看选出来之后的流程了。所以我们还是要定位到这个方法中。org.apache.zookeeper.server.quorum.QuorumPeer#run。 public void run() { setName("QuorumPeer" + "[myid=" + ge原创 2020-10-29 02:15:22 · 2035 阅读 · 1 评论 -
zookeeper(四)领导者选举
先上图:首先看到这个图肯定就会很懵,确实比较多,体系结构也比较复杂,目前但是如果是根据源码调试加上这篇博客应该问题就不是很大。我们首先从判定为集群开始说起:即从org.apache.zookeeper.server.quorum.QuorumPeerMain#runFromConfig开始。这里重点说一下quorumPeer.start();方法。 @Override public synchronized void start() { //加载事务和快照。其实就是恢复原创 2020-10-23 20:25:35 · 451 阅读 · 0 评论 -
zookeeper(三)zk集群应该怎么实现
为什么要搭建zookeeper集群?这个一般都没啥好说的,就是因为可能一台zookeeper可能会出现宕机的情况,为了提升系统的稳定性,就要多部署到几台机器上,还有一点就是在量很大的情况下一台机器撑不住只有多扩几台机器去分担压力。但是就会存在一个问题:如果要多部署几台,那么不同的机器接到了不同的请求就会做不一样的事,导致每台服务器都不一样。有人会说就不能像业务系统那样吗?比如把多台服务器对应到同一个数据库中,其中一台发生了改变其它自动更新?请想一想如果数据库连不上了呢?有人说那我可以把数据库做成集群啊原创 2020-09-28 20:30:43 · 331 阅读 · 0 评论 -
zookeeper(二)zookeeper单机启动
上一篇已经说过了zookeeper源码怎么启动的了。那么就直接步入正题。其实都不用想单机逻辑肯定非常简单,毕竟一台服务器,很多都很好实现。整个流程图如下:其中箭头中的数字是调用的顺序,横向表示在同一个方法中,而黄色区域为该方法的注释。单机启动的整个体系就是这个展开的。...原创 2020-09-26 16:10:21 · 395 阅读 · 0 评论 -
zookeeper(一)zk配置及源码搭建
本人调试的注释源码GitHub:https://github.com/XQacc/zookeeper-3.4.14其实zookeeper源码在网上的博客已经解释非常透彻了。只是看你愿不愿意亲自调试一下加深印象而已。源码中一些重要的概念:Epoch:类似于软件的迭代的最大的版本号。zookeeper中可以理解为每一次发起选举的届号,就理解为第几届选举大会即可。也可称为纪元号。datatree:通俗翻译就是数据树。为什么会存在这个结构?因为我们在服务端看到的就是zookeeper就像是一个数据目录一样的原创 2020-09-23 20:09:49 · 331 阅读 · 0 评论