zookeeper动物园管理员
中间件,提供协调服务
作用于分布式系统,发挥其优势,可以为大数据服务
支持java,提供java和c语言的客户端api
什么是分布式系统?
很多台计算机组成一个整体,一个整体一致对外并且处理同一请求
内部的每台计算机都可以相互通信(rest/rpc)
客户端到服务端的一次请求到相应结束会经历多台计算机
zoopkeeper的特性
一致性:数据一致性,数据按照顺序分批入库
原子性:事务要么成功要么失败,不会局部化
单一视图:客户端连接集群中任一zk节点,数据都是一致性的
可靠性:每次对zk的操作状态都会保存在服务端
实时性:客户端可以读取到zk服务端的最新数据
jdk的安装
下载linux的jsk1.8.tar,上传至linux服务器
解压缩jdk,配置jdk
测试:java -version
单机zookeeper安装
zookeeper下载,安装以及配置环境变量
zookeeper文件夹主要目录介绍
zookeeper配置文件介绍,运行zk
zoo.cfg配置
tickTime:用于计算时间单元。比如session超时:N*tickTime
initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
syncLimit:用于集群,master主节点与从节点之间发消息,请求和应答时间长度(心跳机制)
dataDir:必须配置
dataLogDir:日志目录。如果不能配置会和dataDir公用
clientPort:连接服务器的端口,默认2181
zookeeper基本数据模型介绍
是一个树形结构,类似于前端开发中的tree.js组件
zk的数据模型也可以理解为linux/unix的文件目录:/usr/local/..
每一个节点都称为znode,它可以有子节点,也可以有数据
每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
每当节点数据发生改变,那么该节点版本号会累加(乐观锁)
删除/修改过时节点,版本号不匹配则会报错
每个zk节点存储的税局不宜过大,几k即可
节点可以设置权限acl,可以通过权限来限制用户的访问
zookeeper数据模型的基本操作
客户端连接
./zkServer.sh start
./zkCli.sh
查看znode结构
关闭客户端连接
zookeeper的作用体现
maser节点选举,主节点挂了以后,从节点就会接收工作,并且保证这个节点但是唯一的,这就是所谓的首脑模式,从而保证我们的集群是高可用的。
发布与订阅,雷氏消息队列MQ(amq,rmq,),dubbo发布者把数据存在znode上,订阅者会读取这个数据
提供分布式锁,分布式环境中不同进程之间争资源,类似于多线程中的锁
统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算机中用的特别多
集群管理,集群中保证数据的强一致性
zk特性-session的基本原理
客户端与服务端之间的连接存在会话
每个会话都可以设置一个超时时间
心跳结束,session则过期
session过期,则临时节点znide会被抛弃
心跳机制:客户端向服务端的ping包请求
zk常用命令
通过./zkCli.sh打开zk的客户端进行命令行后台
ls与ls2命令
get与stat命令
create命令
create -e /imooc/tmp 无序
create -s /imooc/sec seq 顺序
set命令(改变dataVersion)
set /imooc data-imooc 1(跟版本号的需要最新版本号)
delete命令
和set一样不带版本号能执行,带版本号就要最新的版本号
zk特性-watcher的基本原理
针对每个节点的操作,都会有一个监督者->watcher
当监控的某个对象(znode)发生了变化,则触发watcher时间
zk中的watcher是一次性的,触发后立即销毁
父节点,子节点 增删改都能触发器watcher
针对不同类型的操作,触发的watcher时间也不同:
1.(子)节点创建事件
2.(子)节点删除事件
3.(子)节点数据变化事件
stat /test watch
get /test watch
父节点触发事件
创建父节点触发
WATCHER::
Created /test
WatchedEvent state:SyncConnected type:NodeCreated path:/test
修改父节点触发
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/imooccZxid = 0x4
删除父节点触发
WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/test
子节点触发事件
创建子节点触发父节点watch事件
WATCHER::Created /imooc/abc
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/imooc
删除子节点触发父节点watch事件
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/imooc
修改子节点不会触发父节点watch事件
watcher的使用场景
统一资源配置
acl权限控制
针对节点可以设置相关读写等权限,目的为了保障数据安全性
权限permissions可以指定不同的权限范围以及角色
acl命令行
getAcl:获取某个节点的acl权限信息
setAcl:设置某个节点的acl权限信息
addauth:输入认证授权信息,注册时输入明文密码(登录)
但是在zk的系统里,密码是以加密的形式存在
Acl的构成
zk的acl通过[scheme
标签:java,String,虚拟机,zookeeper,节点,new,import,public From: https://www.cnblogs.com/15078480385zyc/p/18015426