ZooKeeper安装运行

本文详细介绍了ZooKeeper的原理、功能及其实现方式,包括配置维护、名字服务、分布式同步、组服务等核心功能。通过ZooKeeper的Watches机制、znode操作、事件通知等特性,实现了一次完整的ZooKeeper使用流程。从安装到测试,一步步指导读者搭建并使用ZooKeeper,适用于分布式系统中需要协同工作的场景。

ZooKeeper介绍

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Zookeeper是Google的Chubby一个开源的实现.是高有效和可靠的协同工作系统.Zookeeper能够用来leader选举,配置信息维护等.在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.Zookeeper能够保证如下3点:

  • Watches are ordered with respect to other events, other watches, and
    asynchronous replies. The ZooKeeper client libraries ensures that
    everything is dispatched in order.
  • A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode.
  • The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service.

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置 为EPHEMERAL,那么当这个创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper 里.Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以调用相应的行为来处理数 据.Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交.

ZooKeeper官网

Zookeeper官网

ZooKeeper安装

首先下载最新版zookeeper-3.4.5.tar.gz

然后解压

tar zxvf zookeeper-3.4.5.tar.gz

然后进入conf目录修改zoo_sample.cfg为zoo.cfg

然后vi zoo.cfg

更改为:

# 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.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

编辑保存后进入bin目录执行

./zkServer.sh start

ZooKeeper测试

[root@localhost bin]# ./zkCli.sh
Connecting to localhost:2181
2013-01-16 14:36:22,484 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2013-01-16 14:36:22,488 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=localhost.localdomain
2013-01-16 14:36:22,489 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.6.0_29
2013-01-16 14:36:22,489 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.
2013-01-16 14:36:22,490 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/java/jdk1.6.0_29/jre
2013-01-16 14:36:22,490 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper-3.4.5/bin/../build/classes:/usr/local/zookeeper-3.4.5/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/usr/local/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/usr/local/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/usr/local/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.5/bin/../conf:./:/usr/java/jdk1.6.0_29/lib:/usr/java/jdk1.6.0_29/jre/lib
2013-01-16 14:36:22,491 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/jdk1.6.0_29/jre/lib/i386/client:/usr/java/jdk1.6.0_29/jre/lib/i386:/usr/java/jdk1.6.0_29/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
2013-01-16 14:36:22,491 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2013-01-16 14:36:22,491 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2013-01-16 14:36:22,492 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2013-01-16 14:36:22,492 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=i386
2013-01-16 14:36:22,493 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.18-308.24.1.el5
2013-01-16 14:36:22,493 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2013-01-16 14:36:22,493 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2013-01-16 14:36:22,494 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper-3.4.5/bin
2013-01-16 14:36:22,496 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5ffb18
Welcome to ZooKeeper!
2013-01-16 14:36:22,592 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost.localdomain/127.0.0.1:2181. Will not attempt to authenticate using SASL (无法定位登录配置)
2013-01-16 14:36:22,601 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost.localdomain/127.0.0.1:2181, initiating session
JLine support is enabled
2013-01-16 14:36:22,693 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost.localdomain/127.0.0.1:2181, sessionid = 0x13c3c5224cc0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
        connect host:port
        get path [watch]
        ls path [watch]
        set path data [version]
        rmr path
        delquota [-n|-b] path
        quit 
        printwatches on|off
        create [-s] [-e] path data acl
        stat path [watch]
        close 
        ls2 path [watch]
        history 
        listquota path
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path
[zk: localhost:2181(CONNECTED) 1] create /my_data "data.ch.com"
Created /my_data
[zk: localhost:2181(CONNECTED) 2] get /my_data
"data.ch.com"
cZxid = 0x2
ctime = Wed Jan 16 14:38:20 CST 2013
mZxid = 0x2
mtime = Wed Jan 16 14:38:20 CST 2013
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] set /my_date "123456.com"
Node does not exist: /my_date
[zk: localhost:2181(CONNECTED) 4] set /my_data "123456.com"
cZxid = 0x2
ctime = Wed Jan 16 14:38:20 CST 2013
mZxid = 0x4
mtime = Wed Jan 16 14:38:58 CST 2013
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
[zk: localhost:2181(CONNECTED) 5] get /my_data
"123456.com"
cZxid = 0x2
ctime = Wed Jan 16 14:38:20 CST 2013
mZxid = 0x4
mtime = Wed Jan 16 14:38:58 CST 2013
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] create /mytemp "你好吗"
Created /mytemp
[zk: localhost:2181(CONNECTED) 7] get /myt
Node does not exist: /myt
[zk: localhost:2181(CONNECTED) 8] get /mytemp
"你好吗"
cZxid = 0x5
ctime = Wed Jan 16 14:40:44 CST 2013
mZxid = 0x5
mtime = Wed Jan 16 14:40:44 CST 2013
pZxid = 0x5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
[zk: localhost:2181(CONNECTED) 9] get /mytemp
"你好吗"
cZxid = 0x5
ctime = Wed Jan 16 14:40:44 CST 2013
mZxid = 0x5
mtime = Wed Jan 16 14:40:44 CST 2013
pZxid = 0x5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
[zk: localhost:2181(CONNECTED) 10] get /my_data
"123456.com"
cZxid = 0x2
ctime = Wed Jan 16 14:38:20 CST 2013
mZxid = 0x4
mtime = Wed Jan 16 14:38:58 CST 2013
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
[zk: localhost:2181(CONNECTED) 11] ls
ZooKeeper -server host:port cmd args
        connect host:port
        get path [watch]
        ls path [watch]
        set path data [version]
        rmr path
        delquota [-n|-b] path
        quit 
        printwatches on|off
        create [-s] [-e] path data acl
        stat path [watch]
        close 
        ls2 path [watch]
        history 
        listquota path
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path
[zk: localhost:2181(CONNECTED) 12] 


