Zookeeper
2021-04-02 09:57:04 0 举报
AI智能生成
Zookeeper
作者其他创作
大纲/内容
一 Zookeeper概述
1.1 概述
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
Zookeeper工作机制.pptx
分支主题
1.2 特点
zk Services.bmp
分支主题
1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。
2)Leader负责进行投票的发起和决议,更新系统状态
3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票
4)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
5)全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
6)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
7)数据更新原子性,一次数据更新要么成功,要么失败。
8)实时性,在一定时间范围内,client能读到最新数据。
1.3 数据结构
数据结构.pptx
分支主题
1.4 应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
统一命名服务.pptx
分支主题
统一配管理.pptx
分支主题
统一集群管理.pptx
分支主题
服务器动态上下线.pptx
分支主题
软负载均衡.pptx
分支主题
1.5 下载地址
1)官网首页:
https://zookeeper.apache.org/
2)下载截图
下载1.png
下载2.png
下载3.png
二 Zookeeper本地模式安装
2.1 本地模式安装
1)安装前准备:
(1)安装jdk
(2)通过SecureCRT工具拷贝zookeeper到linux系统下
(3)修改tar包所有者
chmod u+x zookeeper-3.4.10.tar.gz
(4)解压到指定目录
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
2)配置修改
将/opt/module/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg; 进入zoo.cfg文件:vim zoo.cfg 修改dataDir路径为dataDir=/opt/module/zookeeper-3.4.10/zkData 在/opt/module/zookeeper-3.4.10/这个目录上创建zkData文件夹 mkdir zkData
3)操作zookeeper
(1)启动zookeeper
bin/zkServer.sh start
(2)查看进程是否启动
$ jps4020 Jps4001 QuorumPeerMain
(3)查看状态:
bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: standalone
(4)启动客户端:
bin/zkCli.sh
(5)退出客户端:
quit
(6)停止zookeeper
bin/zkServer.sh stop
2.2 配置参数解读
解读zoo.cfg 文件中参数含义
1)tickTime=2000:通信心跳数
2)initLimit=10:LF初始通信时限
3)syncLimit=5:LF同步通信时限
4)dataDir:数据文件目录+数据持久化路径
5)clientPort=2181:客户端连接服务器端口
三 Zookeeper内部原理
3.1 选举机制
尚硅谷大数据技术之选举机制.doc
因为一共5台服务器,只有超过半数以上,即最少启动3台服务器,集群才能正常工作。(1)服务器1启动,发起一次选举。 服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成; 服务器1状态保持为LOOKING;(2)服务器2启动,再发起一次选举。 服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2; 此时服务器1票数0票,服务器2票数2票,不够半数以上(3票),选举无法完成; 服务器1,2状态保持LOOKING;(3)服务器3启动,发起一次选举。 与上面过程一样,服务器1和2先投自己一票,然后因为服务器3id最大,两者更改选票投给为服务器3; 此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数(3票),服务器3当选Leader。 服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;(4)服务器4启动,发起一次选举。 此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。 此时服务器4服从多数,更改选票信息为服务器3; 服务器4并更改状态为FOLLOWING;(5)服务器5启动,同4一样投票给3,此时服务器3一共5票,服务器5为0票; 服务器5并更改状态为FOLLOWING;
3.2 节点类型
尚硅谷大数据技术之节点类型.doc
分支主题
3.3 stat结构体
1)czxid- 引起这个znode创建的zxid,创建节点的事务的zxid
2)ctime - znode被创建的毫秒数(从1970年开始)
3)mzxid - znode最后更新的zxid
4)mtime - znode最后修改的毫秒数(从1970年开始)
5)pZxid-znode最后更新的子节点zxid
6)cversion - znode子节点变化号,znode子节点修改次数
7)dataversion - znode数据变化号
8)aclVersion - znode访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10)dataLength- znode的数据长度
11)numChildren - znode子节点数量
3.4 监听器原理
监听器原理.pptx
分支主题
3.5 写数据流程
写数据流程.pptx
分支主题
四 Zookeeper实战
4.1 分布式安装部署
0)集群规划
在hadoop102、hadoop103和hadoop104三个节点上部署Zookeeper。
1)解压安装
(1)解压zookeeper安装包到/opt/module/目录下
(2)在/opt/module/zookeeper-3.4.10/这个目录下创建zkData
(3)重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
2)配置zoo.cfg文件
(1)具体配置
(2)配置参数解读
Server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;
B是这个服务器的ip地址;
C是这个服务器与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
3)集群操作
(1)在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件
添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码
(2)编辑myid文件
(3)拷贝配置好的zookeeper到其他机器上
(4)分别启动zookeeper
(5)查看状态
4.2 客户端命令行操作
1)启动客户端
bin/zkCli.sh
2)显示所有操作命令
help
3)查看当前znode中所包含的内容
ls /
4)查看当前节点数据并能看到更新次数等数据
ls2 /
5)创建普通节点
create path value
6)获得节点的值
get path
7)创建短暂节点
create -e path value
8)创建带序号的节点
create -s path value
9)修改节点数据值
set path value
10)节点的值变化监听
get path watch
11)节点的子节点变化监听(路径变化)
ls path watch
12)删除节点
delete path
13)递归删除节点
rmr path
14)查看节点状态
stat path
4.3 API应用
4.3.1 Eclipse环境搭建
1)创建一个工程
2)解压zookeeper-3.4.10.tar.gz文件
3)拷贝zookeeper-3.4.10.jar、jline-0.9.94.jar、log4j-1.2.16.jar、netty-3.10.5.Final.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar到工程的lib目录。并build一下,导入工程。
4)拷贝log4j.properties文件到项目根目录
log4j.properties
4.3.2 创建ZooKeeper客户端:
4.3.3 创建子节点
4.3.4 获取子节点
4.3.5 判断znode是否存在
4.4 案例实战
4.4.1 监听服务器节点动态上下线案例
1)需求:某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线
2)需求分析
服务器动态上下线案例分析.pptx
分支主题
3)具体实现:
(0)现在集群上创建/servers节点
create /servers "servers"Created /servers
(1)服务器端代码
(2)客户端代码
0 条评论
下一页