一、部署饲养员
1,资源规划
服务器 bigdata121/192.168.50.121、bigdata122/192.168.50.122 bigdata123/192.168.50.123 动物园管理员版本 3.4.10 系统版本 centos7.22,集群部署
(1)安装zk
<代码> (root@bigdata121模块)# cd/opt/模块/zookeeper-3.4.10 [root@bigdata121 zookeeper-3.4.10] # mkdir zkData [root@bigdata121 zookeeper-3.4.10] # mv conf/zoo_sample。cfg conf/zoo.cfg 代码>
(2)修改zoo.cfg配置
<代码类=" language-properties "> #每个蜱虫的的毫秒数 tickTime=2000 #蜱虫,最初的数量 #可以同步阶段 initLimit=10 #之间可以通过蜱虫的数量 #发送一个请求并得到确认 syncLimit=5 #快照存储的目录。 #不使用/tmp为存储、/tmp这里是公正的 #例子的缘故。 # dataDir=/tmp/动物园管理员 #指定zk存储数据的目录 dataDir=/opt/模块/zookeeper-3.4.10/zkData #客户将连接的端口 clientPort=2181 #客户端连接的最大数量。 #增加这个如果你需要处理更多的客户 # maxClientCnxns=60 # #一定要读的维护部分 #管理员指南之前> & lt; dependencies> & lt; dependency> & lt; groupId> org.apache.zookeeper & lt; artifactId> zookeeper & lt; version> 3.4.10 & lt;/dependency> & lt;/dependencies> 代码>
2,创建zk客户端
<代码类="语言java ">进口org.apache.zookeeper。*; 进口org.apache.zookeeper.data.Stat; 进口org.junit.Before; 进口org.junit.Test; 进口java.io.IOException; 进口并不知道; 公开课ZkTest { 公共静态字符串connectString=" bigdata121:2181、bigdata122:2181 bigdata123:2181”; 公共静态int sessionTimeout=2000; 公共动物园管理员zkClient=零; @Before 公共空间init()抛出IOException {//创建zk客户端 zkClient=新管理员(connectString, sessionTimeout,新观察家(){//返回监听事件时的处理函数,监听事件是一次性的 公共空间过程(WatchedEvent WatchedEvent) { System.out.println (watchedEvent.getState () +”、“+ watchedEvent.getType () +”、“+ watchedEvent.getPath ()); 尝试{ zkClient。调用getChildren(“/?真正的); }捕捉(KeeperException e) { e.printStackTrace (); }捕捉(InterruptedException e) { e.printStackTrace (); } } }); } }代码>
3,创建节点
<代码类="语言java ">公共空创建(){//创建节点,参数为:节点名节点值权限节点类型//即/wangjin道开放权限持久化节点 尝试{ s=zkClient字符串。创建("/wangjin”、“道”.getBytes (), ZooDefs.Ids。OPEN_ACL_UNSAFE CreateMode.PERSISTENT); }捕捉(KeeperException e) { system . out。println(“节点存在! ! !”); }捕捉(InterruptedException e) { e.printStackTrace (); } }代码>
4,获取子节点
<代码类="语言java "> zkclient.getChildren(路径,是否监听) 返回的是子节点的列的表 例子: 公共空间getChildNode () { 尝试{ List孩子=zkClient。调用getChildren(“/?假); (字符串节点:儿童){ System.out.println(节点); } }捕捉(KeeperException e) { system . out。println(“节点不存在! ! !”); }捕捉(InterruptedException e) { e.printStackTrace (); } }代码>
5,判断节点是否存在
<=坝镅詊ava代码类> zkclient。存在(路径,是否监听) 返回的是节点的状态信息,如果为null,表示节点不存在 例子: 公共空间nodeExist () {//返回的是节点的状态信息,如果为null,表示节点不存在 尝试{ 统计统计=zkClient。存在(“/王”假); system . out。println(统计==零?“没有”:“有”); }捕捉(KeeperException e) { system . out。println(“节点不存在”); }捕捉(InterruptedException e) { e.printStackTrace (); } }代码>
四、使用zk做分布式锁实例
1, maven依赖
<代码类="语言xml "> & lt; dependency> & lt; groupId> org.apache.curator & lt; artifactId> curator-framework & lt; version> 4.0.0 & lt;/dependency> & lt; dependency> & lt; groupId> org.apache.curator一,动物园管理员——部署和使用