Zookeeper学习笔记

Zookeeper学习笔记

查看源图像

1.ZK简介

  • dubbo 框架 springcloud 框架 zk 注册中心
  • Hadoop Hbase 组件 集群架构 zk 集群管理者
  • zk 实现分布式锁 redis分布式

Zookeeper简称ZK,一个分布式的,开放源码的分布式应用程序协调服务,是Google的一个开源的实现,是Hadoop和Hbase的重要组件。Zookeeper使用Java编写,但是支持Java和C两种编程语言。

2.ZK内存数据模型

2.1 模型结构

在这里插入图片描述

2.2 模型的特点

  • 每个系目录如/Java都被称为一个znode节点,这个znode是被它所在的路径唯一标识
  • znode可以有子节点目录,并且每个znode可以存储数据
  • znode是可以有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
  • zonde可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端

3.节点的分类

3.1持久节点(PERSISTENT)

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

3.2持久顺序节点(PERSISTENT_SEQUENTIAL)

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

3.3临时节点(EPHEMERAL)

和持久节点不同的是,定。也就是说,如果客户端会话失效。那么这个节点就会自动被清除掉。注意。这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。

3.4临时顺序节点(EPHEMERAL_SEQUENTIAL)

具有临时节点特点,额外的特性是,每个父节点会为他的第一级子节点维护一份时序。这点和刚才提到的持久顺序节点类似

4.安装

4.1linux系统安装

# 1.安装jdk并配置环境变量 & 下载ZK安装包
- https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
# 2.下载安装包上传到linux服务中,并解压缩
- tar -zxvf zookeeper-3.7.0.tar.gz

# 3.重命名安装目录
mv zookeeper-3.7.0 zxookeeper

# 4.配置zoo.cfg配置文件
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/mydata/zkdata1
    clientPort=2181
    
# 5.启动zk
- 在zk的bin目录下,运行zkServer.sh
[root@iZ zookeeper]# ./bin/zkServer.sh start 

# 6.使用jps查看启动是否成功

# 7.启动客户端链接zk
[root@iZ zookeeper]# ./bin/zkCli.sh -server 47.106.158.72:3001
==注意== 可以通过 ./bin/zkCli.sh help 查看客户端所有的可执行指令

4.2Docker安装zookeeper

#1.获取zk镜像
docker pull zookeeper

#2.启动zk服务
docker run -d -p 2181:2181 --name myzk zookeeper

#3.进入zk
docker exec -it myzk /bin/bash

#4.启动zk
./bin/zkCli.sh

5.客户端基本指令

#1.ls path					查看特定节点下面的子节点
#2.create path data			创建一个节点。并给节点绑定数据(默认是持久性节点)
- create path data					创建持久节点(默认是持久节点)
- create -s path data				创建持久性顺序节点
- create -e path data				创建临时节点(注意:临时节点不能含有任何子节点)
- create -s -e path data			创建临时顺序节点(注意:临时节点不能含有任何子节点)

#3.stat path				查看节点状态
#4.set path data 			修改节点数据
#5.ls2 path					查看节点下孩子和当前节点的状态
#6.history					查看操作历史
#7.get path					获得节点上绑定的数据信息
#8.delete path  			删除节点(注意:删除节点不能含有子节点)
#9.rmr path					递归删除节点(注意:会将当前节点下所有节点删除)
#10.quit					退出当前会话(会话失效)

6.节点监听机制 watch

客户端可以监听 znode 节点的变化。znode 节点的变化触发相应的事件,然后清除对该节点的检测。当检测一个 znode 节点的时候,Zookeeper 会发送通知给检测节点。一个 Watch 事件是一个一次性的触发器,当被设置了 Watch 的数据和目录发生了改变的时候,则服务器将这个改变发送给设置了 Watch 的客户端以便通知他们。

#1.ls /path true			监听节点目录的变化
#2.get /path true			监听节点数据的变化

7.java操作ZK

7.1 创建项目,引入依赖

<!--引入zkclient依赖-->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

7.2 创建 zkClient

