zookeeper安装|工作机制|特点|数据结构|服务|选举机制|监听机制|写数据流程

zookeeper是什么

这是hadoop的生态系统
zookeeper在其中充当的的是动物管理员的功能
他能监视其他组件有没有正常的运行
在这里插入图片描述
总结:
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache 项目。

zookeeper的工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper=文件系统+通知机制

Zookeeper的特点

1.zookeeper是由一个领导者(leader)和多个跟随者(follower)组成的集群
2.zookeeper中只要有半数以上节点存活,zookeeper集群就能正常运行
3.全局一致性:Zookpper中每一个server节点保存的数据都是一样的
4.更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
就是Client发出的更新请求,先来先执行
5.数据更新原子性:每一次更新只要有一个节点失败所有的都失败
6.实时性:在一定时间 范围内,Client能读到一致的数据

Zookpper的数据结构

Zookpper的数据结构和unix的数据结构很像,每个节点的实际路径都是唯一的,每个节点默认能存储1mb的数据
在这里插入图片描述

Zookpper的服务(功能)

zookpper所能提供的服务有:
统一命名服务
统一配置管理
统一集群管理
服务器节点动态上下线
软负载均衡

统一命名服务

在分布式环境中,经常需要对应用/服务进行统一命名,这样集群子项目之间的调用不会很复杂,出现问题知道调用的是哪个服务信息。

例如:IP不容易记住,而域名容易记住。
在这里插入图片描述

统一配置管理

很多时候我们在配置集群的时候,所有节点的配置信息都是一致的,对配置文件进行修改后,希望快速同步到其他的节点上。
配置管理可交由zookpper实现
可将配置信息写入zookpper的一个节点上,由各个客户端(其他节点)进行监听其变换。

统一集群管理

1.分布式环境中,实时掌握每个节点的状态是必要的。
(1)可根据节点实时状态做出一些调整。
2.ZooKeeper可以实现实时监控节点状态变化
(1)可将节点信息写入ZooKeeper上的一个ZNode。
(2)监听这个ZNode可获取它的实时状态变化。

服务器节点动态上下线

服务器把其登录状态写到Zookeeper集群中,客户端在Zookeeper中注册并监听,服务器下线后Zookeeper集群中的信息改变,通过通知机制同步给客户端.

软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求

Zookeeper的下载和安装

zookeeper的安装网址是这个:

https://zookeeper.apache.org/releases.html

3.4.10版本是推荐下载的版本
在这里插入图片描述
在这里插入图片描述
下载完之后将其上传到linux虚拟机中

本地模式安装部署

1.安装jdk
2.将下载好的zookpper安装包解压
tar -xzvf zookpper安装包
3.配置文件
将conf下的zoo_sample.cfg名字改为zoo.cfg
4.打开zoo.cfg修改dataDir属性
dataDir=/home/hduser/software/zookeeper-3.4.10/zkData
注:在本地模式下不需要提前创建zkData
5.在zookpper的bin目录下运行开始命令
./zkServer.sh start
6.查看状态
./zkServer.sh status

完全分布式模式安装部署

1.安装jdk
2.将下载好的zookpper安装包解压
tar -xzvf zookpper安装包
3.在zookpper目录下创建zkData文件夹
mkdir zkData
4.在zkData文件夹中创建文件myid,在文件中写入节点编号1
touch myid
5.将conf下的zoo_sample.cfg名字改为zoo.cfg
6.打开zoo.cfg修改dataDir属性
dataDir=/home/hduser/software/zookeeper-3.4.10/zkData
7.在最下方增加
server.1=zhblinux5:2888:3888
server.2=zhblinux6:2888:3888
server.3=zhblinux7:2888:3888
添加节点1,2,3 并写上对应的ip地址,
2888端口是leader和follower通讯的端口
3888端口是选举leader时用的端口
8.同步zoo.cfg配置文件
xsync zookpper
9.修改其他两个节点的myid的值2,3
10.启动所有节点

