1、ZK概述
ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。HA搭建;管理去中心化的集群(例如Kafka) ZooKeeper结构: 采用树形层次结构,ZooKeeper树中的每个节点被称为—Znode。且树中的每个节点可以拥有子节点
2、ZK集群环境
zookeeper: 分布式协调服务,搭建高可用时,至少需要两个hadoop服务,一主一备,主服务对外提供业务功能,
备用等待主服务不可用时,启用备用服务器对外提供业务功能
zookeeper的服务角色分别为:
leader: 管理者 ,负责管理follower,处理所有的事务请求(数据的保存,修改,删除)
follower: 追随者,负责选举(选举leader)和数据的同步及获取
observer: 观察者,负责数据的同步及获取(需要在配置文件中指定才能生效)
zookeeper应用:
1- 搭建HA。例如: namenode的HA(high avaliable)
2- 管理去中心化的集群。例如: Kafka集群
3、ZK启动和使用
详细操作步骤请参考我的摸鱼大数据相关博客
3.1 配置环境变量
配置zookeeper环境变量(注意三台都单独配置!!!)
可以使用CRT客户端发送以下命令到三台
[root@nodex ~]# echo 'export ZOOKEEPER_HOME=/export/server/zookeeper' >> /etc/profile [root@nodex ~]# echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile [root@nodex ~]# source /etc/profile
3.2 启动集群
启动zookeeper服务(注意三台都单独需要启动!!!)
可以使用CRT客户端发送以下命令到三台
[root@nodex ~]# zkServer.sh start
还可以查看服务状态: [root@node]# zkServer.sh status
关闭zk服务的命令是: [root@node]# zkServer.sh stop
3.3 客户端连接
连接服务 方式1:直接连接本地: [root@node1 ~]# zkCli.sh 方式2:连接其他节点: [root@node1 ~]# zkCli.sh -server 节点地址
[root@node1 ~]# zkCli.sh
3.4 ZK的shell命令
查看所有shell命令: help create [-s] [-e] 节点绝对路径 节点数据: 创建数据节点 注意: -s代表序列化节点 -e代表临时节点 delete 节点绝对路径 [version]: 删除一级节点 注意: 此方式如果有子节点是不能删除的 rmr 节点绝对路径: 删多层除节点(如果有子节点也可以删除) set 节点绝对路径 data [version]: 设置 /修改节点数据 get 节点绝对路径 [watch]: 获取数据 注意: watch是监听 ls 节点绝对路径 : 查看节点信息 举例: 查看根路径下节点 ls / ls2 节点绝对路径 : 查看节点详情信息 history: 查看操作历史 quit: 退出
示例:
[root@node1 ~]# zkCli.sh ... WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] create /binzi 666 Created /binzi [zk: localhost:2181(CONNECTED) 2] create /binzi/b1 111 Created /binzi/b1 [zk: localhost:2181(CONNECTED) 3] create /binzi/b2 222 Created /binzi/b2 [zk: localhost:2181(CONNECTED) 4] ls / [binzi, zookeeper] [zk: localhost:2181(CONNECTED) 5] ls /binzi [b2, b1] [zk: localhost:2181(CONNECTED) 6] set /binzi 888 ... [zk: localhost:2181(CONNECTED) 7] get /binzi 888 ... [zk: localhost:2181(CONNECTED) 8] delete /binzi/b1 [zk: localhost:2181(CONNECTED) 9] ls /binzi [b2] # 注意: delete不能删除有子节点的节点 [zk: localhost:2181(CONNECTED) 10] delete /binzi Node not empty: /binzi # rmr可以删除多层节点 [zk: localhost:2181(CONNECTED) 11] rmr /binzi [zk: localhost:2181(CONNECTED) 12] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 13] history ... [zk: localhost:2181(CONNECTED) 14] quit Quitting...shut down [root@node1 ~]#