private ZkClient zkClient;

    @Before
    public void before(){
        /**
         * 参数1:zk server 服务器ip:port
         * 参数2:回话超时时间
         * 参数3:连接超时时间
         * 参数4:序列化方式 对象
         */
        zkClient = new ZkClient("47.106.158.72:3001,47.106.158.72:4001,47.106.158.72:5001", 60000 * 30, 60000, new SerializableSerializer());

    }

    @After
    public void after() {
        //释放资源
        zkClient.close();
    }

7.3 创建zk节点

//1.在zk中创建节点
@Test
public void testCreateNode() {
    //持久节点
    zkClient.create("/node1", "持久节点", CreateMode.PERSISTENT);
    //持久顺序节点
    zkClient.create("/node2", "持久顺序节点", CreateMode.PERSISTENT_SEQUENTIAL);
    //临时节点
    zkClient.create("/node3", "临时节点", CreateMode.EPHEMERAL);
    //临时顺序节点
    zkClient.create("/node4", "临时顺序节点", CreateMode.EPHEMERAL_SEQUENTIAL);
}

8.ZK的集群

8.1 集群(cluster)

# 1. 集群(cluster)
- 集合同一种软件服务的多个节点同事提供服务

# 2.集群解决问题
- 单节点的并发访问的压力问题
- 单节点故障问题(如硬件老化、自然灾害等)

8.2 集群架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BqCWMiP-1624185261921)(C:\Users\Wang Yuheng\AppData\Roaming\Typora\typora-user-images\image-20210620174329418.png)]

8.3集群搭建

#1.创建三个dataDir
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# mkdir zkdata1 zkdata2 zkdata3

#2.分别在三个dataDir目录下面创建myid文件,并写入数据
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# touch ./zkdata1/myid
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# touch ./zkdata2/myid
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# touch ./zkdata3/myid
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# echo "1" >> zkdata1/myid 
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# echo "2" >> zkdata2/myid 
[root@iZwz9bsqk9pa0dkrkl97x1Z mydata]# echo "3" >> zkdata3/myid 

myid的内容是服务器的  表示  1|2|3

#3.在/conf目录下创建三个zk配置文件,分别为 zoo1.cfg, zoo2.cfg, zoo3.cfg,
-  zoo1.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/mydata/zkdata1
    clientPort=3001
    server.1=47.106.158.72:3002:3003
    server.2=47.106.158.72:4002:4003
    server.3=47.106.158.72:5002:5003
    
-  zoo2.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/mydata/zkdata2
    clientPort=4001
    server.1=47.106.158.72:3002:3003
    server.2=47.106.158.72:4002:4003
    server.3=47.106.158.72:5002:5003
    
-  zoo2.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/mydata/zkdata3
    clientPort=5001
    server.1=47.106.158.72:3002:3003
    server.2=47.106.158.72:4002:4003
    server.3=47.106.158.72:5002:5003

#解释:
	1.serve.x			x为服务器的唯一标识
	2.47.106.158.72:	服务器所在的ip地址
	3.3002				数据同步使用的端口号
	4.3003				选举使用的端口号
	
	
#4.分别启动各个zk服务器
[root@iZ zookeeper]# ./bin/zkServer.sh start /opt/mydata/zkdata1/zoo1.cfg 
[root@iZ zookeeper]# ./bin/zkServer.sh start /opt/mydata/zkdata2/zoo2.cfg 
[root@iZ zookeeper]# ./bin/zkServer.sh start /opt/mydata/zkdata3/zoo3.cfg 

#5.查看各个zk服务器的角色信息
[root@iZ zookeeper]# ./bin/zkServer.sh status /opt/mydata/zkdata1/zoo1.cfg 
[root@iZ zookeeper]# ./bin/zkServer.sh status /opt/mydata/zkdata2/zoo2.cfg 
[root@iZ zookeeper]# ./bin/zkServer.sh status /opt/mydata/zkdata3/zoo3.cfg 

#6.客户端连接任意zk服务器进行节点操作
[root@iZ zookeeper]# ./bin/zkCli.sh -server 47.106.158.72:3001

#7.停止特定zk服务器
[root@iZ zookeeper]# ./bin/zkServer.sh stop /opt/mydata/zkdata1/zoo1.cfg 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值