简单了解一下zookeeper

一.Zookeeper是什么

Zookeeper是一个开源的分布式服务管理框架。它负责管理数据,接受观察者的注册,一旦数据的状态发生变化,Zookeeper负责通知观察者做出相应的反应。

二.Zookeeper的特点

  1. 一个领导者(leader),多个跟随者(Follower)
  2. 全局数据一一致,每个Server保存一份相同的数据副本
  3. 更新请求按顺序执行,来自同一个Client的更新请求按其发送顺序依次执行
  4. 数据更新原子性
  5. 实时性,在一定时间范围内,Client能读到最新数据

三.Zookeeper全分布式的搭建

 1. 将包解压缩到指定路径

1
tar -zxvf Zookeeper.x.x.tar.gz -C 指定路径
  1. 建立软连接,方便配置环境变量
1
ln -s Zookeeper.x.x zookeeper
  1. 配置环境变量
1
2
3
4
5
vi .bashrc

export ZK_HOME=/home/master/software/zookeeper
# 在path后面追加
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:
  1. 修改文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd zookeeper/conf/

vi zoo.cfg
tickTime=2000
# 指定zk数据存放的位置
dataDir=/home/master/software/data/zk/data
# 指定zk日志存放的位置
dataLogDir=/home/master/software/data/zk/dataLog
clientPort=2181
initLimit=5
syncLimit=2
# server.num后面的数字是myid中的值 myid后面要创建 hadoop0x是主机名
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
  1. 在dataDir目录下新建myid文件,里面填写一个数字就行,要和上面的server匹配

比如server.1,我就需要在dataDir下面myid填一个1

有没有发现zookeeper不需要指定master,是的,因为它自己会通过选举机制选出leader

## 四.选举机制

选举机制比较复杂,这里只说一个不够恰当的例子,稍微理解一下

选举机制其实是半数机制相关,一旦有超过半数的机器启动,zk就会选举出一个leader

选举机制说明
假设有五台Zookeeper组成的集群,id总1-5,假设者五台机器依序启动,
(1)服务器1启动,只有一台服务器,发出去的报文没有任何响应,所以它的选举状态一直是LOCKING状态
(2)服务器2启动,与服务器1通信,交换自己的选举结果,这时候服务器1选择id较大服务器 2,但是由于没 有到达半数以上,2也处于LOCKING
(3)服务器3启动,1,2选择3,到达半数以上,3成为leader
(4)服务器4启动,但是由于已经确定了3为leader,所以4是Follwer
(5)服务器5启动,与4一样

五.节点类型

Zookeeper分为两种节点

持久:客户端和服务器断开连接后,创建的节点不删除。持久化节点有持久化编号目录节点,和没有编号的目录节点两种

1
create -s /node  "node" 带编号的吃句话节点 ,-s 带编号

短暂:客户端和服务器断开连接后,创建的节点删除,临时节点有临时顺序编号目录节点 ,和没有编号的目录节点两种。

1
create -e -s /node2 "node2"  , -e 临时节点 -s :带编号

六.Zookeeper监听事件

监听器原理:事件监听有三要素,分为事件源 事件对象(描述事件源产生的行为)监听器

    事件对象
事件源 ------》监听器(监听关注的事件)-----》触发某个行为 

zookeeper监听器原理:

zookeeper有两个线程,一个connect(网络连接),一个lisener,.connect会将注册的监听事件发送给zookeeper,zk收到后,会将注册的监听事件放进放进监听事件列表,当有数据或者路径发生变化时,zookeeper会将这个消息发送给listener线程,listener内部会调用process()方法。

zk写数据流程:

 1. client向一个server发送写数据的请求,如果这个server不是leader,他会把请求转发给leader,leader会将写请求转发给每个server,server写成功后会通知leader
2. 当半数以上的serverxie写成功后,leader就会告诉那个接受请求的server写数据成功了。
3. server进而告诉客户端写数据成功

文章目录
  1. 1. 一.Zookeeper是什么
  2. 2. 二.Zookeeper的特点
  3. 3. 三.Zookeeper全分布式的搭建
  4. 4. 五.节点类型
  5. 5. 六.Zookeeper监听事件
|
载入天数...载入时分秒...