Zookeeper学习笔记-zookeeper介绍
2016-04-03 00:00
113 查看
摘要: zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更加高级的服务,比如同步,配置管理,集群管理,命名空间。它被设计为易于编程,使用文件系统目录作为数据模型。服务端跑在java上,提供java和c的客户端api
树形结构中的每个节点叫做Znode
每个Znode都有数据(byte[]类型),也可以有子节点
节点路径
斜线分割:/Zoo/Duck
没有相对路径
通过数据结构stat来存储数据的变化、ACL的变化和时间戳
数据发生变化是,版本号会递增
可以对Znode中的数据进行读写操作
数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点上,订阅者进行数据订阅,当数据有变化时,可以及时的得到数据的变化通知
负载均衡(非主要应用场景)
本质是利用zookeeper的配置管理功能,涉及的步骤为:
服务win供着把自己域名几IP端口的映射注册到zk中
服务消费者通过域名从zk中获取到相应的IP及端口,这个IP及端口有多个,只是获取其中的一个
当服务提供者宕机是,对应的域名与IP的对应就会减少一个映射
阿里的dubbo服务框架就是基于zk来实现服务路由和负载
命名服务
在分布式系统总,命名服务(Name Service)也是很重要的应用场景,通过zk也可以实现类似一J2EE中的JNDI的效果;分布式环境下,命名服务更多是资源定位,并不是真正的实体资源,其本质也是用到zk的集中配置管理和查找
分布式协调/通知
通过watcher和通知机制实现
分布式锁
分布式事务
集群管理(用的多)
维护集群中的机器数量
集群中机器的运行状态
集群中机电的上下线操作
集群节点的统一配置
Master选举
临时节点
顺序节点
分布式锁
排他锁
共享锁
分布式队列
FIFO
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是针对子节点的权限
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连接到指定的服务器地址
path表示指定数据节点的节点路径(绝对路径)
累不指定节点下的所有子节点
只能查看第一级的所有子节点
刚安装时ls / 下只有默认的zookeeper保留节点
watch表示监听path的子节点的变化
create [-s] [-e] path data acl
创建zook节点
-s或者-e表示创建的是顺序节点或或者临时节点,不加默认创建的是持久节点
path为节点的全路径,没有相对节点的表示方式
data为当前节点内存储的数据
acl用来进行权限控制,缺省的情况下不做任务权限控制
get path [watch]
获取指定节点的数据内容和属性信息
path表示指定数据节点的节点路径
set path data [version]
更新指定节点的数据内容
path表示指定的节点路径
data为更新的数据
version为指定被更新的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错
delete path [version]
删除指定节点
path表示要删除的节点路径
version为指定要删除的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错
一、什么是zookeeper?
zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更加高级的服务,比如同步,配置管理,集群管理,命名空间。它被设计为易于编程,使用文件系统目录作为数据模型。服务端跑在java上,提供java和c的客户端api二、zookeeper数据模型
分层结构树形结构中的每个节点叫做Znode
每个Znode都有数据(byte[]类型),也可以有子节点
节点路径
斜线分割:/Zoo/Duck
没有相对路径
通过数据结构stat来存储数据的变化、ACL的变化和时间戳
数据发生变化是,版本号会递增
可以对Znode中的数据进行读写操作
三、zookeeper应用场景
数据发布订阅数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点上,订阅者进行数据订阅,当数据有变化时,可以及时的得到数据的变化通知
负载均衡(非主要应用场景)
本质是利用zookeeper的配置管理功能,涉及的步骤为:
服务win供着把自己域名几IP端口的映射注册到zk中
服务消费者通过域名从zk中获取到相应的IP及端口,这个IP及端口有多个,只是获取其中的一个
当服务提供者宕机是,对应的域名与IP的对应就会减少一个映射
阿里的dubbo服务框架就是基于zk来实现服务路由和负载
命名服务
在分布式系统总,命名服务(Name Service)也是很重要的应用场景,通过zk也可以实现类似一J2EE中的JNDI的效果;分布式环境下,命名服务更多是资源定位,并不是真正的实体资源,其本质也是用到zk的集中配置管理和查找
分布式协调/通知
通过watcher和通知机制实现
分布式锁
分布式事务
集群管理(用的多)
维护集群中的机器数量
集群中机器的运行状态
集群中机电的上下线操作
集群节点的统一配置
Master选举
临时节点
顺序节点
分布式锁
排他锁
共享锁
分布式队列
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连接到指定的服务器地址
六、客户端常用命令
ls path [watch]path表示指定数据节点的节点路径(绝对路径)
累不指定节点下的所有子节点
只能查看第一级的所有子节点
刚安装时ls / 下只有默认的zookeeper保留节点
watch表示监听path的子节点的变化
create [-s] [-e] path data acl
创建zook节点
-s或者-e表示创建的是顺序节点或或者临时节点,不加默认创建的是持久节点
path为节点的全路径,没有相对节点的表示方式
data为当前节点内存储的数据
acl用来进行权限控制,缺省的情况下不做任务权限控制
get path [watch]
获取指定节点的数据内容和属性信息
path表示指定数据节点的节点路径
set path data [version]
更新指定节点的数据内容
path表示指定的节点路径
data为更新的数据
version为指定被更新的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错
delete path [version]
删除指定节点
path表示要删除的节点路径
version为指定要删除的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本是会报错
相关文章推荐
- Shell脚本实现自动安装zookeeper
- 基于Zookeeper的使用详解
- mesos + marathon + docker部署
- 基于zk的配置管理
- 搭建分布式架构4--ZooKeeper注册中心安装
- 搭建分布式架构5--ZooKeeper 集群的安装 3ff0
- SolrCloud4.9+zookeeper在CentOS上的搭建与安装
- 基于外部ZooKeeper的GlusterFS作为分布式文件系统的完全分布式HBase集群安装指南
- Storm集群的搭建
- Zookeeper配置项说明
- redis集群搭建
- 使用 RMI + ZooKeeper 实现远程调用框架
- 轻量级分布式 RPC 框架
- 整合Kafka到Spark Streaming——代码示例和挑战
- HBase 系统架构
- 使用zookeeper实现分布式共享锁
- 将Zookeeper集成到你的应用中
- 基于zookeeper+leveldb搭建activemq集群
- Fourinone四合一分布式计算框架整体介绍
- Dubbo与Zookeeper、SpringMVC整合和使用