用户工具


安装

  • 下载zookeeper
  • 解压,并放到/usr/local下
  • 设置环境变量
    export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
    export ZOO_LOG_DIR=$ZOOKEEPER_HOME
    export PATH=$ZOOKEEPER_HOME/bin:$PATH

  • 修改配置文件

    cd /usr/local/zookeeper-3.4.6/conf
    cp zoo_sample.cfg zoo.cfg 
    
    vim zoo.cfg
    -------------------------
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper-3.4.6/data
    dataLogDir=/usr/local/zookeeper-3.4.6/log
    clientPort=2181
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888
    --------------------------

  • 初始化环境

    mkdir /usr/local/zookeeper-3.4.6/data
    mkdir /usr/local/zookeeper-3.4.6/log
    
    echo 1 > /usr/local/zookeeper-3.4.6/data/myid # for master
    echo 2 > /usr/local/zookeeper-3.4.6/data/myid # for slave1
    echo 3 > /usr/local/zookeeper-3.4.6/data/myid # for slave2

  • 启动,查看状态

    登陆每一台机器执行: zkServer.sh restart
    查看状态:zkServer.sh status

常用命令

ZooKeeper服务命令

  • 启动ZK服务: sh bin/zkServer.sh start
  • 查看ZK服务状态: sh bin/zkServer.sh status
  • 停止ZK服务: sh bin/zkServer.sh stop
  • 重启ZK服务: sh bin/zkServer.sh restart

    zk客户端命令

zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务

  • 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
  • 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
  • 创建文件,并设置初始内容: create /zk “test” 创建一个新的 znode节点“ zk ”以及与它关联的字符串
  • 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
  • 修改文件内容: set /zk “zkbak” 对 zk 所关联的字符串进行设置
  • 删除文件: delete /zk 将刚才创建的 znode 删除
  • 退出客户端: quit
  • 帮助命令: help

ZooKeeper 常用四字命令

ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

  • echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
  • echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
  • echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
  • echo kill | nc 127.0.0.1 2181 ,关掉server
  • echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
  • echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
  • echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
  • echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
  • echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
  • echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
  • echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

java API示例

  • 运行下面程序(该程序一直监听 /zk 节点)
  • 登陆zookeeper shell(zkCli.sh -server master:2181),手动更改/zk节点的值(set /zk new_string)。并查看程序输出
import org.apache.zookeeper.*;
import java.io.IOException;
/**
 * Created by fang on 15/9/12.
 */
public class zoo implements Watcher{
    /* 创建一个与服务器的连接 */
    ZooKeeper zk = null;

    public zoo() throws IOException {
        zk = new ZooKeeper("master:2181", 1000,this);
    }
    
    / 每当 /zk 节点有变化时自动调用process函数 */
    public void process(WatchedEvent event) {
        System.out.println("已经触发了" + event.getType() + "事件!" + event.getPath()); 
        try {
            /* 由于监听只生效一次,所以每次触发事件之后要再次监听/zk,第二个参数true就是设置监听*/
            System.out.println(new String(zk.getData("/zk", true, null)));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String args[]) throws IOException, KeeperException, InterruptedException {

        zoo zk = new zoo();
        while(true){    /* 不让程序退出 */

            Thread.sleep(100000); 
        }

/*        zk.close(); */
    }
}
    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>