文档章节

Zookeeper学习笔记-zookeeper介绍

binxin5108
 binxin5108
发布于 2016/04/03 23:38
字数 1867
阅读 720
收藏 25

一、什么是zookeeper?

zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更加高级的服务,比如同步,配置管理,集群管理,命名空间。它被设计为易于编程,使用文件系统目录作为数据模型。服务端跑在java上,提供java和c的客户端api

二、zookeeper数据模型

  1. 分层结构
  2. 树形结构中的每个节点叫做Znode
  3. 每个Znode都有数据(byte[]类型),也可以有子节点
  4. 节点路径
    • 斜线分割:/Zoo/Duck
    • 没有相对路径
  5. 通过数据结构stat来存储数据的变化、ACL的变化和时间戳
  6. 数据发生变化是,版本号会递增
  7. 可以对Znode中的数据进行读写操作

三、zookeeper应用场景

  1. 数据发布订阅

    数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点上,订阅者进行数据订阅,当数据有变化时,可以及时的得到数据的变化通知

  2. 负载均衡(非主要应用场景)

    本质是利用zookeeper的配置管理功能,涉及的步骤为:

    • 服务win供着把自己域名几IP端口的映射注册到zk中

    • 服务消费者通过域名从zk中获取到相应的IP及端口,这个IP及端口有多个,只是获取其中的一个

    • 当服务提供者宕机是,对应的域名与IP的对应就会减少一个映射

      阿里的dubbo服务框架就是基于zk来实现服务路由和负载

  3. 命名服务

    在分布式系统总,命名服务(Name Service)也是很重要的应用场景,通过zk也可以实现类似一J2EE中的JNDI的效果;分布式环境下,命名服务更多是资源定位,并不是真正的实体资源,其本质也是用到zk的集中配置管理和查找

  4. 分布式协调/通知

    • 通过watcher和通知机制实现
    • 分布式锁
    • 分布式事务
  5. 集群管理(用的多)

    • 维护集群中的机器数量
    • 集群中机器的运行状态
    • 集群中机电的上下线操作
    • 集群节点的统一配置
  6. Master选举

    • 临时节点
    • 顺序节点
  7. 分布式锁

    • 排他锁
    • 共享锁
  8. 分布式队列

    • FIFO

四、zookeeper基本概念

  • 集群角色

    • Leader:为客户端提供读和写服务
    • Follower:提供读服务,所有写服务都需要转交给Leader角色,参与选举
    • Observer:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求并发能力
  • 会话

    • zk的客户端与zk的服务端之间的连接
    • 通过心跳检测保持客户端连接的存活
    • 接受来自服务端的watch事件通知
    • 可以设置超时时间
  • 数据节点(Znode)

    • 不是机器的意思
    • Zk树形结构中的数据节点,用于存储数据
    • 持久节点:一旦创建,除非主动调用删除操作,否则一直存储在zk上
    • 临时节点:与客户端的会话绑定,一旦客户端会话消失,这个客户端创建的临时节点都会被移除
    • SEQUENTIAL Znode:创建临时节点时,如果设置属性SEQUENTIAL,则会自动再借点后面追加一个整型数字
  • 版本

    • Version:当前Znode的版本
    • Cversion:当前Znode的子节点的版本
    • Aversion:当前Znode的ACL(访问控制)版本
  • Watcher

    • 作用于Znode节点上
    • 多种事件通知:数据更新,子节点状态等
  • ACL

    • Access Control Lists
    • 类似于linux/unix的权限控制
    • CREATE:创建子节点权限
    • READ:获取节点数据和子节点列表的权限
    • WRITE:更新节点数据的权限
    • DELETE:删除子节点的权限
    • ADMIN:设置节点ACL的权限

    注:CREATE和DELETE是针对子节点的权限

五、zookeeper单机模式

用于开发测试环境下,不可用与生产环境中,zk基于java开发,单机模式的资源需求和普通的java程序差不多

