您的位置:首页 > 其它

zookeeper学习笔记-基本用法介绍

2017-04-01 14:09 246 查看
zk基本功能了解

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

zk的功能:

协调:多个节点一起完成一个动作

1.集群成员管理

2.锁

3.选主

4.同步

5.发布/订阅

zookeeper的数据模型

1.分层结构

2.树性结构中的每个节点叫做Znode

3.每个znode有数据(byte[]类型),也可以有子节点

节点路径

斜线分割/host/ds,没有相对路径

通过数据结构stat来存储数据的变化,ACL的变化和时间戳

数据变化是,版本号会递增

可以对znode中的数据进行读写操作

应用场景

数据发布/订阅

数据发布/订阅即所谓的配置中心,布者将数据发布到zk

的一个或者一系列节点上,阅者进行数据订阅,当数据有变化时,及时得到数据的变化通知

负载均衡

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

1.服务提供者把自己的域名及IP 端口的映射注册到zk中

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

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

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

命名服务

在分布式系统中,命名服务(Name Service)也是很重要的应用场景,通过zk也可以四线类似

于J2EE中的JNDI的效果;分布式环境下,命名服务更多是资源定位,并不是真正的实体资源,

其本质也是用到zk的集中配置管理和查找

分布式协调/通知

– 通过watcher和通知机制实现

– 分布式锁

– 分布式事务

分布式锁

– 排他锁

– 共享锁

分布式队列

– FIFO

集群角色

– Leader:为客户端提供读和写服务

– Follower:提供读服务,所有写服务都需要转交给Leader角色,参与选举

– Observer:提供读服务,部参与选举过程,一般是为了增强zk集群的读请求并发能力

会话(session)

– 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个CPU和

512m内存就足够

– Zk下载地址: 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

不配置也没问题,为了操作方便一般会配置这个参数

bin

– .sh:linux环境

– .cmd:windows境

conf

– zoo_sample.cfg为例配置文件,需要修改:

自己的名称,一般为zoo.cfg

– Log4j.properties为志配置文件

Contrib:一些用于操作zk的工具包

lib:zk依赖的某些包

Recipes:zk某些用法的代码示例

Dist-maven:maven编译的发布目录

把conf中的zoo_sample.cfg修改为zoo.cfg

Zoo.cfg

– tickTime:默认3000ms,作为一种基本单元,可用它的倍数来表示系统内部的时间间隔配置,比如:

• 2*tickTime是客户端会话的超时时间

• 1*tickTime是客户端与zk服务器端的心跳时间

– dataDir:无默认配置,必须配置;不配置会不能启动,用于配置存储快照文件的目录,如果没有配置dataLogDir,那么事

务志也会存储在此目录

– clientPort:zk的运行端口,默认是2181

启动

– Windows:直接双击zkServer.cmd

– Linux:zkServer.sh start

客户端命令行

– Linux:bin/zkCli.sh

– Windows: bin/zkCli.cmd

– 不带任何参数默认连接到localhost:2181

– zkCli.cmd –server ip:port连接到指定的服务器地址

查看命令行帮助

– 命令行输入help可以查看所有的命:

列表及语法

– 实际上,输入任何符回车都会提示帮助信息

ls path [watch]

• Path表示指定数据节点的节点路径

• 列出指定节点下的所有子节点

• 能查看第一级的所有子节点

• 安装时 ls /  下有默认的zookeeper保留节点

• Watch表示监听path的子节点的变化

创建

– create [-s] [-e] path data acl

• 创建建zookeeper节点

• -s或者-e表示创建建的是序列或临时节点,不加默认创建的是持久节点

• Path:节点的全路径,没有相对节点的表示方式

• Data:当前节点内存储的数据

• Acl 用来进行权限控制,缺省情况下不做任何权限控制

读取

– get path [watch]

• 获取指定节点的数据内容和属性信息

• Path表示指定数据节点的节点路径

• 右图中

– wokers节点内的数据

– cZxid为创建该节点的事务id

– Mzxid最后一次更新该节点的事务id

– Mime:最后一次更新时间

– cversion子节点版本

– dataVersion数据版本

– aclVersion:问控制版本

更新

– set path data [version]

• 更新指定节点的数据内容

• Path表示被更新的节点路径

• data:更新的数据

• Version:指定被更新的数据版本,一般不指定,如果

数据版本已经更新,则指定旧版本时会报错

删除

– delete path [version]

• 删除指定节点

• Path表示被删除的节点

• Version:指定被删除的数据版本,一般不指定,如果

数据版本已经更新,指定旧版本时会报错















大小: 84.5 KB





大小: 8.7 KB





大小: 6.8 KB





大小: 6.8 KB





大小: 6.5 KB

查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: