- jdk搭建
- zookeeper环境搭建
- 下载
- 上传到Linux上
- 解压
- 重命名并移动到usr/local位置下
- 配置环境变量
- 编译
- 测试
- 启动zk
- 启动zk客户端
- 操作节点
- java api操作zk
可参考笔者这篇文章
Linux下jdk的下载安装
Index of /dist/zookeeper/zookeeper-3.7.0
上传到Linux上 解压tar -zxvf zookeeper-3.4.11.tar.gz重命名并移动到usr/local位置下
mv zookeeper-3.7.0 zookeeper mv zookeeper /usr/local/配置环境变量
vim /etc/profile
添加如下内容
export JAVA_HOME=/usr/jdk8 export ZOOKEEPER_HOME=/usr/local/zookeeper export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin编译
source /etc/profile测试 启动zk
./bin/zkServer.sh start启动zk客户端
./bin/zkCli.sh操作节点
查看Zookeeper中包含的key
ls /
创建一个新的Znode 创建成功以后我们可以使用 ls/查看我们创建的内容
create /zkZsy hahahah
ls /
[zkZsy , zookeeper]
get命令获取创建Znode的内容
get /zkZsy
set 命令来对 zk 所关联的字符串进行设置
set /zkZsy zsy666
删除Znode
delete /zkMxnjava api操作zk
在maven项目添加如下依赖
org.apache.zookeeper zookeeper 3.6.3 junit junit 4.13.2 runtime org.projectlombok lombok
package com.example.zookeeper;
import lombok.extern.slf4j.Slf4j;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.CountDownLatch;
@Slf4j
public class ZookeeperTest {
// IP 和端口
private final static String ipAddress = "xxxx:2181";
public static void main(String[] args) {
ZookeeperTest test = new ZookeeperTest();
String key = "/zkZsy";
String value = "this is zhangshiyu";
//创建Znode
// test.add(key,value);
// 获取节点数据
// test.get(key);
//修改节点数据
test.modify(key,"zhangshiyu hahahaha");
//删除节点
// test.delete(key);
}
public static ZooKeeper getConntection() {
ZooKeeper zooKeeper = null;
try {
final CountDownLatch countDownLatch = new CountDownLatch(1);
//watch机制(回调),监听是否连接成功
zooKeeper = new ZooKeeper(ipAddress, 5000, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
//如果受收到了服务端的响应事件,连接成功
countDownLatch.countDown();
}
}
});
countDownLatch.await();
log.info("zookeeper状态:{}",zooKeeper.getState());//CONNECTED
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return zooKeeper;
}
public static void closeConnection(ZooKeeper zooKeeper) {
try {
// zooKeeper.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void add(String key ,String value) {
ZooKeeper zooKeeper = ZookeeperTest.getConntection();
try {
//参数类型
//1.key
//2.value
//3.对应的ACL,当前节点的权限控制
//4.设置当前节点类型
zooKeeper.create(key, value.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
ZookeeperTest.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void get(String key) {
ZooKeeper zooKeeper = ZookeeperTest.getConntection();
Stat stat = new Stat();
String data = null;
try {
byte[] bytes = zooKeeper.getData(key, null, stat);
data = new String(bytes, "gbk");
log.info("当前节点信息:{}",data);
ZookeeperTest.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public void modify(String key,String newValue) {
ZooKeeper zooKeeper = ZookeeperTest.getConntection();
Stat stat = new Stat();
//version乐观锁概念,此处需要获取version信息,则需要先get拿到节点信息
try {
//获取节点(修改需要version信息)
zooKeeper.getData(key, null, stat);
//再修改
zooKeeper.setData(key, newValue.getBytes(), stat.getVersion());
ZookeeperTest.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void delete(String key) {
ZooKeeper zooKeeper = ZookeeperTest.getConntection();
Stat stat = new Stat();
try {
//获取节点(删除需要version信息)
zooKeeper.getData(key, null, stat);
//删除节点
zooKeeper.delete(key, stat.getVersion());
log.info("节点删除成功");
ZookeeperTest.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}



