首先须要下载zookeeper的tar包。地址为http://zookeeper.apache.org,然后再linux中解压并编译tar包。

# tar-xvzf zookeeper-3.4.5.tar.gz

假设你是使用的是window操作系统的话,须要找解压缩工具来解压上述jar包,而且须要配置JDK的java开发环境,要求JDK在1.6以上

在解压完的文件夹中。bin文件夹包括了一些命令的脚本,比如.sh结尾的是在linux中运行的脚本命令,.cmd结尾的是在window中运行的命令的脚本的信息。Lib文件夹中包括了java中须要的jar操作的类库文件

第一个zookeeper会话


以下在单机模式中创建zookeeper的回话。我们会利用zkServer和zkCli的命令工具来完毕我们的操作。有经验的管理员也经常使用他们来调试和管理zookeeper。

进入到conf文件夹,又一次命名zoo_sample.cfg文件

# mvconf/zoo_sample.cfg conf/zoo.cfg

以下的操作是可选的。把zookeeper的数据存储文件夹与zookeeper安装文件夹隔离开来

dataDir=/users/me/zookeeper

最后来启动zookeeper服务

# bin/zkServer.sh start
JMX enabled by default
Using config: ../conf/zoo.cfg
Starting zookeeper ... STARTED
#

上面的命令终于会是zookeeper服务运行在后台,以下的命令会使zookeeper运行在前台程序中。而且从输出中我们也可以看到一些重要输出的信息。

# bin/zkServer.shstart-foreground

上述命令可以让我们看到很多其它的输出信息

以下让我们来开启一个client

#bin/zkCli.sh

<some omitted output>
2012-12-06 12:07:23,545 [myid:] - INFO [main:ZooKeeper@438] -
Initiating client connection, connectString=localhost:2181
sessionTimeout=30000 watcher=org.apache.zookeeper.
ZooKeeperMain$MyWatcher@2c641e9a
Welcome to ZooKeeper!
2012-12-06 12:07:23,702 [myid:] - INFO [main-SendThread
Getting Started with ZooKeeper | 27(localhost:2181):ClientCnxn$SendThread@966] - Opening
socket connection to server localhost/127.0.0.1:2181.
Will not attempt to authenticate using SASL (Unable to
locate a login configuration)
JLine support is enabled
2012-12-06 12:07:23,717 [myid:] - INFO [main-SendThread
(localhost:2181):ClientCnxn$SendThread@849] - Socket
connection established to localhost/127.0.0.1:2181, initiating
session [zk: localhost:2181(CONNECTING) 0]
2012-12-06 12:07:23,987 [myid:] - INFO [main-SendThread
(localhost:2181):ClientCnxn$SendThread@1207] - Session
establishment complete on server localhost/127.0.0.1:2181,
sessionid = 0x13b6fe376cd0000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null

上面的运行过程为

1.      client開始建立一个回话

2.      client尝试连接127.0.0.1:2181

3.      client连接成功,服务端開始初始化回话状态

4.      回话状态初始化成功

5.      服务端发功一个同步的事件给client

以下来让我们运行一些命令操作,来玩一下zookeeper

[zk: localhost:2181(CONNECTED) 0]

[zk: localhost:2181(CONNECTED) 0] ls /

[zookeeper]

[zk: localhost:2181(CONNECTED) 1] create/workers ""

Created /workers

[zk: localhost:2181(CONNECTED) 2] ls /

[workers, zookeeper]

[zk: localhost:2181(CONNECTED) 3]

[zk: localhost:2181(CONNECTED) 3] delete/workers

[zk: localhost:2181(CONNECTED) 4] ls /

[zookeeper]

[zk: localhost:2181(CONNECTED) 5] quit

Quitting...

2012-12-06 12:28:18,200 [myid:] - INFO  [main-EventThread:ClientCnxn$

EventThread@509] - EventThread shut down

2012-12-06 12:28:18,200 [myid:] - INFO  [main:ZooKeeper@684] - Session:

0x13b6fe376cd0000 closed

# bin/zkServer.sh stop

JMX enabled by default

Using config: ../conf/zoo.cfg

Stopping zookeeper ... STOPPED

#

会话的声明周期

回话的声明周期贯穿它的起始与结束,整个声明周期状态。例如以下图所看到的

Zookeeper集群模式

上面仅仅是一个独立的模式,以下来搭建一个集群的模式。还是一个一个主机为例,在一个主机上搭建三个不同的zookeeper服务。为了实现集群模式操作。

參考一下文章:http://www.tuicool.com/articles/iMjMvm

Zookeeper中的锁


在zookeeper中有多种不同类型的锁。比方读写锁,全局锁等。

而且有非常多方式去实现zookeeper中的锁,以下我们将讨论一种最简单的,去说明应用中是怎样来利用zookeeper的。

