您的位置:首页 > 其它

了解ZooKeeper

2016-06-25 16:31 260 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    公司项目中用到Zookeeper的地方肯定不少,想做一下了解。但是从哪里开始,却有些不清楚。</span>


    想想,要是真正使用到Zookeeper的人,会以什么样的顺序来用呢?

    (1)安装并配置Zookeeper;

    (2)在自己的代码中,使用到Zookeeper对外提供的接口;

    (3)了解Zookeeper中,与自己业务相关的技术实现。

    这篇文章也以这个顺序来进行吧。

一、安装并配置Zookeeper

    呃,声明一下,这可以看做是我在学习原理的时候记录下的笔记,也就是看到的所有资料,自己做的摘抄与总结,并没有在电脑上实际操作过。因此不要照做哦。

    安装Zookeeper的过程,略。

    修改.bash_profile文件是免不了的了,需要增加ZOOKEEPER_HOME环境变量,并修改PATH CLASSPATH两个环境变量。

    然后是修改Zookeeper本身的配置文件,放在$ZOOKEEPER_HOME/conf/目录下,将zoo_sample.cfd文件名称改为zoo.cfg。文件内有如下的内容:

 

<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"> </span>
<span style="font-family: Arial, Helvetica, sans-serif;"># The number of milliseconds of each tick</span>
<pre>tickTime=<span style="color: rgb(128, 0, 128);">2000</span>
# The number of ticks that the initial
# synchronization phase can take
initLimit=<span style="color: #800080;">10</span>
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=<span style="color: #800080;">5</span>
# the directory where the snapshot is stored.
# <span style="color: #0000ff;">do</span> not use /tmp <span style="color: #0000ff;">for</span> storage, /tmp here is just
# example sakes.
dataDir=/home/hadoop/zookeeper-<span style="color: #800080;">3.4</span>.<span style="color: #800080;">3</span>/data #这是我修改后的
# the port at <span style="color: #0000ff;">which</span> the clients will connect
clientPort=<span style="color: #800080;">2181</span>
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http:<span style="color: #008000;">//</span><span style="color: #008000;">zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance</span>
#
# The number of snapshots to retain <span style="color: #0000ff;">in</span> dataDir
#autopurge.snapRetainCount=<span style="color: #800080;">3</span>
# Purge task interval <span style="color: #0000ff;">in</span> hours
# Set to <span style="color: #800000;">"</span><span style="color: #800000;">0</span><span style="color: #800000;">"</span> to disable auto purge feature
#autopurge.purgeInterval=<span style="color: #800080;">1  </span>


解释一下其中的配置项吧。

tickTime:Zookeeper服务器之间,或者服务器与客户端之间的心跳间隔。也就是每个时间间隔,发送一次心跳信号。

dataDir:Zookeeper保存数据的目录。

clientPort:Zookeeper监听这个端口,接口客户端的连接请求。

二、常用到的Zookeeper API

ZooKeeper一些常用的API如下。
create(path, data, flags): 创建一个ZNode, path是其路径,data是要存储在该ZNode上的数据,flags常用的有: PERSISTEN, PERSISTENT_SEQUENTAIL, EPHEMERAL, EPHEMERAL_SEQUENTAIL
delete(path, version): 删除一个ZNode,可以通过version删除指定的版本, 如果version是-1的话,表示删除所有的版本
exists(path, watch): 判断指定ZNode是否存在,并设置是否Watch这个ZNode。这里如果要设置Watcher的话,Watcher是在创建ZooKeeper实例时指定的,如果要设置特定的Watcher的话,可以调用另一个重载版本的exists(path, watcher)。以下几个带watch参数的API也都类似
getData(path, watch): 读取指定ZNode上的数据,并设置是否watch这个ZNode
setData(path, watch): 更新指定ZNode的数据,并设置是否Watch这个ZNode
getChildren(path, watch): 获取指定ZNode的所有子ZNode的名字,并设置是否Watch这个ZNode
sync(path): 把所有在sync之前的更新操作都进行同步,达到每个请求都在半数以上的ZooKeeper Server上生效。path参数目前没有用
setAcl(path, acl): 设置指定ZNode的Acl信息
getAcl(path): 获取指定ZNode的Acl信息
解释一下其中的名词吧。Zookeeper以树状结构来组织节点,与文件系统的树状结构很相似。一个节点就叫做一个ZNode,Acl是“访问控制列表”的意思,简单点的话,就相当于电脑上文件的权限,谁可以访问,谁没权限访问。

三、Zookeeper用户配置管理服务

    例如,现在有一个服务A,服务器有M台,客户端有N个。

    服务器有一个列表,存在Zookeeper的某个ZNode上。客户端先访问Zookeeper,拿到服务端列表,存在本地,然后根据某种策略,每次选择一个服务器来访问。

    服务器启动的时候,向Zookeeper的这个节点注册,将自己加入到服务器列表中。所有服务器接收Zookeeper服务器的心跳信号,如果心跳信号失败达到一定次数,这台服务器就会被从列表中摘除。

    客户端可以watch某个节点,当街点内容发生改变时,Zookeeper会调用回调函数通知客户端,服务器列表发生改变,请更新。(但是这个watch是怎么实现的?还不太清楚。)

    用这种机制来保证,在没有人工干预的时候,也可以自动将不可用的服务器下掉,或者新增服务器。

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zookeeper