搭建zookeeper集群

简介: Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将 从使用者角度详细介绍 Zookeeper 的安装和配置文件中各个配置项的意义,以及分析 Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等),用 Java 实现它们并给出示例代码。

  安装和配置详解

本文介绍的 Zookeeper 是以
3.3.6 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper
的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。

单机模式

单机安装非常简单,只要获取到
Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.3.6 下,Zookeeper 的启动脚本在 bin 目录下,Linux
下的启动脚本是 zkServer.sh,Windows下的启动脚本是zkServer.cmd。

在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和
log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper
在启动时会找这个文件作为默认配置文件。下面详细介绍一下,这个配置文件中各个配置项的意义。

# The number of milliseconds
of each tick
    tickTime=2000
    # The number of ticks that the
initial 
    # synchronization phase can take
    initLimit=10
    #
The number of ticks that can pass between 
    # sending a request and
getting an acknowledgement
    syncLimit=5
    # the directory where the
snapshot is stored.
    dataDir=/tmp/zookeeper
    # the port at which the
clients will connect
    clientPort=2181

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime
    时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper
    会监听这个端口,接受客户端的访问请。

当这些配置项配置好后,你现在就可以启动
Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort
端口号在监听服务。

bin目录下的指令介绍

以 .sh
结尾的文件是linux系统下的可执行文件。

以.cmd结尾的文件是windows系统下的可执行文件。

zkCleanup.sh    --------  
清空ZK下的某一路径下的配置文件

zkCli.sh             
--------   连接到ZK服务器上,不加参数默认连接本机,加上-server 
192.168.0.22:2181表示访问192.168.0.222机器上端口为2181的ZK服务器。进入之后,ls /xxx  命令为显示文件名,get 
/xxx 命令为显示文件内容。

zkServer.sh      
---------   启动ZK服务的脚本。

ZooKeeper Distributed模式

ZooKeeper分布式模式安装(ZooKeeper集群)也比较容易,这里说明一下基本要点。

首先要明确的是,ZooKeeper集群是一个独立的分布式协调服务集群,“独立”的含义就是说,如果想使用ZooKeeper实现分布式应用的协调与管理,简化协调与管理,任何分布式应用都可以使用,这就要归功于Zookeeper的数据模型(Data
Model)和层次命名空间(Hierarchical Namespace)结构,
详细可以参考http://zookeeper.apache.org/doc/trunk/zookeeperOver.html。在设计你的分布式应用协调服务时,首要的就是考虑如何组织层次命名空间。

下面说明分布式模式的安装配置,过程如下所示:

ZooKeeper采用一种称为Leader
election的选举算法。在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果ZooKeeper集群在运行过程中Leader出了问题,系统会采用该算法重新选出一个Leader。

ZooKeeper集群启动的时候,会首先选出一个Leader,在Leader
election过程中,某一个满足选举算的结点就能成为Leader。整个集群的架构可以参考http://zookeeper.apache.org/doc/trunk/zookeeperOver.html#sc_designGoals。

准备工作:
下载http://mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz

第一步:修改ZooKeeper配置文件

在其中一台机器上192.168.0.2,解压缩zookeeper-3.3.4.tar.gz,把conf目录下的zoo_sample.cfg
复制成zoo.cfg文件,修改配置文件conf/zoo.cfg,内容如下所示:
    tickTime=2000  
   
dataDir=dataDir=/tmp/zookeeper
    clientPort=2181  
    initLimit=5  
    syncLimit=2  
    server.1=192.168.0.2:2888:3888
 
    server.2=192.168.0.3:2888:3888
 
    server.3=192.168.0.4:2888:3888

initLimit:这个配置项是用来配置 Zookeeper
接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower
服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper
服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
    syncLimit:这个配置项标识 Leader 与
Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
    server.A=B:C:D:其中 A
是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D
表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper
实例通信端口号不能一样,所以要给它们分配不同的端口号。

第二步:远程复制分发安装文件

上面已经在一台机器192.168.0.2上配置完成ZooKeeper,现在可以将该配置好的安装文件远程拷贝到集群中的各个结点对应的目录下:

第三步:设置myid

在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字。

第四步:启动ZooKeeper集群

在名节点的bin目录下执行:./zkServer.sh
start
 tailf  zookeeper.out
