zookeeper 伪分布式安装

1 下载zookeeper安装包

下载地址 http://apache.fayea.com/zookeeper/

我下载的是zookeeper-3.4.6.tar.gz

2 解压缩

将zookeeper-3.4.6.tar.gz复制到/usr/local文件夹下

运行命令 tar -zxvf zookeeper-3.4.6.tar.gz

解压后的文件夹为 zookeeper-3.4.6 ,为了方便,将文件夹改为zookeeper。mv zookeeper-3.4.6 zookeeper

3 配置

为模拟3个分布式节点,所以须要创建三个节点的配置文件 zoo1.cfg、zoo2.cfg、zoo3.cfg

cd /usr/local/zookeeper/conf

将zoo_sample.cfg改名为zoo1.cfg

mv zoo_sample.cfg zoo1.cfg

cp zoo1.cfg zoo2.cfg

cp zoo1.cfg zoo3.cfg

zoo1.cfg配置例如以下 (注意以下标红的地方)

注:上面的hadoop3是我的机器名,能够写成127.0.0.1

zoo2.cfg配置例如以下

zoo3.cfg配置例如以下

创建Zookeeper 保存数据的文件夹

mkdir -p /usr/local/zookeeper/data/zk1

mkdir -p /usr/local/zookeeper/data/zk2

mkdir -p /usr/local/zookeeper/data/zk3

4 配置说明

tickTime:这个时间是作为 Zookeeper server之间或client与server之间维持心跳的时间间隔,也就是每一个 tickTime 时间就会发送一个心跳。
initLimit:这个配置项是用来配置 Zookeeper 接受client(这里所说的client不是用户连接 Zookeeper server的client,而是 Zookeeper server集群中连接到 Leader 的 Follower server)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper server还没有收到client的返回信息,那么表明这个client连接失败。总的时间长度就是 10*2000=20 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息。请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度。总的时间长度就是 5*2000=10秒
dataDir:顾名思义就是 Zookeeper 保存数据的文件夹,默认情况下,Zookeeper 将写数据的日志文件也保存在这个文件夹里。
clientPort:这个port就是client连接 Zookeeper server的port。Zookeeper 会监听这个port,接受client的訪问请求。
server.A=B:C:D:当中 A 是一个数字。表示这个是第几号server;B 是这个server的 ip 地址;C 表示的是这个server与集群中的 Leader server交换信息的port;D 表示的是万一集群中的 Leader server挂了。须要一个port来又一次进行选举。选出一个新的 Leader。而这个port就是用来运行选举时server相互通信的port。假设是伪集群的配置方式,因为 B 都是一样,所以不同的 Zookeeper 实例通信port号不能一样,所以要给它们分配不同的port号。
5 创建节点标识
在/usr/local/zookeeper/data/zk1 、 /usr/local/zookeeper/data/zk3 、/usr/local/zookeeper/data/zk3 三个文件夹下分别创建myid文件
里面分别写1、2、3用于标识第几号server

vi /usr/local/zookeeper/data/zk1

vi /usr/local/zookeeper/data/zk1

vi /usr/local/zookeeper/data/zk1

6 启动zookeeper

cd /usr/local/zookeeper/

7 查看启动状态

能够看到管理节点在3号server上

8 假设想停止server可使用下面命令

./bin/zkServer.sh stop conf/zoo1.cfg  

./bin/zkServer.sh stop conf/zoo2.cfg 

./bin/zkServer.sh stop conf/zoo3.cfg

9 验证zookeeper安装的正确性

./bin/zkCli.sh -server 127.0.0.1:2183

注:因为上面的leader在3号server上,3号server的client连接port是2183

运行成功后:

WATCHER::
WatchedEvent state:SyncConnected type:None path:null

[zk: 127.0.0.1:2183(CONNECTED) 0]

查看帮助:

測试

至此,Zookeeper 安装完毕。

zookeeper命令行操作
我们通过客户端连接ZooKeeper的集群,我们可以任意的zookeeper是进行连接。

./bin/zkCli.sh -server 127.0.0.1:2183

2013-08-12 05:25:39,284 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.1.201 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@22ba6c83
Welcome to ZooKeeper!
JLine support is enabled
[zk: 192.168.1.201(CONNECTING) 0] 2013-08-12 05:25:39,336 [myid:] - INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@966] - Opening socket connection to server 192.168.1.201/192.168.1.201:2181. Will not attempt to authenticate using SASL (Unable to locate a login configuration)
2013-08-12 05:25:39,345 [myid:] - INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@849] - Socket connection established to 192.168.1.201/192.168.1.201:2181, initiating session
2013-08-12 05:25:39,384 [myid:] - INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server 192.168.1.201/192.168.1.201:2181, sessionid = 0x1406f3c1ef90001, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: 192.168.1.201(CONNECTED) 0]
集群已连接,下面我们要使用一下,ZooKeeper的命令行操作。

