我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Zookeeper详解(从安装—入门—使用)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Zookeeper详解(从安装—入门—使用)

🍋1.zookeeper概念

Zookeeper是 Apache Hadoop项目下的一个子项目,是一个树形目录服务。

Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、

Pig(小猪)的管理员,简称zk

Zookeeper是一个分布式的、开源的应用程序的协调服务。

zookeeper提供的主要功能包括:

  • 配置管理

在多个应用程序(或服务器)中,假如存在一些相同的配置信息,在对该配置信息进行修改时,我们需要一个一个进行修改,这样会大大增加维护的成本,不方便管理。这时如果使用一个专门放配置中心的组件,将相同的配置信息放在配置中心,需要的时候直接拉取,这样可以大大节约维护的成本, 而zookeeper即可实现配置中心的功能。

image-20220307195432635

  • 分布式锁:

在多个用户访问同一台主机上的应用程序数据时,我们可以通过加锁解决并发操作的问题,但是如果有多台主机相同的应用程序要访问同一数据时,这个时候我们在一台主机上加锁是不能解决另一台主机的并发问题的,换句话说自己的锁只对自己有效并不影响别的 ,这个时候就需要分布式锁解决这类问题,我个人理解分布式锁像是从所有主机中抽取出来的一把锁,或者是有一把总锁对所有主机都有效。zookeeper可以实现分布式锁的功能

image-20220307200342280

  • 集群管理:

image-20220307200440212

zookeeper作为注册中心,管理服务提供方的ip地址端口号url信息,并在服务消费方请求需要时发送给服务消费方

🍋2.zookeeper的安装

🍊2.1环境准备:

zookeeper服务器是用Java创建的,运行在JVM之上。需要安装JDK7以上版本(最好JDK8或以上)

🍊2.2下载

官网下载地址:

Apache ZooKeeper

🍊2.3上传并安装

下载在本地之后可以把安装包上传到服务器或者虚拟机中,我使用的是服务器并远程shell连接

1.使用xshell 远程连接服务器,在opt目录下新建一个zookeeper目录

在这里插入图片描述

2.使用xftp将刚才下载的安装包上传到zookeeper目录下

在这里插入图片描述

3.进入zookeeper目录下解压

tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz 

image-20220308112851104

4. 安装成功!

🍊2.4配置

进入conf配置目录

image-20220308113306625

zoo_sample.cfg就是配置文件,但是此文件不能生效,需要名称为zoo.cfg的文件才能生效

改名复制一份配置文件

image-20220308113519657

编辑配置文件zoo.cfg /tmp/zookeeper这个目录是zookeeper用于存储持久化的数据到本地的,但是服务器默认是没有的

image-20220311175938147

进入opt/zookeeper目录下,新建一个目录zkdata(目录名随意取)用于存放zookeeper的持久化数据

image-20220308113915311

复制此目录/opt/zookeeper/zkdata,将zoo.cfg配置文件中的dataDir修改为/opt/zookeeper/zkdata

保存退出!

🍊2.5启动zookeeper

image-20220308114501999
启动成功!

🍋3.zookeeper内存模型

🍊3.1模型

image-20220313212813160

🍊3.2模型的特点:

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

🍊3.3节点的分类:

1.持久节点(默认) 2.持久顺序节点 3.临时节点 4.临时顺序节点

1.create 节点path data

创建一个节点。并给节点绑定数据(默认是持久性节点)

2.create -s 节点path data

创建持久性顺序节点

3.create -e 节点path data

创建临时性节点

4.create -e -s 节点path data

创建临时顺序节点

(注意:临时节点不能含有任何子节点)

🍋4.zookeeper配置文件详解

image-20220312171808138

🍋5.zookeeper客户端常用命令

连接ZooKeeper服务端
./zkCli.sh -server ip:port 如果是本机连接可以不写 ip:port

断开连接 quit

CRUD

1.设置(修改)节点值

set 节点path value

2.查看命令帮助
help

3.删除单个节点

delete 节点path

4.显示指定目录下节点

ls 目录名

5.删除带有子节点的节点

deleteall 节点path

6.创建节点

create 节点path value

7.获取节点值

get 节点path

8.查看路径下节点信息及子节点
ls s 节点路径

9.查看节点状态
stat 节点path


节点监听机制watch

客户端可以监测znode节点的变化。Zonode节点的变化触发相应的事件,然后清除对该节点的监

测。当监测一个znode节点时候,Zookeeper会发送通知给监测节点。在shell终端一个Watch事件是一个一次性

的触发器,当被设置了Watch的数据或者目录发生了改变的时候,则服务器将这个改变发送给设置了

Watch的客户端以便通知它们。

1.ls -w 节点path 监听节点目录的变化

image-20220313200127758

🌰新建一个会话连接 对/app1的目录进行修改,增加一个子节点

image-20220313200234898

image-20220313200422360

然后监听就失效了,因为是一次性的

2.get -w 节点path 监听节点数据的变化

image-20220313200648786

🌰修改节点信息

image-20220313200745215

触发监听,并且之后监听就失效了

image-20220313200810275

🍋6.Java客户端操作

导入zookeeper的依赖包和junit的测试包

    junit    junit    4.12    provided    com.101tec    zkclient    0.10

