https://blog.csdn.net/catoop/article/details/50848555
http://www.cnblogs.com/ejiyuan/p/5587700.html
集群部署
1、下载
2、安装【解压,创建data,dataLog目录】
3、配置【cd zookeeper-3.4.8/conf ,创建文件 zoo.cfg】
4、创建myid文件【cd server1 ,echo 1 > myid】
5、搭建集成环境:拷贝server1为server2、server3,并修改其中的zoo.cfg、myid【注意server端口号和clientPort不要重复了,不然会出现端口冲突】【每一个server的myid内容都不能一样,这也可以理解为不同server的标识】
启动
进入 zookeeper-3.4.8/bin 目录,使用 ./zkServer.sh start 启动zk服务。(你也可以使用 ./zkServer.sh start myzoo.cfg 指定配置文件启动,这在自动化运维的时候很有用)
使用 tail -f zookeeper.out 查看日志。
要说的是:在启动第一个的时候,日志中会出现一堆错误,仔细一看就能明白,是因为另外2个server还没有启动它连接不上的错误。然后当我们启动第二个server的时候,日志中的错误将会减少。最后我们把所有server都启动起来后,日志中便没有错误了。
测试
随便进入一个zk目录,连接一个server测试【cd zookeeper-3.4.8/bin ,zkCli.sh -server 127.0.0.1:2181 】
基本命令说明:
ls 查看指定节点中包含的子节点(如:ls / 或 ls /app1/server1)
create 创建节点并赋值
get 读取节点内容
set 改变节点内容
delete 删除--------->注意zk中所有节点都基于路径确定,如你要删除 /app1/server1/nodeA 的命令为:delete /app1/server1/nodeA
Demo中的Java
1、创建zookeeper实例
2、创建Watcher实例【建立watched事件】
3、初始化zookeeper实例【连接到ZK服务,多个可以用逗号分割写】
4、操作节点
5、关闭zookeeper
开源的zkclient
为了更易于使用,有人写了开源的zkclient,我们可以直接使用它来操作zk。
zkClient 针对 zk 的一次性watcher,做了重新封装,然后定义了 stateChanged【监听children变化】、znodeChanged【监听节点数据变化】、dataChanged 【监听连接状态变化】三种监听器。
1、创建并初始化zkClient和节点[即节点路径]
2、订阅监听事件:
childChangesListener(zkClient, node);----> zkClient.subscribeChildChanges
dataChangesListener(zkClient, node); ------>zkClient.subscribeDataChanges
stateChangesListener(zkClient);------> zkClient.subscribeStateChanges
最后说几点关于ZkClient的注意事项:
1. 创建节点的时候一定要先判断节点是否存在,如果直接使用zkclient创建一个已经存在的节点,则会抛出异常。
2. 使用zkclient创建节点的时候,path描述的路径,预新增的最终节点之前的所有父节点都必须要存在,否则会抛出异常。所以根据自己需要做好处理。
网友评论