zookeeper学习之一(简介和安装)

 一、zookeeper介绍

直接翻译官网的What is zookeeper。

Zookeeper是一个关于 配置信息,命名,提供分布式同步和集群service的一站式服务。所有的这些服务或者(他们)别的表现形式经常在应用于分布式系统中。每一次去实现他们,都不可避免的花费大量的工作去修复bugs和(调整)竞争条件。因为实现这类服务很难,所以在一开始就要谨慎的对待他们。否则他们将变得很脆弱和难以管理! 即使正确的完成了,这些服务的不同实现,仍然可能导致部署后维护的复杂性。

我的水平只能翻译成这样了,原文比较古怪。酷

原文地址:http://zookeeper.apache.org/

 

 

 

二、配置和安装

点击这里下载安装包,我采用的是最新的3.4.6,是一个stable版本。

安装方式采取伪分布式部署。即在同一台机器上部署多个节点。安装过程比较简单。多台机器也同理。

 

1.把下载下来的安装包放在/opt/shencl/zookeeper/目录下,tar -zxvf 解压,改名 zookeeper-3.4.6_0。

 

2. 复制一份zoo_sample.cfg,命名为zoo.cfg。编辑zoo.cfg,我们准备部署3个节点,所以加入如下配置,

tickTime=2000

initLimit=5

syncLimit=2

dataDir=/opt/shencl/zookeeper/data/data0

dataLogDir=/opt/shencl/zookeeper/log/log0

clientPort=2180

server.0=127.0.0.1:2888:3888

server.1=127.0.0.1:2889:3889

server.2=127.0.0.1:2890:3890

 

参数解释:

tickTime: 客户端和服务端或者服务端多个节点之间维持心跳的时间间隔,单位毫秒。

initLimit:服务端节点初始化时,相互通信的等待时间。一个单位就是tickTime的值。

syncLimit:服务端节点之间同步数据的间隔时间。一个单位就是tickTime的值。

dataDir: 数据文件存放目录。

dataLogDir:用来重做数据的事务日志文件存放目录。

clientPort:给客户端连接的端口。

server.0,server.1,server.2表示节点编号,后边用冒号隔开的三个数字,分别表示节点的ip,交换数据的端口号,某个节点挂掉之后专门用来选举的端口号。

注:initLimit,syncLimit在单节点部署模式下,不需要配置。

 

3. 在dataDir目录下创建myid文件,写入该节点的编号 0 。这样一个节点就配置完成了。

 

4.复制 zookeeper-3.4.6_0 到 zookeeper-3.4.6_1和 zookeeper-3.4.6_2,要修改的地方是 zoo.cfg里的 dataDir,dataLogDir,clientPort。还有需要在自己的data目录下新建myid文件,写入自己的编号。

 

最终的目录结构如下:


 

三、启动和测试

分别进入三个节点的bin目录,启动zookeeper,运行./zkServer.sh start。

注:前边节点启动的时候,会抛出一些错误,可忽略。这是因为另外的节点没启动,导致的通信异常。

 

可以用自带的基于telnet的客户端测试一下,看看是否启动成功。随便进入一个节点的bin目录,比如节点0

./zkCli.sh -server 127.0.0.1:2180,随便输入一个字符,他会跳出help界面。说明服务端启动成功。


 

 比较重要的有ls, get,set,create,delete等等,path参数必须以/开头。留意create命令的 acl参数(Access Control权限控制)和set命令的 version参数

我们用create命令创建一个znode  /testnode , 然后ls,发现已经创建成功了!

 

可以连上另外两个节点server.1 和 server.2 (在这里仅需要换一下端口)  观察, 发现数据已经被同步过来了,也已经有/testnode了。如下图



 

 
 

 

再看看set和get命令,把他的值改成 iwantchangemynode


 

可以看到不但数据改过来了,dataVersion也已经是1了(计数器从0开始)

aclVersion仍然还是0,因为我并没有修改acl的类型。

此外zookeeper记录下来的数据还有node的 各种zxid(ZooKeeper Transaction Id),以及ctime,mtime等等。

 

四、总结

 可以看到,zookeeper仅仅是维护了一个分布式的树形目录。如下图。它通过fast paxos算法保证多个节点上znode的数据一致性。一套zookeeper可以同时给多个应用程序使用,只需要隔离好各自的path~。在生产环境中,多个程序,比如hadoop,hbase,strom共用一套zookeeper也是常事。结构如下图。

 

 

 zookeeper仅仅维护了一份目录树,那他又是如何支持Leader election、Shared lock、Queue这些牛x哄哄的功能呢?

请看下篇 zookeeper学习之二(高级特性)

 

 

本文参考:

http://zookeeper.apache.org/

http://www.cnblogs.com/haippy/archive/2012/07/23/2603583.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.html

http://coolxing.iteye.com/blog/1871009

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值