【Zookeeper】2.ZooKeeper的几个重要概念

上次我们了解了Zookeeper的概述,这次带大家了解一下Zookeeper的基本概念。

Zookeeper的基本概念分为以下几个:
集群角色、会话、数据节点、版本、watcher、ACL权限控制。

1.集群角色
在Zookeeper搭建的集群环境中,集群的角色分为Leader、Follower、Observer。

其中Leader服务器是整个Zookeeper集群工作机制中的核心,Follower服务器是Zookeeper集群状态的跟随者,Observer服务器充当一个观察者的角色。

我们这里了解以上几个角色即可,在后面的总结中,我们将深入探讨这些角色在实际中的运用。

2.会话
会话是指客户端和Zookeeper服务器的连接,Zookeeper中的会话叫Session,客户端与服务器建立一个TCP的长连接来维持一个Session,客户端在启动的时候会首先与服务器建立一个TCP连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向ZK服务器发送请求并获得响应。

3.数据节点
Zookeeper中的节点有两类
(1)集群中的一台机器成为一个节点
(2)数据模型中的数据单元Znode,分为持久节点和临时节点
Zookeeper的数据模型是一棵树,树的节点就是Znode,Znode可以保存信息。
一棵树的模型样例如下图:

上面的图是一棵树,有一个根节点,和下面的子节点。每一个子节点下又可以接一些子节点。后续我们会讲到,大多数Zookeeper的开发都是跟这些数据节点打交道,读写这些节点来和数据交互。

4.版本
我们在开发时通常会使用SVN来作为代码的管理,当代码出现错误时,我们可以回退到之前的某一个版本。

Zookeeper中的版本的含义与SVN中版本的含义有些区别,它的版本是用来记录节点数据或者是节点的子节点列表,或者是权限信息的修改次数(例如一个节点的version是1,这就代表这个节点在创建以来只被修改了一次)。

那么Zookeeper的版本如何使用呢?我们可以利用Zookeeper的版本实现锁服务。
我们知道,在数据库中有两种锁,分为悲观锁和乐观锁:
悲观锁又叫悲观并发锁,是数据库中一种非常严格的锁策略,具有强烈的排他性,能够避免不同事务对同一数据并发更新造成的数据不一致性,再上一个事务没有完成之前,下一个事务不能访问相同的资源,适合数据更新竞争非常激烈的场景。
悲观锁的实现一般都是使用一个statue字段(如1可用2不可用),当修改数据时,将statue取出,并设置成不可用(statue=2),然后执行需改语句,待完成之后,将statue更改回1,然后提交事务,就会避免其它操作修改本字段。

相比悲观锁,乐观锁使用的场景会更多,悲观锁认为事务访问相同数据的时候一定会出现相互的干扰,所以简单粗暴的使用排他访问的方式,而乐观锁认为不同事务访问相同资源很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制。当然乐观锁也是锁,它还是会有并发的控制,对于数据库我们通常的做法是在每个表中增加一个version版本字段,当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。事务修改数据之前先读出数据,当然版本号也顺势读出来,然后把读出来的版本号加入到更新语句的条件中。比如,读取出来的版本号是1,我们修改数据可的语句可以这样写:
update user_table set username = ‘张三‘ where id=1 and version = 1;
那如果更新失败了说明以后其它事务已经修改过数据了,那系统需要抛出异常给客户端,让客户自行处理,客户可以选择重试。

Zookeeper版本的作用与上面数据库的悲观和乐观锁有相似的用法,后续的使用过程中我们详细进行介绍。

Zookeeper的版本有以下几种:

5.watcher
watcher即事件监听器,Zookeeper允许用户在指定节点上注册一些watcher,当数据节点发生变化的时候,Zookeeper服务器会把这个变化的通知发送给感兴趣的客户端。

一个事件监听的大致情况如下:

上面是Zookeeper集群,下面两个客户端Client都在Zookeeper中注册了watcher(事件监听器),当Zookeeper中的节点数据发生变化时,会将变化的通知发送给客户端,客户端收到变化通知时,就会去Zookeeper中取得该数据的相关信息。

6.ACL权限控制
ACL是Access Control Lists的简写,Zookeeper采用ACL策略来进行权限控制,有以下权限:
CREATE:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限

