赞
踩
官方地址:https://zookeeper.apache.org/
Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
统一命名服务
统一配置管理
分布式环境下,配置文件同步非常常见。
配置管理可交由ZooKeeper实现。
统一集群管理
服务器动态上下线
软负载均衡
首次启动
非第一次启动
# The number of milliseconds of each tick # 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒 tickTime=2000d # The number of ticks that the initial # synchronization phase can take # LF初始通信时限 initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement # LF同步通信时限 syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. #dataDir=/tmp/zookeeper # 保存Zookeeper中的数据 dataDir=/opt/module/zookeeper-3.5.7/zkData # the port at which the clients will connect #客户端连接端口,通常不做修改 clientPort=2181
安装JDK(首先需要安装JDK)
yum install java-1.8.0-openjdk-devel.x86_64
创建文件/opt/module
mkdir /opt/module
cd /opt/module
下载文件
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
解压文件
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module
修改安装目录名
mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7
配置环境变量
vim /etc/profile.d/my_env.sh
# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin
加载环境变量
source /etc/profile
添加配置文件
cd /opt/module/zookeeper-3.5.7/conf/
mv zoo_sample.cfg zoo.cfg
修改配置文件
vim zoo.cfg
# 修改数据所在文件
dataDir=/opt/module/zookeeper-3.5.7/zkData
创建日志目录
mkdir /opt/module/zookeeper-3.5.7/zkData
启动zookeeper
bin/zkServer.sh start
查询启动状态
# 查看进程
jps
# 查看状态
bin/zkServer.sh status
启动客户端
bin/zkCli.sh
退出客户端
quit
停止zookeeper
bin/zkServer.sh stop
安装JDK(首先需要安装JDK)
yum install java-1.8.0-openjdk-devel.x86_64
创建文件/opt/module
mkdir /opt/module
cd /opt/module
下载文件
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
解压文件
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module
修改安装目录名
cd /opt/module
mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7
创建数据存储目录
cd /opt/module/zookeeper-3.5.7/
mkdir zkData
在/opt/module/zookeeper-3.5.7/zkData
目录下创建一个myid的文件
在文件中添加与server对应的编号(注意:上下不要有空行,左右不要有空格)
cd /opt/module/zookeeper-3.5.7/zkData
vim myid
# 服务器编号,每台服务器要不同
1
配置zoo.cfg配置文件
cd /opt/module/zookeeper-3.5.7/conf
mv zoo_sample.cfg zoo.cfg
修改配置文件
vim /opt/module/zookeeper-3.5.7/conf/zoo.cfg
# 修改数据存储位置
dataDir=/opt/module/zookeeper-3.5.7/zkData
# 增加集群配置
#######################cluster##########################
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
启动集群(3台都要启动)
cd /opt/module/zookeeper-3.5.7
bin/zkServer.sh start
查看状态
bin/zkServer.sh status
Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
# 通信心跳时间
tickTime=2000
# LF初始通信时限
initLimit=10
# LF同步通信时限
syncLimit=5
# 保存Zookeeper中的数据
dataDir=/tmp/zookeeper
# 客户端连接端口,通常不做修改
clientPort=2181
Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
Leader和Follower之间通信时间如果超过syncLimit * tickTime
,Leader认为Follwer死掉,从服务器列表中删除Follwer。
注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
#!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 启动 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 停止 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop" done };; "status"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 状态 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status" done };; esac
命令基本语法 | 功能描述 |
---|---|
help | 显示所有操作命令 |
ls path | 使用 ls 命令来查看当前znode的子节点 [可监听]-w 监听子节点变化-s 附加次级信息 |
create | 普通创建-s 含有序列-e 临时(重启或者超时消失) |
get path | 获得节点的值 [可监听]-w 监听节点内容变化-s 附加次级信息 |
set | 设置节点的具体值 |
stat | 查看节点状态 |
delete | 删除节点 |
deleteall | 递归删除节点 |
启动客户端
bin/zkCli.sh -server hadoop101:2181
显示所有操作命令
help
查看当前znode中所包含的内容
ls /
查看当前节点详细数据
ls -s /
czxid
:创建节点的事务zxid
ctime
:znode被创建的毫秒数(从1970年开始)mzxid
:znode最后更新的事务zxidmtime
:znode最后修改的毫秒数(从1970年开始)pZxid
:znode最后更新的子节点zxidcversion
:znode子节点变化号,znode子节点修改次数dataversion
:znode数据变化号aclVersion
:znode访问控制列表的变化号ephemeralOwner
:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。dataLength
:znode的数据长度numChildren
:znode子节点数量节点可以分为持久节点、短暂节点。
持久(Persistent)
:客户端和服务器端断开连接后,创建的节点不删除。
短暂(Ephemeral)
:客户端和服务器端断开连接后,创建的节点自己删除。
说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。
分别创建2个普通节点(创建节点时,要赋值)
create /sanguo "diaochan"
create /sanguo/shuguo "liubei"
获取子节点
ls /sanguo
获取sanguo
的值
get -s /sanguo
create /test/test1 "zhansan01"
create -s /test/test1 "zhansan01"
:创建的节点带序号test1000001
create -e /test/test1 "zhansan01"
:关闭客户端后会消失(临时)创建普通节点
create /test/test1 "zhansan01"
创建带序号节点
create -s /test/test2/test21 "zhansan02"
create -s /test/test2/test22 "lisi02"
create -s /test/test2/test23 "wangwu02"
创建短暂节点(关闭客户端后消失)
create -e /test/test3 "zhansan03"
# 创建短暂的带序号的节点
create -e -s /test/test3 "lisi03"
修改节点的值
set /test/test3 "wangwu03"
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper会通知客户端。监听机制保证ZooKeeper保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。
监听原理
常见的监听
#监听节点数据的变化
get path [watch]
# 监听子节点增减的变化
ls path [watch]
监控/test
值变化
get -w /test
# 更新/test值
set /test "zhangsan"
注意:在hadoop103再多次修改/sanguo的值,hadoop104上不会再收到监听。因为注册一次,只能监听一次。想再次监听,需要再次注册。
监控子目录变化
ls -w /test
# 新建子目录值
create /test/test4 "zhangsan04"
注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。
删除节点
delete /test/test4
递归删除节点
deleteall /test/test2
查看节点状态
stat /test
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。