目录

1.什么是zookeeper

2.zookeeper内存数据模型

3.zk节点分类

4.zk安装(基于docker)和使用

5.zk客户端的指令操作

6.节点监听机制watch

7.zk的集群搭建(基于docker)


1.什么是zookeeper

zookeeper(动物园管理者)简称zk,一个分布式,开放源码的分布式应用程序协调服务,是谷歌的Chubby一个源码的实现,是Hadoop和Hbase的重要组件,zk使用java编写,支持java和c两种编程语言

1.kz可以作为dubbo和Springcloud的服务注册中心,协调微服务之间的调用

2.使用zk实现分布式锁,redis也可以实现分布式锁

2.zookeeper内存数据模型

zk中模型结构是以树状的模型结构

每个子节点都被称为znode节点,这个znode是被它所在的路径唯一标识

znode可以有子节点,并且每个znode可以存储数据

znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多个数据

znode可以被监控,包括这个目录节点中存储的数据修改,子节点目录变化等,一旦变化可以通知设置监控的客户端

3.zk节点分类

3.1持久点p

是指节点在创建后,就一直存在,直到有明确的删除操作来主动删除这个节点---不会因为创建改节点的客户端会话失效而消失

3.2持久顺序节点ps

这个节点的特性和上面的节点类型是一致的,额外的特性是,在zk中,每个父节点会为他的第一级节点维护一个时序,会记录每个节点创建的先后顺序。基于这个特性,创建子节点的时候,可以设置这个属性,那么在创建节点的过程中,zk会自动给指定节点加上一个数字的后缀,作为新的节点名,这个数字后缀地 范围是整形的最大盒子。

3.3临时节点E

和持久节点不同的是,临时节点的生命周期和客户端会话,也就是说,如果客户端会话失效,这个临时节点也将失效,这里是会话失效而非连接断开

3.4临时顺序节点ES

具有临时节点额外特性的是,每个父节点会为它的第一级子节点维护一份时序

4.zk安装(基于docker)和使用

docker pull zookeeper
docker run --name zk -p 2181:2181 -d zookeeper
//设置开机自动启动
docker container update --restart=always dbe2978e2785
//进入容器内部
docker exec -it dbe2978e2785 /bin/bash

/apache-zookeeper-3.7.0-bin# ./bin/zkCli.sh

 简单对zookeeper配置文件讲解

tickTime:集群节点的心跳时间

clientPort:客户端连接的端口。

dataDir:默认数据存储位置

initLimit:初始化化时集群节点的同步时间

syncLimit:集群在运行过程中同步数据超时时间

maxClientCnxns:线程池数据量,默认60个

5.zk客户端的指令操作

create  /node1 xiaoyang

create  /node2 xiaochen  创建一个节点默认持久节点

create  -s /node3 ps  创建一个持久顺序节点

create -e  /node4 

get node1获取节点的信息

delete node 只能删除没有子节点的节点

6.节点监听机制watch

客户端可以监听node节点的变化,znode节点的变化,节点的监听是一次性的,当设置了watcher的数据和目录发生改变的时候,则服务器将这个改变发送给设置了watcher的客户端以便通知他们。

1.节点目录的监听 ls  /node1 true

2.节点数据的监听   get -w /node1

这个监听机制也是日后用来做微服务注册中心的原因

7.zk的集群搭建(基于docker)

解决单节点高并发的压力问题,解决单节点故障问题

//拉取镜像
docker pull zookeeper:3.4.14 

编写docker-compose.yml文件

2888端口:原子广播

3888端口:集群之间做心跳检查的

version: '2'
services:
    zoo1:
        image: zookeeper:3.4.14
        restart: always
        container_name: zoo1
        ports:
            - "2181:2181"
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    zoo2:
        image: zookeeper:3.4.14
        restart: always
        container_name: zoo2
        ports:
            - "2182:2181"
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    zoo3:
        image: zookeeper:3.4.14
        restart: always
        container_name: zoo3
        ports:
            - "2183:2181"
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

 启动容器

docker-compose up -d

//进去容器内部
docker exec -it zoo1 /bin/bash

//查看集群运行情况
zkServer.sh status


 可以看到节点1和2倍选举为 follow,节点3被选举为leader

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