zookeeper

作者: 晨曦_lcq | 来源:发表于2020-06-19 22:28 被阅读0次

作用

在分布式环境中保证数据的强一致性。

使用场景如

  • 分布式锁
    zk保证所有客户端只有一个客户端能够创建临时目录,最终创建成功的客户端就能获取锁,锁释放临时目录就删除了。

  • 命名服务
    客户端连接zk,创建顺序节点,每个节点创建个全局唯一的路径 ,这个路径就可以作为一个名字。客户端根据名字找到对应的提供者信息。

  • 配置管理
    分布式应用中有很多个节点,每个节点逐一增加配置很繁琐工作效率很低。把配置放到zookeeper上,所有应用对zookeeper监控,一旦配置信息发生改变,每个应用程序都会收到通知,然后从zookeeper钟获取最新的的配置。

  • 队列管理

  • 集群管理
    维护机器退出和加入、选举。
    1.退出:所有节点约定在父目录钟创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该节点与zookeeper断开,其所创建的目录节点也被删除,其他机器也收到通知,某个节点挂了。
    2.加入:有新的连接进来,会在目录中生成带顺序编号的目录节点,每次选取编号最小的机器作为master
    3.选举:集群分为三个角色,

    • leader 为客户端提供读写服务
    • follower
    • observer
  • 发布订阅

工作原理:zab协议

  • 恢复模式(选主):当服务启动或者领导者崩溃后,zab进入恢复模式
  • 广播模式(同步):当领导者被选举出来,且大多数server和leader状态同步完之后,恢复模式结束。leader将数据广播到各个follower

配置说明

配置项 说明
tickTime 2000 控制心跳和超时时间(毫秒)
initLimit 2 集群中的follower与leader中间初始连接时能容忍的最大心跳数(tickTime的倍数)
syncLimit 5 主从节点请求和应答的超时时间
dataDir /home/zk/data 用于存储zk产生的数据
clientPort 2181 zookeeper客户端端口
maxClientCnxn 0 最大客户端连接数量(??为何不-1,如果不允许连接??)
server.1 server.1=47.96.170.165:2181 ... 集群环境,节点名称以及端口

使用docker搭建集群环境

  • docker-zk-compose.yml
    version: '3.1'
    services:
    zoo1:
    image: zookeeper
    restart: always
    hostname: localhost
    ports:
    - 2181:2181
    environment:

服务ID,要保持唯一

        ZOO_MY_ID: 1

2888端口号是zookeeper服务之间通信的端口

3888端口是zookeeper与其他应用程序通信的端口

        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

zoo2:
    image: zookeeper
    restart: always
    hostname: localhost
    ports:
        - 2182:2181
    environment:
        ZOO_MY_ID: 2
        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

zoo3:
    image: zookeeper
    restart: always
    hostname: localhost
    ports:
        - 2183:2181
    environment:
        ZOO_MY_ID: 3
        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
  • 后台启动集群
    docker-compose -f docker-zk-compose.yml up -d
  • 进入集群
    docker exec -it docker-zookeeper-cluster_zoo1_1 /bin/bash
root@localhost:/apache-zookeeper-3.6.1-bin# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

相关文章

网友评论

      本文标题:zookeeper

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