01 zookeeper简介

zookeeper简介

1 概述

zookeeper由雅虎研究员开发,是google chubby开源实现,后来托管到Apache

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

2 ZooKeeper 特性

  • 全局数据一致:每个 server 保存一份相同的数据副本,client 无论连 接到哪个 server,展示的数据都是一致的,这是最重要的特征;
  • 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
  • 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上 消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被 发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必
    将排在 b 前面。
  • 数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失
    败,不存在中间状态;
  • 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

3 应用场景

zookeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能,高可用,且具有严格顺序访问控制能力的分布式协调存储服务。

  • 维护配置信息
  • 分布式锁服务
  • 集群管理
  • 生成分布式唯一id
3.1 维护配置信息

java编程经常遇到配置项,比如数据库的url,shcema,username和password等。通常这些配置我们会放在配置文件中,再将配置文件放置在服务器上,当需要修改配置的时候,需要去服务器上修改对应的配置文件。

但是随着分布式系统的兴起,由于许多服务都需要使用该配置文件,因此有必须保证该配置服务的高可用性和各台服务器上配置数据的一致性。

通常会将配置文件不是在一个集群上,然后一个集群冬至上千台服务器,此时如果在一台台服务器逐个修改配置文件那将是非常繁琐且危险的操作,因此就需要一种服务,能够高效快速且可靠的完成配置项的更改等操作,并且能够保证各配置项在每台服务器上的数据一致。

zookeeper就可以提供这样一种服务,其使用Zab这种一致性协议来保证数据的一致性。现在有很多开源项目都使用zookeeper来维护配置,比如hbase中,客户端就是连接一个zookeeper,获得必要的hbase集群的配置信息,然后才可以进一步操作。还有开源的消息队列kafka中,也使用zookeeper来维护broker的信息。阿里巴巴开源的soa框架dubbo中也广泛使用zookeeper管理一些配置
来实现服务的治理。

zookeeper作为当前应用的配置中心,将应用的配置信息配置在zookeeper当中。zookeeper提供相应的发布订阅机制,通过一种监听机制(在zookeeper中叫做watcher),当配置信息一旦发生改变的时候,zookeeper会发布相应的事件机制,通知集群当中的每一个服务器,便于服务器主动的从zookeeper的配置中心拉取最新的配置信息

3.2 分布式锁

一个集群是一个分布式系统,由多台服务器组成。为了提高并发度和可靠性,多台服务器上运行的同一种服务。当多个服务在运行时就需要协调各服务的进度,有时候需要保证某个服务在进行某个操作的时候,其他服务都不能进行该操作,即对该操作加锁,如果当前机器挂掉后,释放锁并fail over 到其他机器继续执行该服务。

3.3 集群管理

一个集群有时会因为各种软件硬件故障或者网络故障,出现某些服务挂掉而被移除集群,而某些服务加入到集群的情况,zookeeper会将这些服务的加入/移除通知给集群其他正常工作的服务器,以及时的调整存储和计算等服务的分配和执行等。另外zookeeper还会对故障的服务器做出诊断并尝试修复。

3.4 生成唯一id

每次要生成一个新的id,创建一个持久顺序节点,创建操作返回节点序号,即为新的id,然后把自己节点小的删除即可

4 zookeeper的数据模型

zookeeper的数据节点可以视为树状结构(目录),树中的各个节点称为znode,一个znode可以有多个子节点。

zookeeper节点在结构上表现为树状,使用路径path来定位某个znode,比如
/ns-1/wyy/mysql/schema1/table1,此处ns-1、wyy、mysql、schema1、table1分别是根节点,2级节点,3级节点,4级节点;其中ns-1是wyy的父节点,wyy是ns-1的子节点,以此类推。

znode,兼具文件和目录两种特点。既像文件一样维护这数据,元信息,ACL,时间戳等数据结构,又像目录一样作为路径标识的一部分。

如何描述一个znode?

  • 节点数据:即znode data(节点path,节点data)的关系像是java map中的key,value的关系
  • 节点的子节点
  • 节点的状态stat:用来描述当前节点的创建,修改记录,包括cZxid,ctime等

如何获取节点属性信息

  • 可以通过get命令查看指点路径节点的data、stat信息

节点属性介绍

  • cZxid:数据节点创建时的事务id
  • ctime:数据节点创建时的时间
  • mZxid:数据节点最后一次更新的事务id
  • mtime:数据节点最后一次更新时的时间
  • pZxid:数据节点的子节点最后一次被修改时的事务di
  • cversion:子节点的更改次数
  • dataVersion:节点数据的更改次数
  • aclVersion:节点的ACL更改次数
  • ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的Session id; 如果节点是持久节点,则该属性值为0
  • datalength:数据内容长度
  • numChildren:数据节点当前的子节点个数

5 节点类型

zookeeper中的节点有两种,分别为临时节点和永久节点。节点类型在创建时即被确定,并且不能修改。

临时节点

该节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将自动删除,当然也可以手动删除。虽然每个临时节点的Znode都会绑定一到一个客户端会话,但他们对所有客户端还是可见的。另外zookeeper的临时节点不允许有子节点

持久化节点

该节点的生命周期不依赖于会话,并且只有在客户端显式执行删除操作的时候,才会被删除

6 安装

6.1 mac安装

  1. 官网下载:官网

    • 本次使用的是zookeeper-3.4.14版本
  2. 解压,创建配置文件:将conf目录下的zoo_sample.cfg文件,复制一份重命名为zoo.cfg

  3. 配置环境变量,mac配置环境变量可以参考 本人之前写的es安装 本人之前写的es安装

  4. 启动命令

    • zkServer.sh start
  5. 查看状态

➜  ~ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/soft/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
  1. 关闭
zkServer.sh stop
  1. 客户端连接
zkCli.sh -server localhost:2181
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值