可以看到,Zookeeper的权限控制类似我们开发的信息管理系统的权限控制,我们在开发系统的时候也会对这些权限进行管理。一般ZK集群可能会服务与很多的业务,尤其是一些大公司,ZK集群中会保存许多重要的信息,那么这些信息通常只能对一部分的访问者进行开放,通过ACL我们可以对某些节点的访问权限进行控制,从而保重数据的安全性。

时间: 2024-10-14 11:16:40

【Zookeeper】2.ZooKeeper的几个重要概念的相关文章

Zookeeper - 什么是Zookeeper,以及zookeeper的安装(1)

Zookeeper 什么是Zookeeper? 官网传送门 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 从设计模式来说基于观察者模式设计的分布式服务管理框架,存储大家都关心的数据,然后接受观察者的注册.一旦这些数据状态发生变化,zookeeper就将负责通知已经注册的观察者做出反应. Zoo

zookeeper 学习 zookeeper下载部署

下载 http://mirror.bit.edu.cn/apache/zookeeper/ 校验 解压后得到zookeeper-3.4.10.jar,使用md5sum zookeeper-3.4.10.jar 得到 450dbad05d829607bc45b9ccad789890  zookeeper-3.4.10.jar 与zookeeper-3.4.10.jar.md5中的内容比较 伪集群部署 以server0为例 [email protected]:~/server0/zookeeper/

ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts

ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts ERROR [main] master.HMasterCommandLine: Master exiting java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster more…

什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是Zookeeper  ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) . 小猪(Pig)  的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等项目中都采用到了 Zookeeper.ZooKeeper是一个分

【Zookeeper】zookeeper简单介绍和适用场景

什么是zookeeper ZooKeeper是用于维护配置信息,命名,提供分布式同步以及提供组服务的集中式服务. zookeeper数据结构 zookeeper数据结构简单的可以看成树状结构.每个节点最大只能存储1M的数据. zookeeper特点 主从:集群中一个领导者,多个跟随者 半数机制:集群中半数以上存活,才能正常工作 数据一致性:集群中无弄领导者还是跟随者数据都是一样的. 顺序性:来自同一个client的更新请求按照其发送顺序依次执行. 数据更新原子性:更新成功或失败.没有部分结果.

zookeeper[2] zookeeper原理(转)

转自:http://cailin.iteye.com/blog/2014486 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其发展历程无需赘述.在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的.可扩展的.分布式的.可配置的协调机制来统一系统的状态.Zookeeper的目的就在于此

Zookeeper之Zookeeper的Client的分析

1)几个重要概念 ZooKeeper:客户端入口 Watcher:客户端注册的callback ZooKeeper.SendThread: IO线程 ZooKeeper.EventThread: 事件处理线程,处理各类消息callback ClientCnxnSocketNIO:继承自ClientCnxnSocket,专门处理IO 2)zookeeper初始化 应用提供watch实例 实例化zookeeper 实例化socket,默认使用ClientCnxnSocketNIO,可通过zookee

【Zookeeper】Zookeeper集群单节点提供服务

以下只在特殊情况下使用,不要用在生产环境. 一.问题背景 公司的产品使用Zookeeper做为集群支持,但是客户在验收的时候提出了一个很为难人的要求,那就是3台集群服务,停止2台以后,还要求我们的应用能提供服务,这就有点难为人了. 因为用过Zookeeper的人都知道,Zookeeper的leader的选举需要大多数同意,也就是说三台机器的Zookeeper集群那么选举leader就需要两台,如果只剩下一台Zookeeper那么是无法完成leader选举的,也就是说Zookeeper将不能对外提

【zookeeper】 zookeeper 集群搭建

集群搭建环境: 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 集群搭建步骤: 1. 确保机器安装了jdk [[email protected] ~]# java -version openjdk version "1.8.0_51" OpenJDK Runtime Environment (build 1.8.0_51-b16) OpenJDK 64-Bit Server VM (build

zookeeper[6] zookeeper FAQ(转)

转自:http://www.cnblogs.com/zhengran/p/4601855.html 1. 如何处理CONNECTION_LOSS?在Zookeeper中,服务器和客户端之间维持一个长连接,CONNECTION_LOSS意味着这个连接断开了.客户端API返回CONNECTION_LOSS时,不能确定请求是成功还是失败(视连接断开发生在请求发送之前还是之后,遗憾的是无法区分这两种情况),应用需要自己的逻辑来确认操作是否成功. 连接断开可能是由于网络抖动,或者是连接的那台服务器死机等原