zookeeper基础

栏目: 编程工具 · 发布时间: 5年前

内容简介:ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。linux下安装zookeeper:目录结构:

1.zookeeper简介

ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。

2.设计目标

  • 简单的数据结构:共享的树形结构,类似文件系统,存储于内存;
  • 可以构建集群:避免单点故障,3-5台机器就可以组成集群,超过半数正常工作就能对外提供服务;
  • 顺序访问:对于每个读请求,zk会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;
  • 高性能:基于内存操作,服务于非事务请求,适用于读操作为主的业务场景。3台zk集群能达到13w QPS;

3.应用场景

  • 数据发布订阅 (以下都是基于数据发布订阅)
  • 负载均衡
  • 命名服务
  • Master选举
  • 集群管理
  • 配置管理
  • 分布式队列
  • 分布式锁

4.zookeeper基础

linux下安装zookeeper:

目录结构:

bin →存放系统脚本

conf → 存放配置文件

contrib → zk附加功能支持

dist-maven → maven仓库文件

docs → zk文档

lib → 依赖的第三方库

recipes → 经典场景样例代码

src → zk源码

其中bin和conf是非常重要的两个目录,也是经常用的。

bin目录:

其中zkServer为服务器,启动后默认端口为2181

zkCli为命令行客户端

zookeeper基础

conf目录:这里就不一一列举了,具体查阅资料

zookeeper基础

5.ZK的特性

Zk的特性会从会话、数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中重点需要掌握的数据节点与Watcher。

5.1 会话

客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输;

会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关。

会话状态图:

zookeeper基础

Zk客户端和服务端成功连接后,就创建了一次会话,ZK会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括:

CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE

  1. 一旦客户端开始创建Zookeeper对象,客户端状态就会变成CONNECTING状态。
  2. 同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED.

通常情况下,由于断网或其他原因,客户端与服务端出现断开情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重连上后,状态又变为CONNECTED,一般客户端的状态总是介于CONNECTING和CONNECTED之间。

但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态

5.2 ZK数据模型

ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”.

注意:创建节点的时候必须设置值,不然节点是创建不成功的。

zookeeper基础

  • 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据
  • 通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。

5.3 ZK节点类型

节点类型是非常重要的,是项目实战的基础。

a、Znode有两种类型:

短暂(ephemeral)(create -e /testlinshi/linshi test1 客户端断开连接zk删除ephemeral类型节点,即linshi节点)

持久(persistent) (create -p /testlinshi/linshi test2 客户端断开连接zk不删除persistent类型节点)

b、Znode有四种形式的目录节点(默认是persistent,持久)

PERSISTENT

PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )

EPHEMERAL

EPHEMERAL_SEQUENTIAL

创建znode时带-s参数即是顺序节点,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

zookeeper基础

c、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序.

5.4 zookeeper节点状态属性

如图

zookeeper基础

5.5 ACL保障数据的安全

举个例子查看znode的ACL信息

zookeeper基础

world anyone cdrwa 三个字段为ACL信息,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等),即schemepermissions。

zookeeper提供了如下几种机制(scheme):

  • world: 它下面只有一个id, 叫anyone,world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
  • auth: 它不需要id,只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation,也支持username/password形式的authentication)
  • digest:它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
  • ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16,
    表示匹配前16个bit的IP段

机制为auth:

zookeeper基础

addauth digest username:123456 # 需要先添加一个用户

setAcl /testAcl-auth auth:username:123456:crwa # 然后才可以拿着这个用户去设置权限,设置auth机制

getAcl /testAcl-auth # 密码都是以密文的形式存储的

机制为digest:

create /testAcl-digest1 123

addauth digest username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ= # 需要先添加一个用户

setAcl /testAcl-digest1 digest:username1:IkghJ5CIcrw6bRa3Zu2aSo2IblQ=:crwa # 然后才可以拿着这个用户去设置权限,设置digest机制

注意设置digest机制的时候密码都是以密文形式的

getAcl /testAcl-digest1 # 密码都是以密文的形式存储的

密文也可以在 linux 下通过命令获取:

shell>

java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider username1:123456

username1:123456-> username1: IkghJ5CIcrw6bRa3Zu2aSo2IblQ=

Permission

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

CREATE(c):创建子节点的权限

DELETE(d):删除节点的权限 (删除当前节点下的任意节点的权限)

READ(r):读取节点数据的权限

WRITE(w):修改节点数据的权限

ADMIN(a):设置子节点权限的权限

5.6 zookeeper日志可视化

前面以及讲了两个非常重要的配置一个是dataDir,存放的快照数据,一个是dataLogDir,存放的是事务日志文件。

查看快照文件:

zookeeper基础

查看日志文件则是用另一个类LogFormatter

java -cp /usr/local/zookeeper-3.4.14/zookeeper-3.4.14.jar:/usr/local/zookeeper-3.4.14/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.14


以上所述就是小编给大家介绍的《zookeeper基础》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业就是要细分垄断

创业就是要细分垄断

李开复、汪华、傅盛 / 文化发展出版社 / 2017-5-1 / CNY 45.00

对各方面资源极为有限的创业公司而言,想在激烈的市场竞争中站立下来的第一步是:成为细分市场的垄断者。不管是资本还是尖端人才,追逐的永远是行业里尖端的企业,第二名毫无意义。 首先,要精准定位潜在市场。这个市场的需求仍没有被满足,并且潜力巨大。其次,抓住时代和行业的红利,通过高速增长实现“小垄断”,抢滩登陆。最后,在细分领域里建立起自己的竞争壁垒,应对巨头和竞争对手的复制,去扩展更大的市场,从而扩......一起来看看 《创业就是要细分垄断》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试