美文网首页
ZooKeeper with Docker

ZooKeeper with Docker

作者: freefishz2 | 来源:发表于2020-05-21 21:44 被阅读0次

    1. ZooKeeper 基础

    1.1 典型应用

    • 集中化配置管理
    • DNS服务,如微服务的注册发现
    • 组成员管理
    • 分布式锁

    ZooKeeper适用于存储和协同相关的关键数据,不适用于大数据量的存储。

    1.2 使用Zookeeper服务

    典型的C/S架构:

    ZooKeeper应用架构

    1.3 数据模型

    ZooKeeper的数据模型是 层次模型,称之为 Data tree,类似于文件系统的树形结构。

    • 每个结点(znode)都可以保存数据
    • 每个节点都有版本version,版本从开始计数
    • znode支持全量的写入和读取
    • znode分类:
      • 持久性 - 客户端不主动删除,不会消失
      • 临时性 - 客户端没在规定时间内给ZooKeeper发消息,就会被自动清除
      • 顺序性 - znode名字后缀是一个单调递增整数,可和上述两者组合使用
    ZooKeeper数据模型

    2. ZooKeeper in Docker

    参考:https://hub.docker.com/_/zookeeper

    standalone模式:

    # Start a Zookeeper server instance
    docker run --name some-zookeeper --restart always -d zookeeper
    
    # Connect to Zookeeper from the Zookeeper command line client
    docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
    

    replicated模式(docker-compose):

    version: "3.3"
    
    services:
        zoo1:
            image: zookeeper:3.5
            restart: always
            hostname: zoo1
            ports:
              - 2181:2181
              - 28080:8080
            environment:
              ZOO_MY_ID: 1
              ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
            volumes:
                - ./zookeeper/data/z1/data:/data
                - ./zookeeper/data/z1/datalog:/datalog  
        
        zoo2:
            image: zookeeper:3.5
            restart: always
            hostname: zoo2
            ports:
                - 2182:2181
            environment:
                ZOO_MY_ID: 2
                ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
            volumes:
                - ./zookeeper/data/z2/data:/data
                - ./zookeeper/data/z2/datalog:/datalog      
        
        zoo3:
            image: zookeeper:3.5
            restart: always
            hostname: zoo3
            ports:
              - 2183:2181
            environment:
              ZOO_MY_ID: 3
              ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
            volumes:
                - ./zookeeper/data/z3/data:/data
                - ./zookeeper/data/z3/datalog:/datalog    
    

    常用配置项:

    • ZOO_TICK_TIME - 服务器之间的心跳时间间隔,默认2000
    • ZOO_INIT_LIMIT - 允许follower在多少个tickTime内连接到leader,默认5
    • ZOO_SYNC_LIMIT - Leader 与 Follower 之间发送消息,请求和应答时间长度限制,默认2
    • ZOO_MY_ID - 服务器标识,1~255之间
    • ZOO_SERVERS - server.id=<address1>:<port1>:<port2>[:role];[<client port address>:]<client port>
    • 客户端接口,默认为2181
    • 管理端接口,默认为8080http://localhost:8080/commands/stat.

    3. 客户端常用命令 - 支持TAB补齐

    3.1 创建节点 - 默认创建持久节点

    # 持久节点语法
    create /path data
    # 示例
    create /FirstZnode “Myfirstzookeeper-app”
    create /FirstZonde/c1 "test"
    
    # 临时节点语法
    create -e /path data
    #示例
    create -e /SecondZnode “Ephemeral-data”
    

    3.2 获取数据

    # 语法
    get /path
    # 示例
    get /FirstZnode
    

    3.3 监控数据变化

    # 语法
    get -w /path
    # 示例
    get -w /FirstZnode
    

    3.4 设置数据

    # 语法
    set /path data
    # 示例
    set /SecondZnode Data-updated
    

    3.5 查看目录

    # 语法
    ls /path
    # 示例
    ls /
    ls -R / #列出所有目录
    ls /FirstZnode
    

    3.6 查看节点状态

    # 语法
    stat /path
    # 示例
    stat /FirstZnode
    

    3.7 删除节点

    # 语法
    rmr /path
    # 示例
    rmr /FirstZnode
    

    4. 管理端四个字母的指令

    如果配置了web管理端口(默认8080端口),则可以通过浏览器和四字命令来查看服务器状态。

    在浏览器里打开:http://localhost:8080/commands/cons,结果如下:

    管理端预览

    常用四字指令:

    • conf - 配置信息
    • cons - 所有客户端连接信息
    • crst - 重置所有客户端连接的统计信息
    • ruok - 测试服务器是否正常工作
    • envi - 服务器环境详情
    • stat - 服务器和连接的信息
    • wchs - 监视器信息
    • mntr - 集群健康信息

    相关文章

      网友评论

          本文标题:ZooKeeper with Docker

          本文链接:https://www.haomeiwen.com/subject/uwlxahtx.html