文档章节

Zookeeper初遇

trayvon
 trayvon
发布于 2016/03/20 19:20
字数 2111
阅读 148
收藏 15

一、Zookeeper的基本安装与配置

首先可以从Zookeeper Release这里下载你需要的版本。

Zookeeper的运行是比较简单的,因为Zookeeper已经提供了相应的在WindowsLinux下启动的脚本。

下载下来之后,首先解压到你想要的目录。解压之后的(Windows)目录如下:

1Zookeeper目录

然后可以进入conf目录下,可以看到一个zoo_sample.cfg的文件。可以拷贝该文件命名为zoo.cfg这个是Zookeeper启动时默认读取的配置文件。

可以看到配置文件中已经有几个参数如下:

#tickTime就是心跳时间,单位是毫秒。进一步说就是Zookeeper的客服端和服务器端通信是#基于TCP长连接的,
#为了确认Zookeeper客服端还活着每隔tickTime时间长度
#Zookeeper服务器端就发送一个心跳包来检查客户端的状态
tickTime=2000
#dataDir主要就是用来存放Zookeeper的数据快照和更新日志的
#快照就是Zookeeper在运行时的内存中的数据拷贝,Zookeeper会对所用的
#跟新操作都记录其日志,日志的文件就放在dataDir所指的目录下
#值得注意的是dataDir所指定的目录一定要是存在的,如果不存在Zookeeper服务器则启动不了
dataDir=/tmp/zookeeper
#clientPort就是Zookeeper可客服端通信所使用的端口
clientPort=2181

   上面三个是Zookeeper最基本的配置,每一个Zookeeper服务器都应该有。至于initTimesyncLimit两个参数是使用Zookeeper集群的时候才会使用。在后面的集群配置时在详细介绍。

配置后上面的三个参数之后就可以启动Zookeeper服务了。在Zookeeperbin目录下可以看到有一些启动相关的脚本,如下图所示:

2Zookeeper启动脚本

后缀是.sh的是Linux的脚本。这里使用Windows的脚本。首先启动Zookeeper服务器端,直接双击zkServerNaNd就可以了。如果没有出错,就会如下图三所示的界面。

3Zookeeper服务端启动

4Zookeeper客户端启动

然后启动Zookeeper客户端。同样只需要双击zkCliNaNd就可以了,如果没有出现错误就会出现如上图4所示的命令窗口。接下来就可以利用Zookeeper提供的客户端做一些增删改的操作。

二、Zookeeper的基本使用

   在介绍Zookeeper的使用之前,先来了解一下Zookeeper的用途。Zookeeper是一个高可靠的分布式协作服务。这个介绍太抽象了,至少对于当初没有什么经验的我是如此。我看了n次也没有弄明白是什么意思,所以有时候方向是非常重要的因素,没有相关的基础背景知识在努力也没有什么效率。

   我们先来假设一个场景,我们有很多的服务,这些服务是分布式的。如果服务和分布式这个概念还是比较抽象。我们在细化一些,现在有很多台机器,每一台机器上有一些配置文件,每一台机器上有一些应用要共享这些配置文件,这些应用可能会对自己和其他机器上的这些配置文件执行读取、修改、添加和删除等操作。

   进一步的思考着中间涉及到的操作,首先不同机器之间的通信,需要监听不同机器的配置文件的数据变化,需要对操作进行同步等等。假设我们有n台机器,这样每一台机器就要和其他的n-1台机器通信,代价是相当昂贵的。

   转换一下思路,想一想观察者模式。于是我们用一台机器来作为中心统一管理这些配置文件假设我们把这个中心叫做注册中心。这样就从不同机器之间的相互通信,转换为了所用的机器和注册中心的通信。那么问题来了当随着机器的增多,注册中心的压力会也来也大。并且注册中心可能出现故障。于是我们需要集群,让多台机器组成有一个注册中心。但是集群之间要对所用机器提供一致的服务。数据的一致性怎么解决。如果自己解决这些问题的话,有太多的难点了,而且非常容易出错。例如为了所用的机器读到的配置文件都是一致的,就要解决不同注册中心上的配置文件的同步问题。要对注册中心配置进行修改就要考虑到锁的问题,因为是集群。就要考虑分布式锁的问题。

     Zookeeper就解决了这些问题,Zookeeper对数据进行了抽象。Zookeeper的数据组织是一个树结构,每一个节点是一个Znode。我们只需要对我们关心的Znode进行操作就可以了。其他的事情Zookeeper都帮助我们处理好了。

下面我们来使用Zookeeper提供给我们的客户端来做一些简单的操作,可以直接是用户help来查看有哪一些命令:

5Zookeeper help

ls /  #查看有哪些节点
create /test create   #创建一个名字为test数据为create的节点
get /test   #获取名字为test的节点
set /test update   #把名字为test的节点的数据改为 update
delete /test #删除名字为test的节点


