Zookeeper
安装zookeeper
-
前提条件: 已安装JDK
解压 tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz cd apache-zookeeper-3.5.8-bin cp zoo_sample.cfg zoo.cfg 启动服务器 bin/zkServer.sh start conf/zoo.cfg #连接服务器 bin/zkCli.sh -server ip:port
-
在阿里云中安装zookeeper后,java客户端可能连接失败,这是因为端口没有开放导致的。这里在安全组中加入就行
- 测试连接
public class ZookeeperTest { private static final String ZK_ADDRESS = "IP:2181"; private static final int SESSION_TIMEOUT = 5000; private static ZooKeeper zooKeeper; private static final String ZK_NODE = "/zk-node"; public static void main(String[] args) throws Exception { final CountDownLatch countDownLatch = new CountDownLatch(1); zooKeeper = new ZooKeeper(ZK_ADDRESS, SESSION_TIMEOUT, event -> { if (event.getState() == Watcher.Event.KeeperState.SyncConnected && event.getType() == Watcher.Event.EventType.None) { countDownLatch.countDown(); System.out.println("连接成功!"); } }); System.out.println("连接中...."); countDownLatch.await(); }
znode的四种创建类型(Create Mode)
- PERSISTEN 持久化结点,一旦创建,永久存在
- EPHEMERAL 临时结点,客户端session超时这类结点就会被服务器自动删除
- PERSISTENT_SEQUENTIAL 持久化结点的基础上,自带顺序
- EPHEMERAL_SEQUENTIAL 临时结点的基础上,自带顺序
在3.5.x版本引入的类型 - Container 当没有子节点时,将会被服务器删除,默认60s检查一次
- TTL结点 过了指定时间,会被服务器删除,默认禁用(不稳定)
事件监听机制
客户端监听它所感兴趣的任意结点、目录和递归子目录结点,对应下面三种情况,客户端将被通知
- 对单个结点的监听
当监听的结点被删除、修改时 - 对某个目录的监听
当这个目录有子节点被创建、删除 - 对某个目录的地柜子节点监听
当这个目录下面的任意子节点有子节点被创建、删除或者根节点有数据变化时
Zookeeper集群中结点角色
- Leader 负责读写数据
- Follow 如果接收到写请求,会将请求转发给leader,只负责读数据
- Observer 不参与zab协议的过半机制