可能发现如下异常
ARN  [WorkerSender
Thread:[email protected]] - Cannot open channel to 2 at election address
slave-02/192.168.0.178:3888  
java.net.ConnectException: Connection
refused  
        at
sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
        at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
 
        at
sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
        at
org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)
 
        at
org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:340)
 
        at
org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:360)
 
        at
org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:333)
 
        at
java.lang.Thread.run(Thread.java:662)  
2012-01-08 06:51:19,420 - WARN 
[WorkerSender Thread:[email protected]] - Cannot open channel to 3 at
election address slave-03/192.168.0.177:3888  
java.net.ConnectException: Connection
refused  
        at
sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
        at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
 
        at
sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
        at
org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)
 
        at
org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:340)
 
        at
org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:360)
 
        at
org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:333)
 
        at
java.lang.Thread.run(Thread.java:662)  
由于ZooKeeper集群启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,所以上面日志前面部分的异常是可以忽略的。通过后面部分可以看到,集群在选出一个Leader后,最后稳定了。

其他结点可能也出现类似问题,属于正常。

第五步:安装验证

可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:

./bin/zkServer.sh status

另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如

./bin/zkCli.sh -server
192.168.0.2:2181

时间: 2024-10-07 01:08:47

搭建zookeeper集群的相关文章

zookeeper(三)--- 搭建zookeeper集群

zookeeper(三)--- 搭建zookeeper集群 环境 vagrant虚拟机 centos7 SecureCRT 软件 zookeeper3.4.6.tar.gz 步骤 1.使用vagrant创建3个虚拟机 IP地址:192.168.21.222,192.168.21.223,192.168.22.224 2.使用SecureCRT链接虚拟机 3.安装配置zookeeper 安装配置Zookeeper集群 解压 tar xzvfzookeeper-3.4.6.tar.gz 重命名解压后

如何搭建Zookeeper集群

 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等.其部署方式有单机部署和集群部署,单机部署意义不大,下面主要介绍集群部署. 因硬件环境的限制,本次搭建Zookeeper集群是在Windows且是单机的环境下搭建的,也就是伪集群:不过伪集群跟集群区别不大,往下看就知道啦. 一.去Zookeeper官

docker 搭建zookeeper集群和kafka集群

docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker appl

docker-compose搭建zookeeper集群

搭建zookeeper集群 创建docker-compose.yml文件 ``` version: '3.1' services: zoo1: image: zookeeper restart: always container_name: zoo1 ports: - 2181:2181 volumes: - /usr/local/docker/zookeeper/zoo1/data:/data - /usr/local/docker/zookeeper/zoo1/datalog:/datalo

Dcoker 搭建ZooKeeper集群

原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤. 镜像下载 hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.首先执行如下命令: docker pull zookeeper 当出现

记一次多台linux搭建zookeeper集群

自己搭建了zookeeper集群,使用了三台linux,搭建三节点的集群,这里记录一下. 在linux上可以使用wget+网址+版本号,wget和网址之间有个空格,就可以直接在linux上联网下载相应的软件版本. 首先,在/usr/local下执行 # wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz 解压:# tar -zxvf zookeeper-3.4.5.tar.gz

使用 Docker搭建 ZooKeeper 集群

1.镜像下载 docker pull zookeeper 2.启动 ZK 镜像 >>> docker run --name my_zookeeper -d zookeeper:latest 这个命令会在后台运行一个 zookeeper 容器, 名字是 my_zookeeper, 并且它默认会导出 2181 端口.接着我们使用: docker logs -f my_zookeeper 3.使用 ZK 命令行客户端连接 ZK 因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口, 因此我

centos7搭建zookeeper集群环境

搭建起一个zookeeper的集群环境,选择三台机器作为测试(zookeeper的集群环境节点数最好的是>=3且为奇数) 选用三台虚拟机机器(三台机器上需要配置好jdk环境): Node1:192.168.153.133 Node2:192.168.153.137 Node3:192.168.153.138 首先下载zookeeper的稳定版,地址https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/apache-zookeep

solr集群搭建,zookeeper集群管理

1. 第一步 把solrhome中的配置文件上传到zookeeper集群.使用zookeeper的客户端上传. 客户端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts ./zkcli.sh -zkhost 192.168.243.135:2181,192.168.243.135:2182,192.168.243.135:2183 -cmd upconfig -confdir /usr/local/solrCloud/solrhomes/so