zookeeper 学习(一) 初识zookeeper
1安装zookeeper
1.1linux上安装
【如果在bin文件夹下执行命令,则下列命令中/bin 则可以去掉】
1.下载地址:
https://downloads.apache.org/zookeeper
2.安装代码:【如果安装不成功,则去网址找到存的版本】
wget https://downloads.apache.org/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
3.操作
tar zxvf apache-zookeeper-3.6.2-bin.tar.gz cd apache-zookeeper-3.6.2-bin cp conf/zoo_sample.cfg conf/zoo.cfg
4.配置 【temp 临时文件,会被清理掉】=>vi conf/zoo.cfg 把内容修改为:
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
5.启动和停止
#首先进行下面操作, 进入到相关文件夹下 cd apache-zookeeper-3.6.2-bin #启动 ./bin/zkServer.sh start #停止 ./bin/zkServer.sh stop
成功运行界面
1.2windows上安装
1.首先下载
网址 https://zookeeper.apache.org/releases.html
下载 3.6.0
解压 zookeeper
2.将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg
3.修改zoo.cfg配置文件,将dataDir=/tmp/zookeeper修改成zookeeper安装目录所在的data文件夹(需要在安装目录下面新建一个空的data文件夹和log文件夹),再添加一条添加数据日志的配置,如下图
4.一些参数说明
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
5.启动zookeeper,判定是否安装成功,双击运行bin目录下的zkServer.cmd文件即可,通过 zkCli.cmd判断是否执行成功
2节点znode (基本数据模型)
- 树形结构,也可以理解为linux的文件目录
- 每一个节点都是znode,里面可以包含数据,也可以有子节点
- 点分为永久节点和临时节点( session失效,也就是客户端断开后,临时节点消失)
- 每个znode都有版本号,每当数据变化,版本号会累加(乐观锁进行操作)
- 删除或修改节点,版本号不匹配的话(版本号已过时) , 会报错
- 每个节点存储的数据不宜过大,几K即可
- 节点可以设置权限,来限制用户的访问
- Zookeeper保证读和写都是原子操作,且每次读写操作都是对数据的完整读取或完整写入
-
节点类型
- 持久节点
- 临时节点
- 顺序节点.【持久节点和临时节点都可以是顺序/非顺序节点】
- 节点属性
- dataVersion:数据版本号,每次对节点进行set操作,就会增加1
- cversion :子节点发生变化,就会加1
- aclVersion:权限有变化的时候就会加1
- 2
3初次安装错误
错误1:Connection refused
1、查看是否端口被占用:./bin/zkServer.sh start-foreground
可见-端口已经被占用,此时就需要修改一下端口
进入data目录下修改zoo.cfg文件。在文件最后一行添加
admin.serverPort=8123
然后重新启动
./bin/zkServer.sh start
进入客户端配置端口
./bin/zkCli.sh -server 127.0.0.1:2181
4常用命令
4.1进入客户端操作节点
#连接到 ZooKeeper 服务:
./zkCli.sh -server 127.0.0.1:2181
#打开客户端 (在bin下 就可不要 /bin) ./bin/zkCli.sh -server #列出根下所有节点。首次部署zookeeper时,默认在根节点/下有一个叫做/zookeeper的保留节点。 ls / #创建demoNode1节点。默认为永久节点 create /demoNode1 2233 #获取demoNode节点的数据 get /demoNode1 #修改demoNode1节点的数据 set /demoNode1 world #修改节点数据,同时更新版本号 set /demoNode1 world #查看修改后的数据 get /demoNode1 #删除demoNode1节点 delete /demoNode1
4.2zookeeper服务器启动、停止
#启动ZK服务 ./zkServer.sh start #停止ZK服务 ./zkServer.sh stop #查看ZK服务状态 ./zkServer.sh status #重启ZK服务状态 ./zkServer.sh restart
4.3节点操作
#创建持久节点 demoNode节点下创建 demo节点 key demo value 2233 create /demoNode/demo 2233 #创建持久书顺序节点 -s demoNode节点下创建 demos节点 key demo value 2233 create -s /demoNode/demo 2233 #创建按临时节点 -e [临时节点不允许有子节点] key temp value 2233 【临时节点一旦断开,就会消失】 create -e /demoNode/temp 2233
#查看状态
stat /demoNode
#获取节点数值
get /demoNode
#修改节点数值
set /demoNode 2233
#条件更新 set -v 当前节点版本(dataVersion) /节点名称 值 =》多线程安全
set -v 1 /demoNode 344
#删除
delete /demoNode