当前位置:   article > 正文

ZooKeeper的使用

ZooKeeper的使用

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code and KPI, Keep progress,make a better result.
Survive during the day and develop at night。

目录

概 述

(1) 从数据大小来看:我们知道ZooKeeper的数据存储在一个叫ReplicatedDataBase 的 数据库中,该数据是一个内存数据库,既然是在内存当中,我就应该知道该数据量就应该不会太大,这一点上就与hadoop的HDFS有了很大的区 别,HDFS的数据主要存储在磁盘上,因此数据存储主要是HDFS的事,而ZooKeeper主要是协调功能,并不是用来存储数据的。
(2) 从数据类型来看:正如前面所说的,ZooKeeper的数据在内存中,由于内存空间的限制,那么我们就不能在上面随心所欲的存储数据,所以ZooKeeper存储的数据都是我们所关心的数据而且数据量还不能太大,而且还会根据我们要以实现的功能来选择相应的数据。简单来说,干什么事存什么数据,ZooKeeper所实现的一切功能,都是由ZK节点的性质和该节点所关联的数据实现的,至于关联什么数据那就要看你干什么事了。
例如:
  ① 集群管理:利用临时节点特性,节点关联的是机器的主机名、IP地址等相关信息,集群单点故障也属于该范畴。
  ② 统一命名:主要利用节点的唯一性和目录节点树结构。
  ③ 配置管理:节点关联的是配置信息。
  ④ 分布式锁:节点关联的是要竞争的资源。
二、ZooKeeper应用场景
ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是 基于这样的特性,使得zookeeper能够应用于很多场景。需要注意的是,ZK并不是生来就为这些场景设计,都是后来众多开发者根据框架的特性,摸索出 来的典型使用方法。因此,我们也可以根据自己的需要来设计相应的场景实现。正如前文所提到的,ZooKeeper 实现的任何功能都离不开ZooKeeper的数据结构,任何功能的实现都是利用"Znode结构特性+节点关联的数据"来实现的,好吧那么我们就看一下ZooKeeper数据结构有哪些特性。ZooKeeper数据结构如下图所示:
图2.1 ZooKeeper数据结构
在这里插入图片描述

Zookeeper 这种数据结构有如下这些特点:
① 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1;
② znode 可以有子节点目录,并且每个 znode 可以存储数据,注意EPHEMERAL 类型的目录节点不能有子节点目录;
③ znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据;
③ znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据;
⑤ znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2;
⑥ znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的。

(3)应用举例:
① 索引信息和集群中机器节点状态存放在ZK的一些指定节点,供各个客户端订阅使用。
② 系统日志(经过处理后的)存储,这些日志通常2-3天后被清除。
③ 应用中用到的一些配置信息集中管理,在应用启动的时候主动来获取一次,并且在节点上注册一个Watcher,以后每次配置有更新,实时通知到应用,获取最新配置信息。
④ 业务逻辑中需要用到的一些全局变量,比如一些消息中间件的消息队列通常有个offset,这个offset存放在zk上,这样集群中每个发送者都能知道当前的发送进度。
⑤ 系统中有些信息需要动态获取,并且还会存在人工手动去修改这个信息。以前通常是暴露出接口,例如JMX接口,有了ZK后,只要将这些信息存放到ZK节点上即可。

(3) 应用举例
例如:同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。ZooKeeper配置管理服务如下图所示:
Zookeeper很容易实现这种集中式的配置管理,比如将所需要的配置信息放到/Configuration 节点上,集群中所有机器一启动就会通过Client对/Configuration这个节点进行监控【zk.exist("/Configuration″,true)】,并且实现Watcher回调方法process(),那么在zookeeper上/Configuration节点下数据发生变化的时候,每个机器都会收到通知,Watcher回调方法将会被执行,那么应用再取下数据即可【zk.getData("/Configuration″,false,null)】。

小结

管理和存储数据节点(小数据量)。

参考资料和推荐阅读

1.链接: 参考资料.

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号