命令行操作
通过help打印命令行帮助

[zk: 192.168.1.201(CONNECTED) 1] 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

ZooKeeper的结构,很像是目录结构,我们看到了像ls这样熟悉的命令。

#ls,查看/目录内容

[zk: 192.168.1.201(CONNECTED) 1] ls /
[zookeeper]

#create,创建一个znode节点
[zk: 192.168.1.201(CONNECTED) 2] create /node conan
Created /node

#ls,再查看/目录
[zk: 192.168.1.201(CONNECTED) 3] ls /
[node, zookeeper]

#get,查看/node的数据信息
[zk: 192.168.1.201(CONNECTED) 4] get /node
conan
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000006
mtime = Mon Aug 12 05:32:49 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

#set,修改数据
[zk: 192.168.1.201(CONNECTED) 5] set /node fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#get,再查看/node的数据信息,已改为fens.me
[zk: 192.168.1.201(CONNECTED) 6] get /node
fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#delete,删除/node
[zk: 192.168.1.201(CONNECTED) 7] delete /node
[zk: 192.168.1.201(CONNECTED) 8] ls /
[zookeeper]

#quit,退出客户端连接
[zk: 192.168.1.201(CONNECTED) 19] quit
Quitting...
2013-08-12 05:40:29,304 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x1406f3c1ef90002 closed
2013-08-12 05:40:29,305 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@509] - EventThread shut down

