zookeeper 是什么
ZooKeeper是一个集中服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次他们实施时,都会有很多工作来解决不可避免的错误和竞争条件。由于实施这些服务的困难,最初的应用程序通常会吝啬,这使得它们在变化和难以管理的情况下变得脆弱。即使正确完成,这些服务的不同实现会导致部署应用程序时的管理复杂性。(摘录自zookeeper官网)
和Paxos算法中的集群角色类型,ZooKeeper中包含Leader、Follower和Observer三个角色;
通过一次选举过程,被选举的机器节点被称为Leader,Leader机器为客户端提供读和写服务;
Follower和Observer是集群中的其他机器节点,唯一的区别就是:Observer不参与Leader的选举过程,也不参与写操作的过半写成功策略。
一个典型的ZooKeeper集群如下:
会话就是一个客户端与服务器之间的一个TCP长连接。客户端和服务器的一切交互都是通过这个长连接进行的;
会话会在客户端与服务器断开链接后,如果经过了设点的sessionTimeout时间内没有重新链接后失效。
节点在ZeeKeeper中包含两层含义:
ZooKeeper的数据模型是内存中的一个ZNode数,由斜杠(/)进行分割的路径,就是一个ZNode,每个ZNode上除了保存自己的数据内容,还保存一系列属性信息;
ZooKeeper中的数据节点分为两种:持久节点和临时节点。
所谓的持久节点是指一旦这个ZNode创建成功,除非主动进行ZNode的移除操作,节点会一直保存在ZooKeeper上;而临时节点的生命周期是跟客户端的会话相关联的,一旦客户端会话失效,这个会话上的所有临时节点都会被自动移除。
ZooKeeper为每一个ZNode节点维护一个叫做Stat的数据结构,在Stat中维护了节点相关的三个版本:
ZooKeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper会通过事件通知到感兴趣的客户端上。
ZooKeeper中定义了5中控制权限:
其中CREATE和DELETE这两种权限都是针对子节点的权限控制。
上面有提到ZooKeeper的数据模型是一个ZNode节点树,是一个类型与标准文件系统的层次结构,也是使用斜杠(/)进行分割,如下图:
在ZooKeeper中每一个节点都可以使用其路径唯一标识,如节点p_1的标识为:/app1/p_1
每个ZNode节点都可以存储自己的数据,还可以拥有自己的子节点目录
主要说下 怎么搭建zookeeper(linux centos 6.7)
首先环境:已安装jdk
jdk安装的1.8的 然后进入1下一步
1.下载 zookeeper(https://zookeeper.apache.org/releases.html 官网页面选择进行下载)
2.下载后放到 Linux服务器上可以使用文件上传工具 xftp 或者 插件 lrzsz (yum install lrzsz)
3.进行解压
下载后的文件格式 为.tar.gz 使用 tar -zxvf zookeeper-3.4.12.tar.gz
例如在/usr/local/develope 解压 当然 文件也是位于这里的 解压后
会有个 zookeeper-3.4.12 文件夹
常用的解压命令
tar –xvf file.tar // 解压 tar包
tar -zxvf file.tar.gz // 解压tar.gz
tar -jxvf file.tar.bz2 // 解压 tar.bz2
tar –Zxvf file.tar.Z // 解压tar.Z
4.进入该文件夹 进入 conf 目录 复制一个 zoo_sample.cfg 命名为zoo.cfg
复制命令为: cp zoo_sample.cfg /usr/local/develope/zookeeper-3.4.12/conf/zoo.cfg
5.使用vim 命令 进行修改 zoo.cfg配置
如图已经修改好的 配置了一下 data 存放目录 日志存放目录
6.在zookeeper-3.4.12 目录下创建 data 创建 logs目录
7.进行启动
可能会遇到权限拒绝情况 对bin 文件夹下 文件 授予权限
简单测试 下连接
如果使用 默认 端口 2181 连接本机的 zookeeper 服务的直接在bin 目录下运行 ./zkCli.sh 就可以了
若连接不同的主机,可使用如下命令:./zkCli.sh -server ip:port
********常见的客户端操作******
1.连接上客户端 情况下
创建节点
使用create命令,可以创建一个Zookeeper节点, 如
create [-s] [-e] path data acl
其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;acl用来进行权限控制。
② 创建临时节点
使用 create -e /zk-temp 123 命令创建zk-temp临时节点
临时节点在客户端会话结束后,就会自动删除,下面使用quit命令退出客户端
重新连接客户端 使用 ls / 命令查看根目录下的连接节点 发现只有 zk-test节点了 temp 节点已经被删除
③ 创建永久节点
使用 create /zk-permanent 123 命令创建zk-permanent永久节点
可以看到永久节点不同于顺序节点,不会自动在后面添加一串数字。
读取节点
与读取相关的命令有ls 命令和get 命令,ls命令可以列出Zookeeper指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get命令可以获取Zookeeper指定节点的数据内容和属性信息。其用法分别如下
ls path [watch]
get path [watch]
ls2 path [watch]
若获取根节点下面的所有子节点,使用ls / 命令即可
查询根目录下的节点
也可以使用 ls2 / 命令查看
可以看到 子节点数据为3 numChildren属性
若想获取/zk-permanent的数据内容和属性,可使用如下命令:get /zk-permanent
可以看到 该节点的信息
更新节点
使用set命令,可以更新指定节点的数据内容,用法如下
set path data [version]
其中,data就是要更新的新内容,version表示数据版本,如将/zk-permanent节点的数据更新为456,可以使用如下命令:set /zk-permanent 456
set 后 zk-permanent 节点 现在dataVersion已经变为1了,表示进行了更新。
重新get的时候 zk-permanent的值 已经成为 456 设置成功
删除节点
使用delete命令可以删除Zookeeper上的指定节点,用法如下
delete path [version]
其中version也是表示数据版本,使用delete /zk-permanent 命令即可删除/zk-permanent节点
删除成功 (linux哲学,一个操作没有什么东西出来,就是成功)
可以看到,已经成功删除/zk-permanent节点。值得注意的是,若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。
摘录文章:https://www.cnblogs.com/halu126/p/7078637.html
摘录文章:https://www.cnblogs.com/leesf456/p/6022357.html