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:指定被删除的数据版本,一般不指定,如果
数据版本已经更新,指定旧版本时会报错
![点击查看原始大小图片 zookeeper学习笔记-基本用法介绍_第5张图片](http://img.e-com-net.com/image/info8/7ce890b1d8cd409f95cb308bd637fa49.jpg)
- 大小: 84.5 KB
![点击查看原始大小图片 zookeeper学习笔记-基本用法介绍_第6张图片](http://img.e-com-net.com/image/info8/5707d31d18b644cd9a8bd1e71faba586.png)
- 大小: 8.7 KB
![点击查看原始大小图片 zookeeper学习笔记-基本用法介绍_第7张图片](http://img.e-com-net.com/image/info8/21613dc8f81c48ea801106f5e8dc2df2.jpg)
- 大小: 6.8 KB
![点击查看原始大小图片 zookeeper学习笔记-基本用法介绍_第8张图片](http://img.e-com-net.com/image/info8/888cac424fa74cdd871eb433eb01b2ed.jpg)
- 大小: 6.8 KB
![点击查看原始大小图片 zookeeper学习笔记-基本用法介绍_第9张图片](http://img.e-com-net.com/image/info8/f56c8b6437544864840903e9766c5dec.jpg)
- 大小: 6.5 KB