===== 安装 =====
* 下载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(); */
}
}
**maven配置**
org.apache.zookeeper
zookeeper
3.4.6
log4j
log4j
1.2.16