ZooKeeper概述

2019-06-18  本文已影响0人  拾柒丶_8257

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

Zookeeper架构图
image.png
ZooKeeper当中的主从与主备:
Zookeeper的特性
  1. 全局数据的一致:每个server保存一份相同的数据副本,client无论链接到哪个server,展示的数据都是一致的
    2.可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受
    3.顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有server上消息a豆浆在消息b前被发布,偏序是指如果以个消息b在消息a后被同一个发送者发布,a必须将排在b前面
    4.数据更新院子性:一次数据更新要么成功,要么失败,不存在中间状态
    5.实时性:ZooKeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息
三台机器ZooKeeper的集群环境搭建

ZooKeeper集群搭建指的是ZooKeeper集群分布式模式安装。通常由2n+1台server组成。这是因为为了保证Leader选举(基于Paxos算法的实现)能得到多数的支持 ,所以ZooKeeper集群的数量一般为奇数。ZooKeeper运行需要java环境,所以需要提前安装jdk
leader+follower模式的集群,大致过程如下

服务器IP                主机名        myid的值
192.168.131.131    node01      1
192.168.131.129    node02      2
192.168.131.130    node03      3
image.png
image.png
ZooKeeper的shell操作
ZooKeeper的数据模型

ZooKeeper的数据模型,在结构上和标准文件系统非常相似,拥有一个层次的命名空间,都是采用树形层次结构,ZooKeeper树种的每个节点被称为-Znode。和文件系统的目录树一样,ZooKeeper书中的每个节点都可以拥有子节点 但也有不同之处
1. Znode间距文件和目录两种特点 既像文件一样维护着数据 元信息 ACL 时间戳等数据结构 又像目录一样可以作为路径表示的一部分,并可以具有子 Znode。用户对Znode又增 、 删 、改 、 查 等操作,临时节点不能有子节点
2. Znode具有原子性操作,读操作将获取与节点相关的所有数据。写操作也将替换所有的数据。另外 每一个节点都拥有自己的ACL(访问控制列表)这个列表规定来了用户的权限。即限定来了特定用户对目标节点可以执行的操作
3. Znode 存储数据大小有限制,ZooKeeper虽然可以关联一些数据,但并没有 被设计为常规的数据库或者大数据存储,相反的是,它用来管理调度数据。比如分布式用用中的配置文件信息 状态信息 汇集位置等等 这些数据的共同特性就是他们都是很小的数据,通常以kb为大小单位。ZooKeeper 的服务器和客户端都被设计为严格检查并限制每个Znode的数据大小至多1M,常规使用中应该远小于此值
4.Znode通过路径引用,如同Unix中的文件路径 路径必须是绝对的,因此他们必须斜杠字符来开头
5.每个节点称为一个Znode,每个Znode有3部分组成
stat:此为状态新信息 描述Znode的版本 权限等信息
data:与改节点关联的数据
children:改Znode的下一个节点
6. 节点类型
节点类型分为 临时节点和永久节点
临时节点:该节点的生命周期依赖于创建他们的绘画,一旦绘画结束,临时节点将被自动删除,当然可以手动删除,临时节点不允许有自低点
永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,才会删除
Znode还有一个序列化的特性 如果创建的时候指定的话该Znode的名字后面会自动追加一个不断增加的序列号,序列号对于此节点的父节点来说是唯一的,这样会记录每个子节点创建的先后顺序

watch机制
一次性触发
时间发生触发监听 ,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的时间,不会再次触发
 事件封装
  ZooKeeper使用WatchedEvent对象来封装服务端事件并传递
WatchedEvent包含了每一个事件的三个基本属性:
  通知状态(keeperState),事件类型(EventType)和节点路径(path)
  event 异步发送
  watcher 的通知事件从服务端发送到客户端是异步的
  先注册再触发
  ZooKeeper中 的watch机制,必须客户端先去 服务端注册监听,这样事件发送才会触发监听,通知给客户端
上一篇 下一篇

猜你喜欢

热点阅读