其他分享
首页 > 其他分享> > 20201226 ZooKeeper - 拉勾教育

20201226 ZooKeeper - 拉勾教育

作者:互联网

环境信息

ZooKeeper 简介

分布式系统定义及面临的问题

ZooKeeper 如何解决分布式系统面临的问题

ZooKeeper 对分布式系统的协调,使用的是第二种方式,共享存储。即使使用共享存储,分布式应用也需要和存储进行网络通信。

img

注意:Slave 节点要想获取 ZooKeeper 的更新通知,需事先在关心的数据节点上设置观察点。

大多数分布式系统中出现的问题,都源于信息的共享出了问题。如果各个节点间信息不能及时共享和同步,那么就会在协作过程中产生各种问题。 ZooKeeper 解决协同问题的关键,就是在于保证分布式系统信息的一致性。

ZooKeeper 的基本概念

ZooKeeper 是一个开源的分布式协调服务,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些简单的接口提供给用户使用。 ZooKeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅 / 发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能

ZooKeeper 环境搭建

ZooKeeper 安装方式有三种,单机模式和集群模式以及伪集群模式。

单机模式搭建

  1. 官网下载安装文件

  2. 上传到服务器,解压

    cd /hwj/
    tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
    
  3. 创建 data 文件夹

    cd apache-zookeeper-3.6.2-bin/
    mkdir data
    
  4. 修改配置文件名称

    cd conf
    cp zoo_sample.cfg zoo.cfg
    
  5. 修改 zoo.cfg 中的 data 属性

    dataDir=/hwj/apache-zookeeper-3.6.2-bin/data
    
  6. 启动 ZooKeeper 服务

    #	zkServer.sh 用法
    ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
    #	常用命令
    ##	启动
    ./zkServer.sh start
    ##	停止
    ./zkServer.sh stop
    ##	重启
    ./zkServer.sh restart
    ##	查看状态
    ./zkServer.sh status
    
    #	客户端连接
    ./zkCli.sh
    

伪集群模式搭建

集群规划:

操作步骤:

  1. 解压并修改目录名称,将服务部署在 /hwj/zkCluster/zk01 目录

  2. 创建 data 和 logs 目录,在 data 目录下创建 myid 文件

    echo "1" > myid
    
  3. 修改配置文件

    clientPort=12181
    dataDir=/hwj/zkCluster/zk01/data
    dataLogDir=/hwj/zkCluster/zk01/data/logs
    
    #	server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口  
    server.1=192.168.181.130:12881:13881
    server.2=192.168.181.130:12882:13882
    server.3=192.168.181.130:12883:13883
    
  4. 创建便捷脚本 start.sh,统一启停集群

    #!/usr/bin/env bash
    echo "================ zk01 ================"
    /hwj/zkCluster/zk01/bin/zkServer.sh $1
    echo "================ zk02 ================"
    /hwj/zkCluster/zk02/bin/zkServer.sh $1
    echo "================ zk03 ================"
    /hwj/zkCluster/zk03/bin/zkServer.sh $1
    

ZooKeeper 基本使用

ZooKeeper 系统模型

ZooKeeper 数据模型 ZNode

在 ZooKeeper 中,数据信息被保存在一个个数据节点上,这些节点被称为 ZNode 。 ZNode 是 ZooKeeper 中最小数据单位,在 ZNode 下面又可以再挂 ZNode ,这样一层层下去就形成了一个层次化命名空间 ZNode 树,我们称为 ZNode Tree ,它采用了类似文件系统的层级树状结构进行管理。见下图示例:

img

ZNode 的类型

ZooKeeper 节点类型可以分为三大类:

在开发中在创建节点的时候通过组合可以生成以下四种节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点。不同类型的节点则会有不同的生命周期

事务 ID

ZNode 的状态信息

ls2 命令在新版本已被移除,使用 ls -s 替代

[zk: localhost:12181(CONNECTED) 2] ls -s /zookeeper
[config, quota]
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

整个 ZNode 节点内容包括两部分:节点数据内容和节点状态信息。其中 [config, quota] 是数据内容,其他的属于状态信息。

Watcher —— 数据变更通知

img

ACL —— 保障数据的安全

ZooKeeper 作为一个分布式协调框架,其内部存储了分布式系统运行时状态的元数据,这些元数据会直接影响基于 ZooKeeper 进行构造的分布式系统的运行状态,因此,如何保障系统中数据的安全,从而避免因误操作所带来的数据随意变更而导致的数据库异常十分重要,在 ZooKeeper 中,提供了一套完善的 ACL ( Access Control List )权限控制机制来保障数据的安全。

我们可以从三个方面来理解 ACL 机制: 权限模式( Scheme )授权对象( ID )权限( Permission ) ,通常使用 scheme:id:permission 来标识一个有效的 ACL 信息。

权限模式: Scheme
授权对象: ID

授权对象指的是权限赋予的用户或一个指定实体,例如 IP 地址或是机器等。在不同的权限模式下,授权对象是不同的,表中列出了各个权限模式和授权对象之间的对应关系。

权限模 式 授权对象
IP 通常是⼀个 IP 地址或 IP 段:例如:192.168.10.110 或 192.168.10.1/24
Digest 自定义,通常是 username:BASE64(SHA-1(username:password)) 例如:zm:sdfndsllndlksfn7c=
Digest 只有⼀个ID : anyone
Super 超级用户
权限

权限就是指那些通过权限检查后可以被允许执行的操作。在 ZooKeeper 中,所有对数据的操作权限分为以下五大类:

ZooKeeper 命令行操作

客户端操作:

ZooKeeper -server host:port -client-configuration properties-file cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close
        config [-c] [-w] [-s]
        connect host:port
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b] path
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        history
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        quit
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b val path
        stat [-w] path
        sync path
        version

参考资料

标签:ZNode,拉勾,ZooKeeper,20201226,path,权限,节点,客户端
来源: https://www.cnblogs.com/huangwenjie/p/14191606.html