上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Zookeeper(持续更新)

guduadmin14小时前

VIP-01 Zookeeper特性与节点数据类型详解


文章目录

  • VIP-01 Zookeeper特性与节点数据类型详解
  • 正文
    • 1. 什么是Zookeeper?
    • 2. Zookeeper 核心概念
      • 2.1、 文件系统数据结构
      • 2.2、监听通知机制
      • 2.3、Zookeeper 经典的应用场景
      • 3.2. 使用命令行操作zookeeper

        正文

        1. 什么是Zookeeper
        2. Zookeeper核心概念
        3. Zookeeper实操
        4. Zookeeper ACLs权限控制
        5. ZooKeeper 内存数据和持久化

          在了解Zookeeper之前,需要对分布式相关知识有一定了解,什么是分布式系统呢?通常情况

          下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来

          共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过

          信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中

          有广泛的应用场景。

        1. 什么是Zookeeper?

        官方文档上这么解释zookeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项

        目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同

        步服务、集群管理、分布式应用配置项的管理等。

        Zookeeper(持续更新),在这里插入图片描述,第1张

        2. Zookeeper 核心概念

        上面的解释有点抽象,同学们暂时可以理解为 Zookeeper 是一个用于存储少量数据的基于内存

        的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制。

        2.1、 文件系统数据结构

        Zookeeper维护一个类似文件系统的数据结构:

        Zookeeper(持续更新),在这里插入图片描述,第2张

        每个子目录项都被称作为 znode(目录节点),和文件系统类似,我们能够自由的增加、删除

        znode,在一个znode下增加、删除子znode。

        有四种类型的znode:

        1、PERSISTENT­持久化目录节点

        客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在

        2、 PERSISTENT_SEQUENTIAL­持久化顺序编号目录节点

        客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

        3、EPHEMERAL­临时目录节点

        客户端与zookeeper断开连接后,该节点被删除

        4、EPHEMERAL_SEQUENTIAL­临时顺序编号目录节点

        客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

        5. Container 节点(3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点

        在未来会被Zookeeper自动清除,定时任务默认60s 检查一次)

        6. TTL 节点( 默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳

        定)

        Zookeeper(持续更新),在这里插入图片描述,第3张

        2.2、监听通知机制

        客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点

        1. 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通

        2. 如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应

          的客户端将被通知

        3. 如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构

          的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。

          注意:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监

          听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触

          发一次。

        2.3、Zookeeper 经典的应用场景

        1. 分布式配置中心
        2. 分布式注册中心
        3. 分布式锁
        4. 分布式队列
        5. 集群选举
        6. 分布式屏障
        7. 发布/订阅
        8. Zookeeper 实战

          3.1. zookeeper安装

          Step1:配置JAVA环境,检验环境:

        1 java ‐version
        

        Step2: 下载解压 zookeeper

        1 wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper‐3.5.8/apache‐zookeepe
        r‐3.5.8‐bin.tar.gz
        2 tar ‐zxvf apache‐zookeeper‐3.5.8‐bin.tar.gz
        3 cd apache‐zookeeper‐3.5.8‐bin
        

        Step3: 重命名配置文件 zoo_sample.cfg

        1 cp zoo_sample.cfg zoo.cfg
        

        Step4: 启动zookeeper

        1 # 可以通过 bin/zkServer.sh 来查看都支持哪些参数
        2 bin/zkServer.sh start conf/zoo.cfg
        

        Step5: 检测是否启动成功

        1 echo stat | nc 192.168.109.200 // 前提是配置文件中中讲 stat 四字命令设置了了白名单
        2 如:
        3 4lw.commands.whitelist=stat
        

        Step6: 连接服务器

        1 bin/zkCli.sh ‐server ip:port
        

        3.2. 使用命令行操作zookeeper

        输入命令 help 查看zookeeper所支持的所有命令:

        1 [zk: localhost:2181(CONNECTED) 80] help
        2 ZooKeeper ‐server host:port cmd args
        3 addauth scheme auth
        4 close
        5 config [‐c] [‐w] [‐s]
        6 connect host:port
        7 create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]
        8 delete [‐v version] path
        9 deleteall path
        10 delquota [‐n|‐b] path
        11 get [‐s] [‐w] path
        12 getAcl [‐s] path
        13 history
        14 listquota path
        15 ls [‐s] [‐w] [‐R] path
        16 ls2 path [watch]
        17 printwatches on|off
        18 quit
        19 reconfig [‐s] [‐v version] [[‐file path] | [‐members serverID=host:port1:port
        2;port3[,...]*]] | [‐add serverId=host:port1:port2;port3[,...]]* [‐remove serverI
        d[,...]*]
        20 redo cmdno
        21 removewatches path [‐c|‐d|‐a] [‐l]
        22 rmr path
        23 set [‐s] [‐v version] path data
        24 setAcl [‐s] [‐v version] [‐R] path acl
        25 setquota ‐n|‐b val path
        26 stat [‐w] path
        27 sync path
        
        1. 创建zookeeper 节点命令
        1 create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl]
        2
        

        中括号为可选项,没有则默认创建持久化节点

        -s: 顺序节点

        -e: 临时节点

        -c: 容器节点

        -t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用

        (-Dzookeeper.extendedTypesEnabled=true, znode.container.checkIntervalMs : (Java system

        property only) New in 3.5.1: The time interval in milliseconds for each check of candidate

        container and ttl nodes. Default is “60000”.)

        创建节点:

        1 create /test‐node some‐data
        

        如上,没有加任何可选参数,创建的就是持久化节点

        Zookeeper(持续更新),在这里插入图片描述,第4张

        查看节点:

        1 get /test‐node
        

        Zookeeper(持续更新),在这里插入图片描述,第5张

        修改节点数据:

        1 set /test‐node some‐data‐changed
        

        Zookeeper(持续更新),在这里插入图片描述,第6张

        查看节点状态信息:

        1 stat /test‐node
        

        Zookeeper(持续更新),在这里插入图片描述,第7张

        Stat

        cZxid:创建znode的事务ID(Zxid的值)。

        mZxid:最后修改znode的事务ID。

        pZxid:最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变)。

        ctime:znode创建时间。

        mtime:znode最近修改时间。

        dataVersion:znode的当前数据版本。

        cversion:znode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个

        版本)。

        aclVersion:表示对此znode的acl版本。

        ephemeralOwner:znode是临时znode时,表示znode所有者的 session ID。 如果

        znode不是临时znode,则该字段设置为零。

        dataLength:znode数据字段的长度。

        numChildren:znode的子znode的数量。

        查看节点状态信息同时查看数据

        Zookeeper(持续更新),在这里插入图片描述,第8张

        根据状态数据中的版本号有并发修改数据实现乐观锁的功能

        比如: 客户端首先获取版本信息, get -s /node-test

        Zookeeper(持续更新),在这里插入图片描述,第9张

        /test-node 当前的数据版本是 1 , 这时客户端 用 set 命令修改数据的时候可以把版本号带上

        Zookeeper(持续更新),在这里插入图片描述,第10张

        如果在执行上面 set命令前, 有人修改了数据,zookeeper 会递增版本号, 这个时候,如果再用

        以前的版本号去修改,将会导致修改失败,报如下错误

        Zookeeper(持续更新),在这里插入图片描述,第11张

        创建子节点, 这里要注意,zookeeper是以节点组织数据的,没有相对路径这么一说,所以,所

        有的节点一定是以 / 开头

        1 create /test‐node/test‐sub‐node
        

        Zookeeper(持续更新),在这里插入图片描述,第12张

        查看子节点信息,比如根节点下面的所有子节点, 加一个大写 R 可以查看递归子节点列表

        1 ls /
        

        Zookeeper(持续更新),在这里插入图片描述,第13张

        Zookeeper(持续更新),在这里插入图片描述,第14张

        Zookeeper(持续更新),在这里插入图片描述,第15张

        Zookeeper(持续更新),在这里插入图片描述,第16张Zookeeper(持续更新),在这里插入图片描述,第17张

        Zookeeper(持续更新),在这里插入图片描述,第18张

        Zookeeper(持续更新),在这里插入图片描述,第19张

        Zookeeper(持续更新),在这里插入图片描述,第20张

        Zookeeper(持续更新),在这里插入图片描述,第21张

        Zookeeper(持续更新),在这里插入图片描述,第22张

        Zookeeper(持续更新),在这里插入图片描述,第23张

        明天说Zookeeper 的 ACL 权限控制!!

网友评论

搜索
最新文章
热门文章
热门标签