1.安装部署
  • 环境准备
    • Jdk1.6及以上
    • 机器配置:2核/2G
  • 安装
    • 下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
    • 解压文件
      • Windows下采用winzip或winwar解压
      • Linux下采用命令:tar -zxvf zookeeper-3.4.6.tar.gz
    • 配置环境变量
      • ZOOKEEPER_HOME=/home/zookeeper-3.4.6
      • PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
2.目录结构
  • bin:命令
  • config:配置文件
    • zoo_sample.cfg位样例配置文件,需修改为自己的名称,一般为zoo.cfg
    • Log4j.properties为日志配置文件
  • Contrib:一些用于操作zk的工具包
  • lib:zk依赖的某些包
  • Recipes:zk某些用法的示例代码
  • Dist-maven:maven编译后的发布目录
3.运行配置
  • conf下的zoo_sample.cfg 修改为zoo.cfg
  • 配置zoo.cfg
    • tickTime:默认3000ms,作为一种基本单元,可用它的倍数来表示系统内部的时间间隔配置,比如:
      • 2*tickTime是客户端会话的超时时间
      • 1*tickTime是客户端与zk服务端的心跳时间
    • dataDir:无默认配置,必须配置;用于配置存储快照文件的目录,如果没有配置dataLogDir,那么事务志也会存储在此目录
    • clientPort:zk的运行端口,默认是2181
  • 启动
    • windows:直接双击zkServer.cmd
    • linux:zkerver.sh start
  • 客户端连接
    • linux:bin/zkCli.sh
    • Windows:bin/zkCli.cmd
    • 命令不带任何参数默认连接到localhost:2181
    • zkCli.cmd -server ip:port连接到指定的服务器地址

六、客户端常用命令

  1. ls path [watch]

    • path表示指定数据节点的节点路径(绝对路径)
    • 累不指定节点下的所有子节点
    • 只能查看第一级的所有子节点
    • 刚安装时ls / 下只有默认的zookeeper保留节点
    • watch表示监听path的子节点的变化
  2. create [-s] [-e] path data acl

    • 创建zook节点
    • -s或者-e表示创建的是顺序节点或或者临时节点,不加默认创建的是持久节点
    • path为节点的全路径,没有相对节点的表示方式
    • data为当前节点内存储的数据
    • acl用来进行权限控制,缺省的情况下不做任务权限控制
  3. get path [watch]

    • 获取指定节点的数据内容和属性信息
    • path表示指定数据节点的节点路径
  4. set path data [version]

    • 更新指定节点的数据内容
    • path表示指定的节点路径
    • data为更新的数据
    • version为指定被更新的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错
  5. delete path [version]

    • 删除指定节点
    • path表示要删除的节点路径
    • version为指定要删除的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错

© 著作权归作者所有

binxin5108
粉丝 4
博文 9
码字总数 6199
作品 0
广州
后端工程师
私信 提问
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0
ZooKeeper学习笔记-CentOS7.5安装ZooKeeper

ZooKeeper学习笔记-CentOS7.5安装ZooKeeper 安装java环境 安装ZooKeeper 安装java环境 你ZooKeeper的运行需要java环境。 下载 如未安装java环境,下载最新版本的java: https://www.oracle.c...

Super_RD
2018/12/04
0
0
dubbo学习笔记 第一章 zookeeper安装配置

dubbo的实际使用中,基本都是使用zookeeper来管理它的服务,以及实现分布式调用。至于zookeeper是什么,具有什么用户,大家可以百度搜索了解一下。实际生产环境中,zookeeper的应用服务数目,...

sesamefox
2017/10/26
96
0
zookeeper:zookeeper学习笔记

PS:本篇博客仅仅是个人的笔记,且是个人的理解,文字较为口语化,如有错误,请大牛指出。如果想了解更深入的,可以根据我这篇博客的情况自行查找网上资料(官网或者其他大牛的博客详解) 一...

琴兽
03/31
135
0
认识ZooKeeper运行环境

文档背景: 安装ZooKeeper已经有一段时间了。中间停了一段时间,今天再用发现已经生疏了。忘了zookeeper安装在集群的哪几台机器上了。 目的: 现对拿到一个新的zookeeper环境时,如何认识zoo...

hiqj
2015/07/27
383
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部