三、Zookeeper的集群的配置

       Zookeeper集群就是为了解决连接到Zookeeper的机器太多,Zookeeper服务器压力太多的问题。Zookeeper集群还是对外提供一致的服务。所以对于客户端是没有太大的区别的,至于不同机器的数据的一致性等问题这是Zookeeper解决的。

下面就简单的介绍一些Zookeeper的伪集群的配置,首先是上面提到过的intiTimesynLimit:

#initTime 就是集群中的Leader与Follower直接的心跳时间,这个和集群的管理相关的
#syncLimi是Leader和Follower直接发送信息的最大时间长度,注意initTime和syncLimit
#都是tickTime的倍数。例如initLimit=5 ,那么intiLimit的值就是5给tickTime的时间
initLimit=10
syncLimit=5
然后就是每一台服务器的一些信息:
#其中server.x x就是为了标识每一台服务器的id。然后是该服务器对应的ip地址,之后是 
#zookeeper服务器 Leader与Follower之间通信的端口  
#最后是重新选取Leader的端口server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

 

  配置集群还有很重要的一点就是要在所配置的dataDir目录下建立一个myid的文件里面放上该服务器的id就是配置文件server.x对应的x的值。

我们把Zookeeper拷贝三份如下图所示:

6Zookeeper伪集群

然后三个Zookeeper钟的配置分别对应为:

zk1:
tickTime=2000
dataDir=D:/zookeeper/data/zk1
clientPort=2181
initLimit=10
syncLimit=5
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

 

zk2:
tickTime=2000
dataDir=D:/zookeeper/data/zk2
clientPort=2182
initLimit=10
syncLimit=5
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

 

zk3:
tickTime=2000
dataDir=D:/zookeeper/data/zk3
clientPort=2183
initLimit=10
syncLimit=5
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

   注意因为这里配置的是在一台机器上的伪集群,所以所用的端口号才不一致,在真正的集群中最好吧这些端口号配为一致,方便管理。

接下来要做的事情就是启动对应机器的启动脚本就可以了,Zookeeper集群对于客户端是透明的,如果在java程序中使用的可以利用Zookeeper提供的zookeeper.jar包来链接Zookeeper服务器。

 参考:

http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html

 


© 著作权归作者所有

trayvon
粉丝 16
博文 129
码字总数 191361
作品 1
程序员
私信 提问
大数据教程(3.6):zookeeper的命令行客户端+znode数据结构类型+监听等功能_

上一篇文章,博主介绍了zookeeper集群的搭建全过程;今天博主将为大家分享的是zookeeper的命令行客户端使用、zookeeper的数据结构和监听功能。 zookeeper启动与关闭服务的命令: 一、zookeep...

em_aaron
2018/07/30
0
0
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0
Java之品优购部署_day01(3)

2.2 搭建 Zookeeper 集群 2.2.1 搭建要求 真实的集群是需要部署在不同的服务器上的,但是在我们测试时同时启动十几个虚拟机 内存会吃不消,所以我们通常会搭建伪集群,也就是把所有的服务都搭...

我是小谷粒
2018/07/06
0
0
CentOS6 上安装 zookeeper-3.4.10 服务

参考两篇文章: zookeeper-3.4.10的安装配置: https://www.jianshu.com/p/5a4d7390bbfd Zookeeper3.4.10详解和安装: https://blog.csdn.net/qq_32642039/article/details/80887823 SpringBoot......

文文1
2018/10/26
0
0
不使用 Cygwin 的情况下在Windows 运行 Apache Kafka

引言 本教程的目的是提供在 Windows 操作系统上运行 Apache Kafka 的一个手把手的指南。本指南也将提供设置 Java 与 ZooKeeper 的指导。Apache kafka 是一个快速且可伸缩的消息队列系统,具有...

oschina
2016/01/08
3.9K
9

没有更多内容

加载失败,请刷新页面

加载更多

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

import java.util.Arrays; public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); int count=0; for(int i=0;i<array.le......

南桥北木
11分钟前
0
0
关于FLAG_ACTIVITY_NEW_TASK的使用

参考文章: https://blog.csdn.net/u010389391/article/details/78558475 Context调用startActivity, 有部分情况会报出如下错误: Caused by: android.util.AndroidRuntimeException: Calli......

Gemini-Lin
26分钟前
0
0
Python开发工具:Webware for Python

原文来之:https://www.oschina.net/p/webware+for+python 前言 Webware for Python 是一组 Python 包和工具用来开发面向对象的 Web 应用。良好的设计模式,包含一个快速的应用服务器、Servl...

A_裙232550246
35分钟前
0
0
高并发场景下的缓存有哪些常见的问题?

一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。 这就比较依赖缓存的过期和更新...

别打我会飞
50分钟前
3
0
List list = new ArrayList()为何父类引用指向子类对象(多态)

态:要有继承,方法的重写,父类引用指向子类对象 疑问一:父类引用指向子类对象 与指向父类对象 Animal cat = new Cat(); //向上转型。 父类引用指向子类对象,该引用不能再访问子类新增加的...

architect刘源源
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部