zookeeper 进入客户端_探究—Zookeeper的启动过程
Zookeeper的启动入口在org.apache.zookeeper.server.quorum.QuorumPeerMain。
在这个类的main方法里进入了zookeeper的启动过程,首先我们会解析配置文件,即zoo.cfg和myid。
这样我们就知道了dataDir和dataLogDir指向哪儿了,然后就可以启动日志清理任务了(如果配置了的话)。
DatadirCleanupanager purgeMgr =newDatadirCleanupManager(config.getDataDir(),config.getDataLogDir(),config.getSnapRetainCount(),config.getPurgeInterval());
purgeMgr.start();
接下来会初始化ServerCnxnFactory,这个是用来接收来自客户端的连接的,也就是这里启动的是一个tcp server。在Zookeeper里提供两种tcp server的实现,一个是使用java原生NIO的方式,另外一个是使用Netty。默认是java nio的方式,一个典型的Reactor模型。因为java nio编程并不是本文的重点,所以在这里就只是简单的介绍一下。
//首先根据配置创建对应factory的实例:NIOServerCnxnFactory
//或者 NettyServerCnxnFactory
ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
//初始化配置
cnxnFactory.configure(config.getClientPortAddress(),config.getMaxClientCnxns());
创建几个SelectorThread处理具体的数据读取和写出。
先是创建ServerSocketChannel,bind等
this.ss = ServerSocketChannel.open();
ss.socket().setReuseAddress(true);
ss.socket().bind(addr);
ss.configureBlocking(false);
然后创建一个AcceptThread线程来接收客户端的连接。
这一部分就是处理客户端请求的模块了,如果遇到有客户端请求的问题可以看看这部分。
接下来就进入初始化的主要部分了,首先会创建一个QuorumPeer实例,这个类就是表示zookeeper集群中的一个节点。初始化QuorumPeer的时候有这么几个关键点:
- 初始化FileTxnSnapLog,这个类主要管理Zookeeper中的操作日志(WAL)和snapshot。
- 初始化ZKDatabase,这个类就是Zookeeper的目录结构在内存中的表示,所有的操作最后都会映射到这个类上面来。
- 初始化决议validator(QuorumVerifier->QuorumMaj) (其实这一步,是在配置)。这一步是从zoo.cfg的server.n这一部分初始化出集群的成员出来,有哪些需要参与投票(follower),有哪些只是observer。还有决定half是多少等,这些都是zookeeper的核心。在这一步,对于每个节点会初始化一个QuorumServer对象,并且放到allMembers,votingMembers,observingMembers这几个map里。而且这里也对参与者的个数进行了一些判断。
- leader选举 这一步非常重要,也是zookeeper里最复杂而最精华的一部分。
到这里,我们的zookeeper就启动完成了。后面我将会分三部分进一步深入理解zookeeper:
1. leader选举
2. 存储
3. 处理客户端请求
zookeeper 进入客户端_探究—Zookeeper的启动过程相关推荐
- zookeeper 进入客户端_对 zookeeper 和 dubbo 问题总结
最近在搭建 zookeeper 和 dubbo 的环境时候,踩过很多坑,所以在此总结下! 一.zookeeper 问题总结 zookeeper 是一个注册中心,注册中心负责服务地址的注册与查找,相当于 ...
- [20160229]探究oracle的启动过程.txt
[20160229]探究oracle的启动过程.txt --昨天自己研究了sys.bootstrap$,链接http://blog.itpub.net/267265/viewspace-2016219 ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- zookeeper 日志查看_不懂 Zookeeper?看完不懂你打我
高并发分布式开发技术体系已然非常的庞大,从国内互联网企业使用情况,可发现RPC.Dubbo.ZK是最基础的技能要求.关于Zookeeper你是不是还停留在Dubbo注册中心的印象中呢?还有它的工作原理 ...
- activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧
[ZooKeeper系列]1.ZooKeeper单机版.伪集群和集群环境搭建 [ZooKeeper系列]2.用Java实现ZooKeeper API的调用 在系列的前两篇文章中,介绍了ZooKeepe ...
- api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景
Zookeeper 是一个高性能.高可靠的分布式协调系统,是 Google Chubby 的一个开源实现,目前在分布式系统.大数据领域中使用非常广泛.本文将介绍 Zookeeper 集群架构.数据模型 ...
- zookeeper使用和原理探究
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. zookeeper介绍 zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hado ...
- Zookeeper原生客户端
1.1.1.1. 客户端基本操作 package cn.enjoy.javaapi; import org.apache.zookeeper.*; import java.io.IOException ...
- Zookeeper系列(十)zookeeper的服务端启动详述
作者:leesf 掌控之中,才会成功:掌控之外,注定失败.出处:http://www.cnblogs.com/leesf456/p/6105276.html尊重原创,大家功能学习进步: 一.前言 ...
最新文章
- SQL判断语句用法和多表查询
- 在MySQL查询山东省男生信息_MySQL-查询
- Visio显示不完整
- flask mvc模式开发_Flask中文文档-转载
- 在网上看到和篇关于sql server 2005的性能优化篇,觉得写得很好。
- linuxShell之一 文件读取 循环与分支
- 特斯拉全自动驾驶订阅包来了:199美元包月 老用户99美元
- mysql 子查询 性能_mysql子查询性能
- AB-PLC软件安装以及授权
- 激光通信的优点与缺点
- Linux中tar的参数zxf,tar命令
- 公众号滑动图代码_微信公众号文章滑动图片怎么做的呢?
- How browsers work翻译
- centos6 yum安装nginx
- 拉格朗日乘数法(Lagrange multiplier)
- 学计算机单身率为什么高,单身率特别高的大学专业大全 2020哪些专业单身率高...
- openlayers官方教程(三)Basics——Zooming to your location
- 如何培养对编程开发的兴趣
- Absurdity and wonder: Heath Robinson at home
- Array和Arrays
热门文章
- python file operate example - 2
- iOS 动态添加属性方法
- 1.24小时365天不间断服务 --- 服务器及基础设施搭建入门
- 30.Linux/Unix 系统编程手册(上) -- 线程:线程同步
- 8. PHP7 安装
- 49. 模型层 --- dao 层
- MVC案例——问题一:多个请求使用一个servlet
- 25 The Go image/draw package go图片/描绘包:图片/描绘包的基本原理
- 用jquery替换dojo中的ajax
- 【Servlet】web.xml中url-pattern的用法