zookeeper基础

Zookeeper安装

​ 1、安装jdk并配置java环境

​ 2、下载并解压zookeeper

tar -zxvf  apache-zookeeper-3.7.0-bin.tar.gz(根据下载的版本号不同包名不同)

​ 3、重命名配置文件

cp zoo_sample.cfg  zoo.cfg (zoo_sample.cfg是一个模板文件,zookeeper默认找zoo.cfg)

​ 4、启动zookeeper

​ 进入zookeeper的bin目录:

zkServer.sh start

​ 5、用zookeeper客户端连接服务端

zkCli.sh [-server ip:2181]

zookeeper节点类型

  • PERSISTENT-持久目录节点

    ​ 客户端与zookeeper断开连接后节点依然存在

  • EPHEMERAL-临时目录节点

    ​ 客户端断开该节点被删除(如检测上线状态功能)

  • PERSISTENT_SEQUENTIAL-持久化顺序节点

  • EPHEMERAL_SEQUENTIAL -临时顺序节点

Zookeeper使用

​ 1、查看节点(必须跟上路径)

ls /

​ 2、创建节点并存入数据(创建节点时指定数据)

create /zkNode dataStr 创建节点并存入数据(持久节点)
create -s /znNode1 创建顺序节点,会在节点名称后更少顺序号(持久顺序节点)
create -e /ephemeral  创建临时节点(对话结束时自动删除)

acl:权限,定义什么用户能够操作该节点,,能做什么操作。

3、修改节点数据

set  /zkNode dataUpdate

4、获取数据

get /zkNode  只查看数据
get -s /zkNode  加-s查询节点详细信息

5、删除节点(如果存在子节点则不能删除)

delete  /zkNode

监听通知机制

采用java代码实现

maven引入依赖

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>

监听代码

public class ZookeeperProSync implements Watcher {
    private static CountDownLatch connectedSemaphore=new CountDownLatch(1);
    private static ZooKeeper zk=null;
    private static Stat stat=new Stat();

    public static void main(String[] args) throws Exception
    {
        String path="/jianting";
        zk=new ZooKeeper("ip:端口",5000,new ZookeeperProSync());
        connectedSemaphore.await();
        System.out.println(new String(zk.getData(path, true, stat)));
        Thread.sleep(Integer.MAX_VALUE);
    }
    @Override
    public void process(WatchedEvent event) {
        if (event.getState() == KeeperState.SyncConnected)
        {
            if(EventType.None==event.getType()&&null==event.getPath()) {
                System.out.println("连接成功");
                connectedSemaphore.countDown();
            }
            if(event.getType()==EventType.NodeDataChanged) {
                System.out.println("数据已经修改");
                try {
                    System.out.println(new String(zk.getData(event.getPath(), true,stat)));
                } catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}

集群搭建

如果只有一台服务器可搭建伪集群

1、将配置文件zoo.cfg复制三份

​ zoo-1.cfg zoo-2.cfg zoo-3.cfg

2、修改每个配置文件的端口及数据存在路径,保证三个不一样即可。

​ tickTime=2000 时间心跳

​ initLimit=10 当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。表示10个心跳,即10*2000

​ syncLimit=5 ollower和leader之间发送消息,请求和应答的最大时间长度。表示5个心跳

​ dataDir 数据存放目录。集群模式下该文件夹下需要一个myid文件,文件内容为一个1-255之间的数字,这个数字为下方server.id中的id,表示zk进程的id

server.1=ip1:port1:port2
server.2=ip2:port3:port4
server.3=ip3:port5:port6

3、创建myid文件在配置文件的dataDir配置的目录下

4、启动集群

​ zkServer start zoo1文件地址

​ zkServer start zoo2文件地址

​ zkServer start zoo3文件地址

5、查看状态

​ zkServer status zoo1文件地址

​ zkServer status zoo2文件地址

​ zkServer status zoo3文件地址

posted @ 2021-12-16 15:35  pu_xb  阅读(33)  评论(0编辑  收藏  举报