Zookeeper 学习笔记

685 阅读2分钟

Zookeeper入门

学习资料来源:www.bilibili.com/video/BV1to…

特点

  • 1个leader,多个follower
  • 半数以上节点存活就能工作,一般奇数台服务器
  • 数据量小,同步时间快,在一定时间范围内能读到最新数据
  • 数据更新原子性
  • 更新请求顺序执行
  • 全局数据一致

数据结构

    类似文件系统的树形结构,每个节点为ZNode,默认大小1MB,不能存储大数据量,每个节点可用路径唯一标识。

应用场景

  • 统一命名服务 类似功能实现:Nginx
  • 统一集群管理
  • 统一配置管理
  • 服务器动态上下限
  • 软负载均衡

image.png

集群

选举机制-第一次启动

每个节点投自己一票,互相交换选票信息,如果对方myid比我大,那我就把选票投给它,直到某个节点收到半数以上的投票数,则当选为leader,其他looking节点更新为follower节点,不再进行投票。 sid:和myid一致 zxid:事务id epoch:任期id,leader不存在时为逻辑时钟

选举机制-非第一次启动

leader存在

和其他节点通信时被告知leader存在,放弃选举

leader挂了

重新发起选举,比较(epoch,zxid,sid),谁大谁当leader

群起脚本

#!/bin/bash
case $1 in
"satrt"){
    for i in hadoop102 hadoop103 hadoop104
    do
        echo -------$i启动--------
        ssh $i "启动命令"
    done
}
"stop"){
}
"status"){
}

节点类型

  • 永久节点
  • 临时节点(客户端断开连接就不存在)

监听原理

在main线程中创建客户端,这时会创建两个线程,一个connector线程用于与服务器通信,一个listener线程,connector线程将注册的监听时间发送给服务器,服务器将变化时间发送给listener线程,listener线程调用process方法进行处理。(注册一次,只能生效一次)

写数据原理

  • 写请求发送给follower image.png

案例

服务器动态上下线

image.png

分布式锁

image.png

缺点

  • 会话连接时异步的,得自己用countdownlatch控制
  • 代码复杂度高
  • watch需要重复注册
  • 成熟框架:curator

面试题

生产环境多少台zk合适

  • 10台服务器,3台zk
  • 20台服务器,5台zk
  • 100台服务器,11台zk
  • 200台服务器,11台zk zk太多,通信延迟更大

常用命令

ls, get, create, delete