`

转载: Apache Zookeeper入门1

阅读更多

源: http://www.javabloger.com/article/apache-zookeeper-hadoop.html

 

 

口水:Zookeeper是我目前接触过Apache开源系统中比较复杂的一个产品,要搞清楚这个东东里面的运作关系还真不是一时半会可以搞定的事,本人目前只略知皮毛之术。

ZooKeeper 是什么?

  ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop)蜜蜂(Hive) 小猪(Pig)  的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,ZooKeeper是以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。
 

ZooKeeper 如何工作?

  ZooKeeper是作为分布式应用建立更高层次的同步(synchronization)、配置管理 (configuration maintenance)、群组(groups)以及名称服务(naming)。在编程上,ZooKeeper设计很简单,所使用的数据模型风格很像文件系统的目录树结构,简单来说,有点类似windows中注册表的结构,有名称,有树节点,有Key(键)/Value(值)对的关系,可以看做一个树形结构的数据库,分布在不同的机器上做名称管理。

   Zookeeper分为2个部分:服务器端和客户端,客户端只连接到整个ZooKeeper服务的某个服务器上。客户端使用并维护一个TCP连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送心跳。如果这个TCP连接中断,客户端将尝试连接到另外的ZooKeeper服务器。客户端第一次连接到ZooKeeper服务时,接受这个连接的 ZooKeeper服务器会为这个客户端建立一个会话。当这个客户端连接到另外的服务器时,这个会话会被新的服务器重新建立。

   启动Zookeeper服务器集群环境后,多个Zookeeper服务器在工作前会选举出一个Leader,在接下来的工作中这个被选举出来的Leader死了,而剩下的Zookeeper服务器会知道这个Leader死掉了,在活着的Zookeeper集群中会继续选出一个Leader,选举出leader的目的是为了可以在分布式的环境中保证数据的一致性。如图所示:

  另外,ZooKeeper 支持watch(观察)的概念。客户端可以在每个znode结点上设置一个观察。如果被观察服务端的znode结点有变更,那么watch就会被触发,这个watch所属的客户端将接收到一个通知包被告知结点已经发生变化。若客户端和所连接的ZooKeeper服务器断开连接时,其他客户端也会收到一个通知,也就说一个Zookeeper服务器端可以对于多个客户端,当然也可以多个Zookeeper服务器端可以对于多个客户端,如图所示:

你还可以通过命令查看出,当前那个Zookeeper服务端的节点是Leader,哪个是Follower,如图所示:

我通过试验观察到 Zookeeper的集群环境最好有3台以上的节点,如果只有2台,那么2台当中不管那台机器down掉,将只会剩下一个leader,那么如果有再有客户端连接上来,将无法工作,并且剩下的leader服务器会不断的抛出异常。内容如下:
java.net.ConnectException: Connection refused
        at sun.nio.ch.Net.connect(Native Method)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507)
        at java.nio.channels.SocketChannel.open(SocketChannel.java:146)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:347)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:381)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:674)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:611)
2010-11-15 00:31:52,031 – INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:FastLeaderElection@683] – Notification time out: 12800

并且客户端连接时还会抛出这样的异常,说明连接被拒绝,并且等待一个socket连接新的连接,这里socket新的连接指的是zookeeper中的一个Follower。
org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1000) Opening socket connection to server 192.168.50.211/192.168.50.211:2181 
org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:908) Socket connection established to 192.168.50.211/192.168.50.211:2181, initiating session 
org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1118) Unable to read additional data from server sessionid 0×0, likely server has closed socket, closing socket connection and attempting reconnect 
org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1000) Opening socket connection to server localhost/127.0.0.1:2181 
 2010-11-15 13:31:56,626 WARN   org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1120) Session 0×0 for server null, unexpected error, closing socket connection and attempting reconnect 
 

 先写到这里,全面了解Zookeeper不太容易,光看Apache Zookeeper官方的wiki和文档还不能对其有深入的了解,想阅读Zookeeper中的部分源代码。另外,本人目前正在学习和了解ing,欢迎大家与我交流,谢谢。

 

分享到:
评论

相关推荐

    Apache ZooKeeper分布式环境搭建教程

    zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; ...

    apache-zookeeper(apache-zookeeper-3.7.1-bin.tar.gz)

    apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...

    zookeeper系列1:入门

    **Zookeeper系列1:入门** Zookeeper是一款分布式协调服务,由Apache基金会开发,广泛应用于分布式系统中的数据共享、配置管理、命名服务、集群同步等场景。它的设计目标是简化分布式环境下的复杂问题,提供高可用...

    apache-zookeeper-3.7.0

    Apache ZooKeeper 是一个高度可靠的分布式协调服务,广泛应用于云原生环境中的服务发现、配置管理、锁服务等场景。ZooKeeper 的设计目标是简化分布式系统中的数据一致性问题,为分布式应用提供统一的服务目录和配置...

    apache-zookeeper-3.8.4-bin.tar

    1. 解压`apache-zookeeper-3.8.4-bin.tar`到指定目录。 2. 配置`conf/zoo.cfg`,设置服务器ID、数据存储路径、集群配置等。 3. 启动Zookeeper服务,使用`bin/zkServer.sh start`命令。 4. 使用`bin/zkCli.sh`命令行...

    apache zookeeper使用方法实例详解

    ZooKeeper 的使用方法实例详解可以分为四个基本要求:(1)客户端所带参数、(2)ZooKeeper 服务地址、(3)被监视的 Znode 节点名称、(4)可执行程序及其所带的参数。 在 ZooKeeper 的 Java API 中,开发人员可以...

    apache-zookeeper-3.5.5.tar.gz

    1. **服务器配置(server.properties)**:每个Zookeeper服务器都需要一个配置文件,其中包含服务器ID、数据目录和日志目录等信息。服务器ID是集群中的唯一标识,数据目录用于存储Zookeeper的数据,日志目录存放事务...

    apache-zookeeper-3.6.3-bin.zip

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式操作的进展,同时也提供了命名服务、配置管理、组服务、分布式同步和领导选举等功能。在Windows环境下安装...

    Apache ZooKeeper Essentials-Packt PublishingPDF

    《Apache ZooKeeper Essentials》是Packt Publishing出版的一本关于Apache ZooKeeper的重要指南,旨在帮助读者深入理解并掌握这个分布式协调服务的关键概念和技术。ZooKeeper作为一个开源项目,被广泛应用于大数据、...

    Apache Zookeeper Essentials-iteblog.com.pdf

    1. **安装与配置**:介绍如何在不同操作系统上安装配置ZooKeeper,并设置集群环境。 2. **基本操作**:讲解如何进行读写操作、创建节点以及删除节点等基本操作。 3. **高级特性**:深入探讨ZooKeeper提供的高级功能...

    apache-zookeeper-3.6.3.zip

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...

    最新版windows apache-zookeeper-3.5.7-bin.tar.gz

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...

    apache-zookeeper-3.7.1

    apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper...

    最新版 apache-zookeeper-3.6.2-bin.tar.gz

    Apache ZooKeeper 是一个高度可靠的分布式协调系统,广泛应用于大数据、云计算和微服务等领域的服务发现、配置管理以及分布式锁等功能。3.6.2 版本是 Apache ZooKeeper 的一个重要更新,提供了诸多改进和修复,旨在...

    zookeeper:Apache ZooKeeper

    Apache ZooKeeper 有关Apache ZooKeeper的最新信息,请访问我们的网站: 和我们的Wiki,位于: 包装/发布文物 使用maven构建项目后,可以从下载或在zookeeper-assembly / target目录中找到。 apache-zookeeper-...

    zookeeper集群

    1. 安装ZooKeeper:首先需要下载ZooKeeper的安装包,例如zookeeper-3.4.9.tar.gz,然后将其解压到指定的安装目录中。 2. 配置ZooKeeper:在ZooKeeper的配置文件zoo.cfg中,需要修改数据目录、端口号、服务器列表等...

    node-zookeeper:Apache Zookeeper的node.js客户端

    node-zookeeper-Apache Zookeeper的Node.js客户端。 该节点模块在官方ZooKeeper C客户端API之上实现,支持ZooKeeper服务器v3.4.x-v3.6.x。 请查看以获取有关行为的更多详细信息。 最新更改在中描述 安装 npm ...

    zktop:Apache ZooKeeper的顶部

    ZooKeeper顶部 作者: (在上关注我) ..../zktop.py --servers "server1,server2,server3" 或者,对于ZK样式的配置文件: ./zktop.py --config zk.conf 显示如下屏幕: Ensemble -- nodecount:10 zxid

Global site tag (gtag.js) - Google Analytics