Java编程现实命令行操作
package org.conan.zookeeper.demo;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class BasicDemo1 {

public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    // 创建一个与服务器的连接
    ZooKeeper zk = new ZooKeeper("192.168.1.201:2181", 60000, new Watcher() {
        // 监控所有被触发的事件
        public void process(WatchedEvent event) {
            System.out.println("EVENT:" + event.getType());
        }
    });
    // 查看根节点
    System.out.println("ls / => " + zk.getChildren("/", true));
    // 创建一个目录节点
    if (zk.exists("/node", true) == null) {
        zk.create("/node", "conan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("create /node conan");
        // 查看/node节点数据
        System.out.println("get /node => " + new String(zk.getData("/node", false, null)));
        // 查看根节点
        System.out.println("ls / => " + zk.getChildren("/", true));
    }
    // 创建一个子目录节点
    if (zk.exists("/node/sub1", true) == null) {
        zk.create("/node/sub1", "sub1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("create /node/sub1 sub1");
        // 查看node节点
        System.out.println("ls /node => " + zk.getChildren("/node", true));
    }
    // 修改节点数据
    if (zk.exists("/node", true) != null) {
        zk.setData("/node", "changed".getBytes(), -1);
        // 查看/node节点数据
        System.out.println("get /node => " + new String(zk.getData("/node", false, null)));
    }
    // 删除节点
    if (zk.exists("/node/sub1", true) != null) {
        zk.delete("/node/sub1", -1);
        zk.delete("/node", -1);
        // 查看根节点
        System.out.println("ls / => " + zk.getChildren("/", true));
    }
    // 关闭连接
    zk.close();
}
}

运行结果:

2013-08-12 15:33:29,699 [myid:] - INFO [main:Environment@97] - Client environment:zookeeper.version=3.3.1-942149, built on 05/07/2010 17:14 GMT
2013-08-12 15:33:29,702 [myid:] - INFO [main:Environment@97] - Client environment:host.name=PC201304202140
2013-08-12 15:33:29,702 [myid:] - INFO [main:Environment@97] - Client environment:java.version=1.6.0_45
2013-08-12 15:33:29,702 [myid:] - INFO [main:Environment@97] - Client environment:java.vendor=Sun Microsystems Inc.
2013-08-12 15:33:29,702 [myid:] - INFO [main:Environment@97] - Client environment:java.home=D:\toolkit\java\jdk6\jre
2013-08-12 15:33:29,703 [myid:] - INFO [main:Environment@97] - Client environment:java.class.path=D:\workspace\java\zkdemo\target\classes;C:\Users\Administrator.m2\repository\org\apache\hadoop\zookeeper\3.3.1\zookeeper-3.3.1.jar;C:\Users\Administrator.m2\repository\log4j\log4j\1.2.15\log4j-1.2.15.jar;C:\Users\Administrator.m2\repository\javax\mail\mail\1.4\mail-1.4.jar;C:\Users\Administrator.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Administrator.m2\repository\jline\jline\0.9.94\jline-0.9.94.jar;C:\Users\Administrator.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar
2013-08-12 15:33:29,703 [myid:] - INFO [main:Environment@97] - Client environment:java.library.path=D:\toolkit\java\jdk6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:\toolkit\Rtools\bin;D:\toolkit\Rtools\gcc-4.6.3\bin;C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;D:\toolkit\Git\cmd;D:\toolkit\Git\bin;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn;C:\Program Files\Microsoft SQL Server\100\Tools\Binn;C:\Program Files\Microsoft SQL Server\100\DTS\Binn;c:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files (x86)\QuickTime\QTSystem;D:\toolkit\MiKTex\miktex\bin\x64;D:\toolkit\sshclient;D:\toolkit\ant19\bin;D:\toolkit\eclipse;D:\toolkit\gradle15\bin;D:\toolkit\java\jdk6\bin;D:\toolkit\maven3\bin;D:\toolkit\mysql56\bin;D:\toolkit\python27;D:\toolkit\putty;C:\Program Files\R\R-3.0.1\bin\x64;D:\toolkit\mongodb243\bin;D:\toolkit\php54;D:\toolkit\nginx140;D:\toolkit\nodejs;D:\toolkit\npm12\bin;D:\toolkit\java\jdk6\jre\bin\server;.
2013-08-12 15:33:29,703 [myid:] - INFO [main:Environment@97] - Client environment:java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp
2013-08-12 15:33:29,704 [myid:] - INFO [main:Environment@97] - Client environment:java.compiler=
2013-08-12 15:33:29,704 [myid:] - INFO [main:Environment@97] - Client environment:os.name=Windows 7
2013-08-12 15:33:29,704 [myid:] - INFO [main:Environment@97] - Client environment:os.arch=amd64
2013-08-12 15:33:29,705 [myid:] - INFO [main:Environment@97] - Client environment:os.version=6.1
2013-08-12 15:33:29,705 [myid:] - INFO [main:Environment@97] - Client environment:user.name=Administrator
2013-08-12 15:33:29,705 [myid:] - INFO [main:Environment@97] - Client environment:user.home=C:\Users\Administrator
2013-08-12 15:33:29,706 [myid:] - INFO [main:Environment@97] - Client environment:user.dir=D:\workspace\java\zkdemo
2013-08-12 15:33:29,707 [myid:] - INFO [main:ZooKeeper@373] - Initiating client connection, connectString=192.168.1.201:2181 sessionTimeout=60000 watcher=org.conan.zookeeper.demo.BasicDemo11@3dfeca642013081215:33:29,731[myid:]INFO[mainSendThread():ClientCnxn1@3dfeca64 2013-08-12 15:33:29,731 [myid:] - INFO [main-SendThread():ClientCnxn1@3dfeca642013−08−1215:33:29,731[myid:]−INFO[main−SendThread():ClientCnxnSendThread@1000] - Opening socket connection to server /192.168.1.201:2181
2013-08-12 15:33:38,736 [myid:] - INFO [main-SendThread(192.168.1.201:2181):ClientCnxnSendThread@908]Socketconnectionestablishedto192.168.1.201/192.168.1.201:2181,initiatingsession2013081215:33:38,804[myid:]INFO[mainSendThread(192.168.1.201:2181):ClientCnxnSendThread@908] - Socket connection established to 192.168.1.201/192.168.1.201:2181, initiating session 2013-08-12 15:33:38,804 [myid:] - INFO [main-SendThread(192.168.1.201:2181):ClientCnxnSendThread@908]−Socketconnectionestablishedto192.168.1.201/192.168.1.201:2181,initiatingsession2013−08−1215:33:38,804[myid:]−INFO[main−SendThread(192.168.1.201:2181):ClientCnxnSendThread@701] - Session establishment complete on server 192.168.1.201/192.168.1.201:2181, sessionid = 0x1406f3c1ef9000d, negotiated timeout = 60000
EVENT:None
ls / => [zookeeper]
EVENT:NodeCreated
EVENT:NodeChildrenChanged
create /node conan
get /node => conan
ls / => [node, zookeeper]
EVENT:NodeCreated
create /node/sub1 sub1
ls /node => [sub1]
EVENT:NodeDataChanged
get /node => changed
EVENT:NodeDeleted
EVENT:NodeChildrenChanged
EVENT:NodeChildrenChanged
ls / => [zookeeper]
2013-08-12 15:33:38,877 [myid:] - INFO [main:ZooKeeper@538] - Session: 0x1406f3c1ef9000d closed

本篇文章参考:
https://www.cnblogs.com/collin-xm/p/8080978.html

上一篇:ILSVRC比赛带来的算法


下一篇:.net在web.config中设置网站编码格式