🍊6.1连接zk server服务端

@Beforepublic void before() {    //参数1  --> zk server 服务ip地址:端口号    //参数2 -->  会话超时时间    //参数3  --> 连接超时时间    //参数4  --> 序列化方式     zkClient = new ZkClient("ip:端口号", 60000 * 30, 60000, new SerializableSerializer()); }    private ZkClient zkClient;   @Test    public void  test01(){        System.out.println(zkClient);    } @After public void after() {     zkClient.close(); }

image-20220312211704671

打印出结果,成功连接!

🍊6.2创建节点

 @Testpublic void test() {     //创建持久节点     zkClient.create("/app2", "xue", CreateMode.PERSISTENT);   //创建持久顺序节点     zkClient.create("/app3","yue", CreateMode.PERSISTENT_SEQUENTIAL);     //创建临时节点     zkClient.create("/app4","qing", CreateMode.EPHEMERAL);     //创建临时顺序节点     zkClient.create("/app5","haha",CreateMode.EPHEMERAL_SEQUENTIAL); }

🍊6.3查看某个节点信息

@Testpublic void test2(){    //查看某个节点数据,需要保证创建和获取的数据序列化方式相同,如果是在linux上创建的节点那么在Java上获取就会出现序列化不匹配的异常    Object o = zkClient.readData("/app2");    System.out.println(o);    //查看节点状态   Stat stat = new Stat();               System.out.println(o);    //查看节点创建时间        System.out.println(stat.getCtime());    //查看版本        System.out.println(stat.getCversion());    //查看id        System.out.println(stat.getCzxid());}

image-20220313160600580

🍊6.4修改节点信息

zkClient.writeData("/app2","xueyueqing");

🍊6.5查看当前节点所有子节点

@Testpublic  void test4(){    List children = zkClient.getChildren("/");    for(String c : children ){        System.out.println(c);    }}

🍊6.6监听

@Testpublic  void test5() throws IOException {  zkClient.subscribeDataChanges("/app1", new IZkDataListener() {      //当前节点数据变化时触发      @Override      public void handleDataChange(String dataPath, Object o) throws Exception {          System.out.println("当前节点路径"+dataPath);          System.out.println("当前节点信息"+o);      }      //当前节点删除时触发      @Override      public void handleDataDeleted(String dataPath) throws Exception {          System.out.println("当前节点路径"+dataPath);      }  });     //阻塞当前监听  System.in.read();}

注意:在shell终端修改,Java是监听不了的,必须使用Java代码修改

🌰通过Java代码进行修改

image-20220313204107545

监听成功!并发现Java代码进行监听是永久的,不是一次性的

   @Test   public  void test6() throws IOException {//监听节点目录变化       zkClient.subscribeChildChanges("/app1", new IZkChildListener() {           @Override           public void handleChildChange(String s, List list) throws Exception {               System.out.println("父节点名称:"+s);               System.out.println("发生变化后孩子节点名称:");           for(String child : list){               System.out.println(child);           }           }       });       //阻塞当前监听       System.in.read();   }

在/app1目录下创建节点name

image-20220313205439297

监听成功!

image-20220313205603347

来源地址:https://blog.csdn.net/qq_52595134/article/details/123467180

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Zookeeper详解(从安装—入门—使用)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Zookeeper详解(从安装—入门—使用)

Zookeeper详解(从安装—入门—简单使用) 🍋1.zookeeper概念🍋2.zookeeper的安装🍊2.1环境准备:🍊2.2下载🍊2.3上传并
2023-08-18

Centos7安装ElasticSearch 6.4.1入门教程详解

1.下载ElasticSearch 6.4.1安装包 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz 2.解压压缩包
2022-06-04

Android入门之Service的使用详解

我们的Android在启动一些长事务时都会使用异步,很多初学者觉得这个异步就是一个异步线程+Handler而己。如果你这么想就错了。这一切其实靠的正是Android里的Service。本文就来和大家聊聊Service的生命周期和使用,需要的可以参考一下
2022-12-08

『Linux从入门到精通』第 ⑪ 期 - Linux调试器——gdb使用详解

文章目录 💐专栏导读💐文章导读🌷准备工作🌷安装gdb调试器🌷如何进入调试?🌷调试相关指令 💐专栏导读 &#x
2023-08-18

Android SDK安装教程(超详细),从零基础入门到实战,从看这篇开始

前言 在使用appnium的时候,除了安装JDK之外,也需要安装Android SDK。那么,正确安装Android SDK是怎样的呢,跟着小编继续往下看。 安装Android SDK和环境配置 1.安装Android SDK
2023-08-16

CANOE入门系列---下载安装及各选项卡详解

CANOE入门系列 下载安装及各模块详解 CANOE入门系列前言一、CANoe的下载安装二、模块介绍1.CANoe主界面2.File界面3.HOME功能区4. Analysis功能区5.Simulation功能区(核心)6.Test
2023-08-17

详解使用nvm安装node.js

我最近在研究node.js的路上,那么今天也算个学习笔记吧!一、Windows系统 1、node.js下载应用程序,压缩,安装 http://www.lsjlt.com/softs/504128.html 2、nvm的安装路径下,找到set
2022-06-04

编程热搜

目录