本篇博客小菌为大家带来的是ZooKeeper的入门介绍。
        
        
        

        
        
        

ZooKeeper概述

        Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。

        ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
        
        

ZooKeeper 特性

  1. 全局数据一致
    集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征。

  2. 全局数据一致
    如果消息被其中一台服务器接受,那么将被所有的服务器接受。

  3. 顺序性
    包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

  4. 数据更新原子性:
    一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;

  5. 实时性:
    Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
            
            

ZooKeeper集群角色

在这里插入图片描述
Leader:
<1>.Zookeeper集群工作的核心
<2>.事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;
<3>.集群内部各个服务器的调度者
<4>.对于create,setData,delete等有写操作的请求,则需要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称为一个事务。

Follower:
<1>处理客户端非事务(读操作)请求,转发事务请求给Leader;
<2>参与集群Leader选举投票
        

此外,针对访问量比较大的zookeeper集群,还可新增观察者角色。

Observer:
        观察者角色,观察Zookeeper集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给Leader服务器进行处理。

        不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
        

ZooKeeper集群搭建

        Zookeeper集群搭建指的是ZooKeeper分布式模式安装。通常由2n+1台servers组成。这是因为为了保证Leader选举(基于Paxos算法的实现)能过得到多数的支持,所以ZooKeeper集群的数量一般为奇数。

        Zookeeper运行需要java环境,所以需要提前安装jdk。对于安装leader+follower模式的集群,大致过程如下:

  • 配置主机名称到IP地址映射配置
  • 修改ZooKeeper配置文件
  • 远程复制分发安装文件
  • 设置myid
  • 启动ZooKeeper集群

        如果要想使用Observer模式,可在对应节点的配置文件添加如下配置:

        peerType=observer

        其次,必须在配置文件指定哪些节点被指定为Observer,如:

        server.1:node-1:2181:3181:observer

详细的安装步骤见小菌的另一篇博客《zookeeper的安装详解》

ZooKeeper shell

1.客户端连接

        当我们配置好了ZooKeeper的环境变量后,直接在命令行输入zkCli.sh就可以进入到本地的客户端,若想进入到其他节点,可以使用命令zkCli.sh -server ip

在这里插入图片描述

2.shell基本操作

创建节点

语法:create [-s] [-e] path data acl
其中,-s或-e分别指定节点特性,顺序临时节点,若不指定,则表示持久节点;acl用来进行权限控制

创建顺序节点:
在这里插入图片描述

创建临时节点:
在这里插入图片描述

创建永久节点:
在这里插入图片描述
读取节点

        与读取相关的命令有ls 命令和get 命令,ls命令可以列出Zookeeper指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get命令可以获取Zookeeper指定节点的数据内容和属性信息。

语法:
ls path [watch]
get path [watch]
ls2 path [watch]

例:
在这里插入图片描述
更新节点

语法:set path data [version]

data就是要更新的新内容,version表示数据版本。

在这里插入图片描述
现在dataVersion已经变为1了,表示进行了更新。每更新一次数据,对应的dataVersion就会加一

删除节点
语法:delete path [version]

若删除节点存在子节点,那么无法删除该节点。必须先删除子节点,再删除父节点。

但我们可以通过Rme path 的方式递归删除节点。

quota
语法:
setquota -n|-b val path 对节点增加限制。
其中:

  • n:表示子节点的最大个数
  • b:表示数据值的最大长度
  • val:子节点最大个数或数据值的最大长度
  • path:节点路径

例:

先对一个指定的目录设置一个权限
在这里插入图片描述
通过命令listquota path 列出指定节点的quota
在这里插入图片描述
子节点个数为2,数据长度-1表示没限制

若我们想删除已经设置的权限
可以通过delquota [-n|-b] path 删除quota

其他命令

  • history : 列出命令历史
    在这里插入图片描述
  • redo:该命令可以重新执行指定命令编号的历史命令,命令编号可以通过history查看
            

        本篇博客就到这里了,下一篇博客小菌将为大家带来ZooKeeper的JavaAPI操作,敬请期待!!!

        受益了或对大数据感兴趣的小伙伴们记得关注小菌哟。(^U^)ノ~YO点赞加关注,小白不迷路!!!
        
        
        

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