1. Zookeeper集群介绍

1.1 架构图

Zookeeper 是一个分布式协调服务的开源框架。 主要用来解决分布式集群中
应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题。
ZooKeeper 本质上是一个分布式的小文件存储系统。 提供基于类似于文件系
统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维
护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达
到基于数据的集群管理。 诸如: 统一命名服务(dubbo)、分布式配置管理(solr的配置集中管理)、分布式消息队列(sub/pub)、分布式锁、分布式协调等功能。
Zookeeper漫谈、Zookeeper功能、Zookeeper特性、Zookeeper数据结构、Zookeeper节点 03

  • 主从+准备
    • 主节点 负责处理事务&非事务请求, 用户就算增删改请求发送到从节点上,也要把请求转发到主节点,主节点执行后,会把数据同步给其他从节点
    • 从节点 负责处理非事务请求,用户就算把读请求发送到主节点上, 主节点也会把请求转发到从节点上去(空闲着的), 从节点将数据读取出来发送给客户端
    • 观察者, 增大并发请求, 不参与投票,也就是增加机器是为了增加并发而不是高可用
  • Leader:
    Zookeeper 集群工作的核心
    事务请求(写操作) 的唯一调度和处理者,保证集群事务处理的顺序性;
    集群内部各个服务器的调度者。
    对于 create, setData, delete 等有写操作的请求,则需要统一转发给leader 处理, leader 需要决定编号、执行操作,这个过程称为一个事务。
  • Follower:
    处理客户端非事务(读操作) 请求,
    转发事务请求给 Leader;
    参与集群 Leader 选举投票 2n-1台可以做集群投票。
    此外,针对访问量比较大的 zookeeper 集群, 还可新增观察者角色。
  • Observer:
    观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过
    来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader
    服务器进行处理。
    不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务
    处理能力的前提下提升集群的非事务处理能力。
    扯淡:说白了就是增加并发的读请求

1.2 Zookeeper的功能

可以理解为交通路况的红绿灯, 负责协调指挥, 功能:

  • 统一命名服务 dubbo
  • 分布式配置管理 solr cloud
  • 分布式的消息队列 pub/sub 类似于activeMQ
  • 分布式锁
  • 分布式协调
    pdsh,Puppet也可以管理集群

1.3 zookeeper特性

Zookeeper漫谈、Zookeeper功能、Zookeeper特性、Zookeeper数据结构、Zookeeper节点 03

  • 全局数据一致性:所有的机器看到的数据都是一样的
  • 可靠性:如果消息被一台服务器接收,那么终将被所有的服务器接收
  • 顺序性:如果A消息在B消息之前发布,那么所有的机器都是先处理A消息,再处理B消息
  • 数据更新的原子性:我们所有的操作都是事务性的操作,要么全部成功,要么全部失败,没有中间状态
  • 实时性:消息最终会被同步到所有的机器上面去

1.4 数据结构之二叉树, 每一个节点叫做znode

Zookeeper漫谈、Zookeeper功能、Zookeeper特性、Zookeeper数据结构、Zookeeper节点 03

  • zookeeper节点
    • 有一个同意的根路径 /
    • 两个类 四小类
      • persistent 服务器关闭,永久节点才会xiao
        • persistent normal 创建时不可以重名
        • persistent sequential创建时可以重名, 有序的,向上的
      • ephemeral 临时节点只有客户端已关闭, 就会消失
        • ephemeral normal
        • ephemeral sequential
    • 创建序列化节点可以重名, 非序列化节点不可以重名,命令窗口create节点写数据无法写入空格
      • cretae [-e] [-s] /aaa hello
      • ls /hello
      • ls2 /hello
      • get /hello
      • set /hello world
      • rmr /hello
    • 节点兼具文件和文件夹的特性最多1M
    • 只有永久节点才可以创建子节点,临时节点无法创建子节点
    • 临时节点+watch监听器
      • get /zhangsan 再开一个窗口连接客户端就修改数据 第一个窗口就能监听到了 NodeDataChange
      • ls /zhangsan 窗口2给/zhangsan节点下面新增一个节点 窗口1 NodeChildChange
    • 特点
      • 一次有效
      • 异步
      • 先注册有触发
  • javaAPI 节点操作套路
    • 获取连接
    • 执行
      • create(), set(), get(), delete()
    • 关闭连接(注意,临时节点&监听器关闭连接就会失效)
    • 监听器,有一个treeCacheEvent
      • treeCacheEvent.getType() type 是事件
        • NODE_ADDED
        • NODE_REMOVED
        • NODE_UPDATED
        • NODE_INITALIZED
      • treeCacheEvent.getData() data 是datanode上面的数据

1.5 Zookeeper监听机制架构图

Zookeeper漫谈、Zookeeper功能、Zookeeper特性、Zookeeper数据结构、Zookeeper节点 03

相关文章: