===== 安装 ===== * 下载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