zookeeper
四月丶丶
越努力越幸运
展开
-
zookeeper源码分析-单机模式服务端启动
执行过程概述单机模式的zookeeper服务端启动逻辑在ZooKeeperServerMain类中,启动入口在QuorumPeerMain类中,由QuorumPeerMain调用ZooKeeperServerMain里面的的main函数启动,主要分为以下几步配置解析解析配置(可以是指定的配置文件路径也可以由启动参数设置),比如快照文件、日志文件保存路径,监听端口等。启动IO线程以NIO为例,zookeeper构建了一套IO模型,一个acceptThread,通过CPU 个数计算出来原创 2020-08-11 18:46:55 · 179 阅读 · 0 评论 -
Zookeeper源码环境搭建
ZooKeeper的老版本都是用Ant构建的,需要下载Ant,然后使用Ant脚本将项目编译并转成eclipse的项目结构。现在大部分项目都是Maven或Gradle构建,Ant使用的不多,到github上查看源码发现最新版本3.6的项目目录下存在pom文件,猜测应该支持Maven构建了。下载源码,下载地址: https://github.com/apache/zookeeper/tree/master选择最新版本导入IDEA启动服务类针对单机版本和集群版本,分别对应两个启动类:单机:Z原创 2020-08-09 23:31:20 · 167 阅读 · 0 评论 -
Zookeeper服务器启动流程
服务端整体架构图Zookeeper服务器启动流程大致可以分为以下五个步骤配置文件解析初始化数据管理器初始化网络I/O管理器数据恢复对外服务单机版服务器启动流程上图的过程可以分为预启动和初始化预启动统一由QuorumPeerMain作为启动类。无论单机或集群,在zkServer.cmd和zkServer.sh 中都配置了QuorumPeerMain作为启动入口类。解析配置文件zoo.cfg。zoo.cfg配置运行时的基本参数,如tickTime、dataDir、 clie原创 2020-08-09 21:18:21 · 892 阅读 · 0 评论 -
Zookeeper应用场景-分布式锁
分布式锁定义分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或者同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁。在平时的实际项目开发中,我们往往很少会去在意分布式锁,而是依赖于关系型数据库固有的排他性来实现不同进程之间的互斥。这确实是一种非常简便且被广泛使用的分布式锁实现方式。然而有一个不争的事实是,目前绝大多数大型分布式系统的性能瓶颈都集中在数据库操作上,因此,如果原创 2020-08-09 20:00:24 · 348 阅读 · 0 评论 -
Zookeeper应用场景-数据发布/订阅
数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者将数据发布到zookeeper的一个或一些列节点上,供订阅者进行数据订阅,从而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。数据发布/订阅系统一般有这种设计模式,分别是推(Push)模式和拉(Pull)模式。在推模式中,服务端主动将数据更新发送给所有订阅的客户端,而拉模式则是由客户端主动发起请求来获取最新数据,通常客户端都采用定时进行轮询拉取的方式。zookeeper采用的是推拉结合的方式:客户端向服务端注册自己需要关注的节点,原创 2020-08-09 18:38:29 · 172 阅读 · 0 评论 -
Zookeeper-开源客户端-Curator简单使用
Curator简介curator是Netflix公司开源的一套Zookeeper客户端框架,和ZKClient一样,Curator解决了很多 Zookeeper客户端非常底层的细节开发工作,包括连接重连,反复注册Watcher和NodeExistsException异常等,是最流行的Zookeeper客户端之一,从编码风格上来讲,它提供了基于Fluent的编程风格支持添加依赖<dependency> <groupId>org.apache.curator</gro原创 2020-08-08 23:02:43 · 161 阅读 · 0 评论 -
Zookeeper-开源客户端-ZkClient简单使用
ZkClientZkClient是Github上一个开源的zookeeper客户端,在Zookeeper原生API接口之上进行了包装,是一个更易用的 Zookeeper客户端,同时,zkClient在内部还实现了诸如Session超时重连、Watcher反复注册等功能接下来,从创建会话、创建节点、读取数据、更新数据、删除节点等方面来介绍如果使用zkClient添加依赖 <dependency> <groupId>com.101tec</groupId>原创 2020-08-08 21:45:57 · 278 阅读 · 0 评论 -
Zookeeper的Java客户端api使用
引入依赖jar<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version></dependency>创建会话import org.apache.zookeeper.WatchedEvent;import org.apac原创 2020-08-08 20:59:54 · 89 阅读 · 0 评论 -
ZooKeeper客户端操作命令详解
启动服务端./zkServer.sh start启动客户端并连接服务端 ./zkcli.sh 连接本地的zookeeper服务器 ./zkCli.sh -server ip:port 连接指定的服务器连接成功后,系统会输出zookeeper的相关环境及配置信息,如下所示Connecting to localhost:21812020-08-08 17:53:05,144 [myid:] - INFO [main:Environment@98] - Client environment:原创 2020-08-08 18:40:50 · 633 阅读 · 0 评论 -
ZooKeeper系统模型之Watcher、ACL
Watcher–数据变更通知zookeeper使用Watcher机制实现分布式数据的发布/订阅功能一个典型的发布/订阅模型系统定义个一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态发生变化时,会通知所有订阅者,使他们能够做出相应的处理。在zookeeper中,引入了Watcher机制来实现这种分布式的通知功能,zookeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,那么就会向指定的客户端发送一个事件通知来实现原创 2020-08-08 17:39:25 · 128 阅读 · 0 评论 -
ZooKeeper数据模型ZNode
ZNode简介在zookeeper中,数据信息被保存在一个个数据节点上,这些节点被称为ZNode,ZNode是zookeeper中最小数据单位,在ZNode下面又可以再挂ZNode,这样一层层下去就形成一个层次化命名空间ZNode树,我们称之为ZNode Tree,它采用了类似文件系统的层级树状结构进行管理,如下图在zookeeper中,每一个数据节点都是一个ZNode,上图根目录下有两个节点,分别是app1和app2,其中app1 下面又有三个子节点,所有ZNode按层次化进行组织,形成这么一棵树,原创 2020-08-08 17:01:30 · 649 阅读 · 0 评论 -
Zookeeper的基本概念
Zookeeper简介Zookeeper是一个开源的分布式协调服务,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些简单的接口提供给用户使用。Zookeeper是一个典型的分布式一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能Zookeeper基本概念1 集群角色通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最典型的集群就是Master/Slave模式(主备模式),原创 2020-08-08 16:31:58 · 134 阅读 · 0 评论 -
ZooKeeper如何解决分布式系统面临的问题
分布式系统定义及面临的问题分布式系统定义:分布式系统是同时跨越多个物理主机,独立运行的多个模块所组成的系统。面临的问题:系统每个节点之间信息同步及共享解决方式:通过网络进行信息共享这就像现实中,开发leader在会上把任务传达下去,组员通过听leader命令或者看leader的邮件知道自己要干什么。当任务分配有变化时,leader会单独告诉组员或者再次召开会议。信息通过人与人之间的直接沟通完成传递。通过共享存储这就好比开发leader按照约定的时间和路径,把任务分配表放在了SVN上,组员原创 2020-08-08 16:01:03 · 370 阅读 · 0 评论 -
Zookeeper环境搭建
单机模式单机模式下载、安装可以参考前面写的文章单机模式伪集群模式伪集群模式就是在单机环境下运行多个实例,这种搭建方式比较简单,成本低,适合测试和学习,集群模式至少需要部署运行3个实例,本文就以部署3个zookeeper说明,大部分配置跟单机模式下基本一样,如果对单机模式不熟悉可参考上面的文章。注意事项:一台机器部署3个Server,必须保证每个zookeeper的各个端口不能冲突,也就是clientPort不能相同,dataDir和dataLogDir也不能相同。另外,还要在dataDir所对应的原创 2020-08-08 15:27:35 · 114 阅读 · 0 评论 -
Linux安装zookeeper-3.6.1
安装jdk,如果已经安装过,跳过此步骤安装步骤参考:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz下载zookeeper安装包下载地址:https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1.tar.gz解压..原创 2020-07-26 20:22:55 · 422 阅读 · 0 评论