zookeeper-简介

14次阅读

共计 1494 个字符,预计需要花费 4 分钟才能阅读完成。

一、zookeeper 是什么

Apache Zookeeper 是一个开源的分布式服务框架,为分布式应用提供协调服务,用来解决分布式应用中的数据管理问题,如配置管理、域名服务、分布式同步、集群管理
相关概念:
分布式 :将一个大型应用的不同业务部署在不同的服务器上,解决高并发的问题。
集群:将同一个业务部署在多台服务器上,提高系统的高可用性。

二、Zookeeper 组成

主要包含两部分:文件系统、通知机制

2.1 文件系统

ZooKeeper 维护一个类似 Linux 文件系统的数据结构,用于存储数据

  • 数据模型结构是一种树形结构,由许多节点组成
  • 每个节点叫做 ZNode(Zookeeper Node)
  • 每个节点对应一个唯一路径,通过该路径来标识节点,如果 /app1/p2
  • 每个节点只能存储大约 1M 的数据

    节点类型由四种:

  • 持久化目录节点 persistent
    客户端与服务器断开连接,该节点仍然存在
  • 持久化顺序编号目录节点 persistent_sequential
    客户端与服务器断开连接,该节点仍然存在,此时节点会被顺序编号,如:0000001,0000002
  • 临时目录节点 ephermeral
    客户端与服务器断开连接,该节点会被删除
  • 临时顺序编号目录节点 ephermeral_sequential
    客户端与服务器断开连接,该节点会被删除,此时节点会被顺序编号,如 0000001,000002

2.2 通知机制

ZooKeeper 是一个基于观察者模式设计的分布式服务管理框架

  1. ZooKeeper 负责管理和维护项目的公共数据,并接受观察者的注册(订阅)
  2. 一旦这些数据发生变化,ZooKeeper 就会通知已注册的观察者
  3. 此时观察者就可以做出相应的反应

简单来说,客户端注册监听它关心的目录节点,当目录节点发生变化时,ZooKeeper 会通知客户端

Zookeeper 是一个订阅中心(注册中心)

三、应用场景

3.1 配置管理

场景:集群环境、服务器的许多配置都是相同的,如数据库连接信息、当需要修改这些配置时必须同时修改每台服务器,很麻烦
解决:把这些配置全部放到 ZooKeeper 上,保存在 ZooKeeper 的某个目录节点中,然后所有的应用程序(客户端) 对这个目录节点进行监视 Watch, 一旦配置信息发生变化,Zookeeper 会通知每个客户端,然后从 ZooKeeper 获取新的配置信息,并应用到系统中

3.2 集群管理

场景:集群环境下,如何知道有多少台机器在工作?是否有机器退出或加入?需要选举一个总管 master, 让总管来管理集群。
解决:
在父目录 GroupMembers 下所有机器创建临时目录节点,然后监听父目录节点的子节点变化,一旦有机器挂掉,该机器与 ZooKeeper 的连接断开,其所创建的临时目录被删除,其他所创建的临时目录节点被删除,所有其他机器都会收到通知。当新机器加入时,会创建新的节点,同理。
选举 master: 为所有机器创建临时顺序编号目录节点,给每台机器编号,然后每次选取编号最小的机器作为 master.

3.3 负载均衡

ZooKeeper 本身是不提供负载均衡策略,准确的说,是在负载均衡中使用 ZooKeeper 来做集群的协调 (也称为软负载均衡)
实现思路:

  • 将 ZooKeeper 作为服务的注册中心,所有服务器在启动时向注册中心登录自己能够提供的服务
  • 服务的调用者到注册中心获取能够提供的所需要服务的服务器列表,然后自己根据负载均衡算法,从中选取一台服务器进行连接
  • 当服务器列表发生变化时,如:某台服务器宕机下线,或新机器加入,Zookeeper 会自动通知调用者重新获取服务。

实际上利用了 ZooKeeper 的特性,将 ZooKeeper 作为服务的注册和变更通知中心。

正文完
 0