试想。我们有一个应用,而且该应用中有n个进程都在尽力的争取锁,考虑到zookeeper不是直接的暴漏它的语法,因此我们须要用zookeeper的接口去操作节点和实现锁的机制。为了获取锁,每一个进程都尽力的去创建节点,假设获得了锁,就会创建成功。这样的情况下,一种潜在的问题是,p进程假设死掉了,可是并没有释放锁的话。那么其它进程将没有机会获得到锁。此时系统将处于一种死锁的状态,为了避免这样的情况,因此我们须要创建暂时节点。

仅仅要该节点存在,那么其它的进程将会创建失败。那么其它进程将会监视该节点,一点该节点删除掉。那么他们就有机会获取到锁。

開始搭建第一个zookeeper的更多相关文章

  1. 《从零開始搭建游戏server》项目公布到Linux环境

    前言: 之前我们提及了怎样使用Maven来创建.管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,如今我们就開始将我们之前开发的项目demo公布到Linux环境下.并让它正常执行起 ...

  2. # 从零開始搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...

  3. 站点搭建从零開始(四) server的配置

    原文发表在我的个人站点,欢迎大家訪问~转载请保留本段,或注明原文:http://www.hainter.com/website-primer-4 域名解析设置好了,通常我们就能够訪问我们的网站了,上篇 ...

  4. XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始

    Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence ok,额瑞巴蒂,说好的阅读RFC61 ...

  5. ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群

    前言:       前段时间自己参考网上的文章,梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案,其中有一个方案是使用ZooKeeper,加之在大数据处理中,ZooKeeper确实起 ...

  6. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...

  7. 站点搭建从零開始(五) WordPress的安装

    前面说了非常多废话.如今最终转到正题.WordPress的安装. 1.WordPress安装非常easy 假设你的server能通过应用中心一键安装WordPress,这一节就非常轻松了,基本上不须要 ...

  8. 单片机小白学步系列(十三) 点亮第一个LED——好的開始,成功的一半

    前面介绍了非常多概念知识.做了非常多准备工作,从这一节開始,我们正式開始单片机的学习.我们将使用单片机完毕一项非常easy的工作:点亮一个发光二极管(即LED:Light-Emitting Diode ...

  9. 站点搭建从零開始(七) WordPress站点的完好

    1.WordPress站点前后端经常使用语言简单介绍和执行过程 通常一个站点的整个构建过程中须要大量的技术支持,尤其是用到非常多种计算机语言.站点的构建主要分后端和前端两部分,后端代码在server上 ...

随机推荐

  1. Coursera Algorithms week2 基础排序 练习测验: Dutch national flag 荷兰国旗问题算法

    第二周课程的Elementray Sorts部分练习测验Interview Questions的第3题荷兰国旗问题很有意思.题目的原文描述如下: Dutch national flag. Given ...

  2. Newtonsoft.Json 序列化日期问题解决

    上代码 其中的使用方法和UserInfo实体对象就不贴代码了. /// <summary> /// 把对象转成json字符串 /// </summary> /// <pa ...

  3. 图的最短路径Dijkstra

    #include <stdio.h> #include <string.h> #include <vector> #include <queue> #i ...

  4. 【DP】书的复制

    原题链接__戳我噢 [思路] (区间)DP F[I][J]表示前i本书分给j个人用的最短时间 由于每一次j的状态由比j小的状态得出,所以要先枚举j,然后枚举i,接着枚举上一次抄书的人是谁 我觉得,难点 ...

  5. .Net Core学习(一)

    1.安装.Net Core https://www.microsoft.com/net/core#windows 2.创建一个.Net Core项目,win+R调出控制台,输入下面命令 mkdir a ...

  6. SQlserver 当输入参数为可选条件

    以前很懒,都是用拼接字符串的方式,加上if 语句,根据输入参数是否为空来判断是否需要在where 后加上对应字段的条件限制 但是拼接字符串很烦,又总是被转义符搞得很烦  '''' 所以想了其他办法 分 ...

  7. MySQL Connector for .NET 和 EF版本匹配问题

    以下讨论的都是EF5.0, 版本号:4.4.0.0 如果装了MySQL 5.0.1 , 那么最好用MySQL Connector 6.3.6,但是创建数据库后,生成迁移历史表的时候,会报错,你不管,直 ...

  8. Android 清空缓存

    APP开发中常有计算缓存大小和清空缓存的功能,此功能很常见,几乎每个应用都能看到,下面就用代码来实现此功能: 步骤为: 1.获取缓存路径 获取长时间保存的文件,Context.getExternalF ...

  9. JavaScript变量提升及作用域

    今天在知乎看前端面试题的时候,看到这样的问题,发现自己懂的真的是太少了,看了给的例子,所以写一下自己的理解. 首先放一段代码: var v= “hello JavaScript”; alert(v); ...

  10. VMWare 在物理机待机后,报错“该虚拟机似乎正在使用中”

    在物理机待机后,刚打开虚拟机,就弹出这个画面(这种情况经常出现在远程之后,本机待机之后) 点击确定后,就弹出 当点击取消,无反应,而且再次点击VM2又弹出以上窗口,点击获取所有权,则弹出以下窗口 上网 ...