### 安装运行 ZooKeeper on Windows ZooKeeper 是一个分布式协调服务,常用于管理分布式系统的配置信息、命名、提供分布式同步等。在 Windows 系统上安装运行 ZooKeeper 通常涉及以下几个步骤: #### 1. 下载 ZooKeeper 首先,访问 [Apache ZooKeeper 官方网站](https://zookeeper.apache.org/releases.html) 下载适合的版本。推荐使用稳定版本(例如 `3.7.x` 或更高)。下载完成后,解压到本地目录,例如 `C:\zookeeper`。 #### 2. 配置环境变量 为了方便在命令行中运行 ZooKeeper,建议将 ZooKeeper 的 `bin` 目录添加到系统环境变量中。具体操作如下: - 右键点击“此电脑”或“计算机”,选择“属性”。 - 点击“高级系统设置”。 - 在“系统属性”窗口中,点击“环境变量”。 - 在“系统变量”部分找到 `Path`,点击“编辑”。 - 添加 ZooKeeper 的 `bin` 路径(例如 `C:\zookeeper\bin`)。 #### 3. 创建配置文件 ZooKeeper 的配置文件通常位于 `conf` 目录下,文件名为 `zoo.cfg`。如果该文件不存在,可以手动创建并配置以下内容: ```properties tickTime=2000 dataDir=C:/zookeeper/data clientPort=2181 initLimit=5 syncLimit=2 ``` - `tickTime`:ZooKeeper 使用的时间单位,以毫秒为单位。 - `dataDir`:ZooKeeper 存储数据的目录,需要确保该目录存在。 - `clientPort`:客户端连接的端口号,默认为 `2181`。 - `initLimit`:Follower 节点与 Leader 节点进行同步的最大时间间隔,以 `tickTime` 为单位。 - `syncLimit`:Leader 节点与 Follower 节点之间心跳检测的最大超时时间,以 `tickTime` 为单位。 #### 4. 创建数据目录 根据 `dataDir` 配置的路径(例如 `C:/zookeeper/data`),手动创建对应的目录。此外,还需要在该目录下创建一个名为 `myid` 的文件,并为其分配一个唯一的 ID(例如 `1`)。每个节点的 `myid` 文件中的值应不同,且不能重复。 #### 5. 启动 ZooKeeper 打开命令提示符(CMD),输入以下命令启动 ZooKeeper: ```bash zkServer.cmd start ``` 如果一切正常,ZooKeeper 将会在后台启动,并开始监听 `2181` 端口。 #### 6. 验证 ZooKeeper 是否运行 可以通过以下命令检查 ZooKeeper 是否成功运行: ```bash zkCli.cmd -server localhost:2181 ``` 进入交互式命令行后,可以尝试执行一些基本命令,例如 `ls /`,查看根节点下的内容。 #### 7. 停止 ZooKeeper 如果需要停止 ZooKeeper,可以在命令提示符中执行以下命令: ```bash zkServer.cmd stop ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值