ZooKeeper入门
Contents
ZooKeeper
zookeeper是一个中间件,用来提供协调服务。作为分布式系统,发挥其优势,可以为大数据服务。支持Java,提供Java和C语言的客户端API。
zookeeper 入门
zookeeper的特性
- 一致性:数据一致性, 数据按照顺序分批入库。
- 原子性:事务要么成功,要么失败,不会局部化。
- 单一视图:客户端连接集群中任一zk节点, 数据都是一致的。
- 可靠性: 每次对zk的操作状态都会保存在服务端
- 实时性:客户端可以读取到zk服务端的最新数据
zookeeper 目录结构
- bin 目录 可执行文件目录
- conf 存放配置文件,其中我们需要修改zk.cfg
- contrib 附件的一些功能
- Dist-maven mvn编译后的目录
- docs 文档
- lib 需要依赖的jar包
- recipes 案例demo代码
zoo.cfg 配置
- tickTime: 用于计算的时间单元,比如session超时:N*tickTime
- initLimit 用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示。
- syncLimit 用于集群,master主节点与从节点之间发送信息,请求和应答时间长度。(心跳机制)
- Datadir : 数据目录
- Datalogdir 日志目录
- clientPort 连接服务器的服务器端口,默认是2181
Zookeeper 基本数据模型
zookeeper服务器一般是一个集群,维护一个数据模型,这个模型是树形的,然后客户端可以访问,修改,删除这个树状的数据模型中的数据。每一个目录下都是zookeeper用来保存的数据。
是一个树形结构,类似前端开发的tree.js组件。
zookeeper的数据模型可以理解为linux/unix的文件目录。
每一个节点都是成为znode,它可以由子节点,也可以有数据。
每个节点可以分为临时节点和永久节点,临时节点在客户端断开后消失。
每个zk节点都有各自的版本号,可以通过命令行来显示节点信息。
每当节点数据发生变化,那么该节点的版本号就会累加(乐观锁)。
删除/修改过时节点,版本号不匹配则会报错。
每个zk节点存储的数据不宜过大,几k即可。
节点可以设置权限acl,可以通过权限来限制用户的访问。
zk的作用体现
- master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群是高可用的。
- 统一配置文件管理,即只需要部署一台服务器,就可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多。
- 发布与订阅,类似消息队列,dubbo发布者把数据存在znode上,订阅者会读取这个数据。
- 提供了分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁。
- 集群管理,集群中保证数据的强一致性。
Zookeeper 的使用
zk特性 -session的基本原理
- 客户端与服务端之间的连接存在会话
- 每个会话都可以设置一个超时时间
- 心跳结束,session则过期。
- session过期,则临时节点znode会被抛弃
- 心跳机制,客户端向服务端ping请求
zk常用命令行操作 ([]表示的可选)
通过./zKCli.sh打开zk的客户端进行命令行后台。
Help 命令查看所有命令。
- ls与 ls2命令 (ls2 =ls+stat)
ls 加目录 表示查看目录列表
stat 加目录 显示具体信息
ls2 =ls+stat
- Get 与stat 命令
stat 就是status的意思,就是显示状态信息。
Get 读取当前节点的数据
create (-s 创建顺序节点)(-e创建临时节点) path data acl
- set path data [version可选] 修改节点的值
- delete path [version] 删除节点的值(set 和delete的版本号都是乐观锁的机制)
zk特性 -watcher 机制
- 针对每一个节点的操作,都会有一个监督者,这个监督者就是watcher 。
- 当监控的某个对象发生了变化,则触发了watcher 事件。
- zk中的watcher是一次性的,当触发后就会立即销毁。
- 父节点,子节点,增删改查都能够触发其watcher。
- 针对不同类型的操作,触发的watcher事件也不同。
watcher 命令行
通过get path [watch] 设置watcher 。
父节点增删改查的操作触发watcher 。
子节点的增删改查的操作触发watcher。
get 目录 watch
设置父节点事件
创建父节点会触发 NodeCreated事件
修改父节点数据触发 NodeDataChanged事件
删除父节点触发:NodeDeleted事件
ls 目录 watch 为父节点创建watch
在此目录下的子节点增删改查都会触发事件
watch 使用场景
- 统一资源配置
ACL access cintrol lists 权限控制
针对节点可以设置相关读写等权限,目的是为了保障数据安全性。
权限permissions可以指定不同的权限范围以及角色
ACL 命令行
- getAcl 获取某个节点的acl权限信息
getacl path acl
- setAcl 设置某个节点的acl权限信息
setacl path acl
- Addauth 输入认证授权信息,注册时输入明文密码(登录) 但是在zk的系统里,密码是以加密的形式存在的。
- zk的ACL通过[scheme:id :permissions]来构成权限列表。scheme代表采用的某种权限机制,id代表允许访问的用户。permissions代表权限组合字符串。
zookeeper 集群搭建
主从节点,心跳机制(选举模式)
Author: corn1ng
Link: https://corn1ng.github.io/2018/05/12/ZooKeeper入门/
License: 知识共享署名-非商业性使用 4.0 国际许可协议