配置文件中的参数

tickTime=2000通信心跳数

单位:ms Zookeeper 服务器与客户端心跳时间
服务器之间或客户端与服务器之间维持心跳的时间间隔,
它的作用是判断与其他节点间的通信是否正常
如果2*tickTime的时间里这个节点都没有心跳,说明这个节点失联,

initlimit=10

单位:心跳数
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。

syncLimit =5

单位:心跳数
LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
集群中领袖与追随者之间的最大响应时间单位,假如响应超过SyncLimit= tickTime,领袖认为Follwer死掉,从服务器列表中删除Follwer。

clientPort =2181

客户端连接端口

选举机制(面试 重点)

1.半数机制:集群中半数以上的机器存活,集群就可用,所以zookpper适合安装奇数台服务器
2.zookpper中的leader是由内部选举机制临时产生
3.选举机制:
假如有5台服务器
5/2=2.5
当第一个服务器启动,此时只有它一台服务器
它发出的报文没有任何 相应,所以他的选举状态是looking
当第二台服务器启动,他会向第一台服务器询问他的选举结果,第一台服务器的选举状态是looking所以第一台服务器投给第二台服务器,第二台服务器投给自己,但是此时的服务器台数没有超过半数,所以第二台的状态也变成的looking,当第三台服务器启动的时候他询问第一台和第二台的投票结果都是looking,所以第一台和第二台将票都投给了第三台,第三台将票投给自己,这个时候,已经有半数服务器启动,集群可以正常运行,这个时候第三台服务器的票最多所以第三台就是leader其他的为follower,剩下的两台服务器向前面的服务器询问投票结果,发现已经有leader所以他们也都变成了follower。

Zookpper的节点类型

持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除。
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。

监听机制(面试重点)

在这里插入图片描述
1.首先创建主线程main()
2.在main线程中创建Zookeeper客户端,这时会创建两个线程:

线程connet负责网络通信连接,连接服务器;
线程Listener负责监听;

3.客户端通过connet线程连接服务器;
图中getChildren("/" , true) ," / "表示监听的是根目录,true表示监听,不监听用false
4.在Zookeeper的注册监听列表中将注册的监听事件添加到列表中,表示这个服务器中的/path,即根目录这个路径被客户端监听了;

5.一旦被监听的服务器根目录下,数据或路径发生改变,Zookeeper就会将这个消息发送给Listener线程;

6.Listener线程内部调用process方法,采取相应的措施,例如更新服务器列表等。

写数据流程

在这里插入图片描述
1.client向server1发出写请求,请求在server1上写数据
2.server将client的请求发送给leader,leader将请求转发给每一个server,各个server写成功后会通知leader。
3.当Leader收到大多数 Server数据写成功了,那么就说明数据写成功了。如果这里三个节点的话只要有两个节点数据写成功了,那么就认为数据写成功了。写成功之后,Leader会告诉Server1数据写成功了。
4.server1会通知client数据写成功了。

zookpper的操作

查看节点

ls path —查看这个路径下的节点都有啥
ls2 path --显示这个路径有什么节点,并显示stat结构体

增加节点

create path data —在这个路径下增加一个永久节点
create -s path data —在这个路径下增加一个带序号的永久节点
create -e path data —在这个路径下增加一个短暂节点
create -e -s path data —在这个路径下增加一个有序号的短暂节点
序号是根据,从一开始创建的所有节点的个数算(有序号的没序号的都算)

删除节点

delete path —删除这路径下的节点(不能级联删)
rmr path --级联删除这个路径下的所有节点

修改节点内容

set path data —修改这个路径下的内容

监听节点

监听节点个数是否发生变化

ls path watch —监听这个路径下的节点个数是否发生变化
ls2 path watch

监听节点的数据是否发生变化

get path watch —监听这个节点的数据是否发生变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值