• ZooKeeper基础


    ======================================
    ZooKeeper 背景
    ======================================
    ZooKeeper 是一个非常优秀的开源项目, 可以为软件系统提供非常重要的基础特性:
    1. 分布式锁. 使用场景有: 比如我们有一套系统, 为了保证HA, 在多台需要在多台服务器上部署, 该服务程序有一些定时任务需要执行, 我们需要确保同一个定时任务不会在多台机器上被同时执行. 分布式锁可以使用 redis/RDBMS实现, 但都不如 ZooKeeper 更适合.
    2. 比如要开发一套Master-Slave集群系统, Leader选举是必需的.
    3. 服务发现. 在服务发现场景中, 我更推荐 consul.

    ZooKeeper 数据结构
    zk 提供类似于文件系统命名空间(name space), 我们可以采用路径的方式创建节点, 在节点上可以保存业务数据(2MB字节), 节点除了保存业务数据外, ZooKeeper还保存着版本号/时间戳等信息.

    节点分为:
    永久节点: 创建后一直保存着, 除非被删除
    临时节点: 创建节点的会话存在, 节点就存在, 会话一旦结束, 节点就被删除.
    顺序节点: 创建节点的时候, 自动为节点增加一个序列号, 多个客户端创建同一个节点, 序列号自增.

    另外, zk 提供了监听机制, 组合这些不同类型的节点, zk就能提供分布式锁/Leader选举/分布式存储等功能. 


    ======================================
    Windows 单机安装
    ======================================
    1. 复制 conf/zoo_sample.cfg 为 conf/zoo.cfg
    zoo.cfg 默认的端口为 clientPort=2181
    2. 运行 zkServer.cmd 启动 server
    3. 运行 zkCli.cmd 客户端登陆
    zkCli.cmd #登陆本机 localhost:2181, 可以不带任何参数
    zkCli.cmd -server localhost:2181 #指定server和端口

    ======================================
    基本命令
    ======================================

    zk 提供很好用的命令行工具, 能自动补全节点名, 命令也不多. 

    help 命令, 显示zkCli命令行所支持的所有命令, 以及它们的使用语法. 

    ls some_path 命令, 显示指定路径下的节点

    create some_path some_data 命令:
    创建一个指定的节点, 并设定节点值.

    get some_path 命令
    显示指定节点的详细数据

    create -s some_parent/some_path some_data 命令
    创建一个 some_parent/some_path 序列节点, 该创建命令可以指定多次, 第一次创建的真实节点名为 some_parent/some_path0000000000, 第二次创建的节点名为 some_parent/some_path0000000001, 以此类推.

    create -s -e some_parent/some_path some_data 命令
    创建一个 some_parent/some_path 临时序列节点, 该创建命令可以指定多次, 第一次创建的真实节点名为 some_parent/some_path0000000000, 第二次创建的节点名为 some_parent/some_path0000000001, 以此类推. 但和普通的序列节点不同的是, 普通序列节点将一直存在, 直到被删除为止,临时序列节点只在会话期存在, 会话断开后就自动被删除.

    第一个客户端创建一次:

    第二个客户端再创建一次:

    检查节点情况:

    第一个客户端退出后, 再检查节点的情况, 只剩一个节点了

    delete some_path 命令
    删除节点

    set some_path data 命令
    重新设置节点数值

    监听器
    ls some_path watch
    get some_path watch
    ls 和 get 命令都可以加上 watch 关键词, 用来监听节点是否有变化, 一旦节点有变化, 会通知客户端.

    ======================
    参考
    ======================
    书籍: 李家智著 Spring Boot 2 精髓.
    可能是把 ZooKeeper 概念讲的最清楚的一篇文章 https://github.com/Snailclimb/JavaGuide/blob/master/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6/ZooKeeper.md

  • 相关阅读:
    Monkey脚本编写
    monkey基础知识(二)
    monkey基础知识(一)
    全蛋蛋糕做法
    超乎想象的酥脆香甜---杏仁薄饼
    uiautomator——第一个例子:打开浏览器,输入网址
    uiautomator环境搭建
    如何通过外部表做数据一致性检查和配平
    如何在Elasticsearch中删除中文索引
    Elasticsearch SQL特性研究
  • 原文地址:https://www.cnblogs.com/harrychinese/p/ZooKeeper.html
Copyright © 2020-2023  润新知