有了java环境之后
建立三个结点的集群
vi /etc/hosts
vim /etc/profile
vim /usr/local/java/apache-zookeeper-3.6.2-bin/conf/zoo.cfg
dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log
//记得检查空格(重点)
server.1=CentosA:2888:3888
server.2=CentosB:2888:3888
server.3=CentosC:2888:3888
dataDir 是缓存数据路径
2888为组成zookeeper服务器之间的通信端口,3888为用来选举leader的端口
vi /tmp/zookeeper/data/myid
在三个结点的myid文件中分别写入 1 , 2 ,3 ;一定要不同
相关操作
cd vim /usr/local/java/apache-zookeeper-3.6.2-bin
./zkServer.sh start start-foreground启动
./zkServer.sh status 查看状态,如果集群搭建成功则会显示follower或者leader
./zkServer.sh stop 关闭
java 操作
连接
//可以写多个地址,代表连接集群
private static String ip = "192.168.93.103:2181,192.168.93.102:2181,192.168.93.101:2181";
private static int session_timeout = 40000;
private static CountDownLatch latch = new CountDownLatch(1);
private ZooKeeper zooKeeper = null;
public ZooKeeper getZkClient() throws IOException, InterruptedException {
zooKeeper = new ZooKeeper(ip, session_timeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState() == Event.KeeperState.SyncConnected) {
//确认已经连接完毕后再进行操作
latch.countDown();
System.out.println("已经获得了连接");
System.out.println(watchedEvent.getType()+" "+watchedEvent.getPath());
}
}
});
//连接完成之前先等待
latch.await();
ZooKeeper.States states = zooKeeper.getState();
System.out.println(states);
return zooKeeper;
}
创建结点
//参数1:创建节点的路径;
//参数2:创建节点存储的数据;
//参数3.创建节点后节点具有的权限
//参数4.节点类型 持久的还是短暂的
String create = zooKeeper.create("/kxj","kxj".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(create);
会输出:
None--null //
kxj //创建结点成功打印出来的
打印子节点
List<String> children = zooKeeper.getChildren("/", false);
for(String child : children){
System.out.println(child);
}