尚硅谷课程【笔记】——大数据之Zookeeper【一】

课程视频:【尚硅谷Zookeeper教程】

一、Zookeeper入门

概述

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

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

特点

1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。

3)全局数据一致。每个Server保存一份相同的数据副本。

4)更新请求顺序进行。来自同一个Client的更新请求按发送顺序依次执行。

5)数据更新原子性。一次更新要么成功,要么失败。

6)实时性。在一定时间范围内,Client能读到最新数据。

数据结构

Zookeeper的数据模型结构类似树结构,每个节点称作一个ZNode。每个ZNode默认能存储1MB的数据,每个ZNode都可以通过路径唯一标识

应用场景

**统一命名服务:**在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。

**统一配置管理:**分布式环境下,一般要求所有节点的配置信息是一致的,对配置文件修改后,希望能够快速同步到各个节点上。

**统一集群管理:**分布式环境下,实时掌握每个节点的状态是必要的,可根据节点实时状态走做出一些调整。

**服务器节点动态上下线:**客户端能实时洞察到服务器上下线的变化。

**软负载均衡:**在Zookeeper中记录每台服务器的访问数,让访问最少的服务器去处理最新的客户端请求。

下载地址

官网首页:Index of /zookeeper

在Linux中可以用wget命令安装

bash 复制代码
wget  https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz

二、Zookeeper安装

2.1本地模式安装

前提准备

1)安装jdk

2)解压Zookeeper.tar.gz到指定目录

复制代码
tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/module/

配置修改

1)将解压后的zookeeper的zoo_sample.cfg修改为zoo.cfg;

复制代码
mv zoo_sample.cfg zoo.cfg    # 先进入zookeeper文件后再执行此条命令

2)打开zoo.cfg文件,修改dataDir路径;

复制代码
gedit zoo.cfg

# dataDir=/opt/module/zookeeper-3.7.2/zkData

3)在/opt/module/zookeeper-3.7.2/目录上创建zkData文件夹;

复制代码
mkdir zkData

启动Zookeeper

1)启动Zookeeper

复制代码
bin/zkServer.sh start

2)查看进程是否启动

复制代码
jps
# 出现QuorumPeerMain说明启动成功

3)查看状态

复制代码
bin/zkServer.sh status

4)启动客户端

复制代码
bin/zkCli.sh

5)退出客户端

复制代码
quit

6)停止Zookeeper

复制代码
bin/zkServer.sh stop

2.2配置参数解读

  • Zookeeper中的配置文件zoo.cfg中参数含义:
  • tickTime=2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位ms
  • initLimit=10:LF初始通信时限
  • syncLimit=5:LF同步通信时限
  • clientPort=2181:客户端访问端口号
  • dataDir:存储数据路径

三、Zookeeper内部原理

3.1选举机制

1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

2)Zookeeper在配置文件中没有指定Master和Slave。但是Zookeeper工作时有一个节点是Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。

a. 初始阶段
  • 每个节点向其他节点发送投票信息,包含 (myid, ZXID, epoch)。

  • 节点初始默认投给自己。

b. 投票比较
  • 当节点收到其他节点的投票时,按上述规则比较:

    • 若收到的投票比自己的更优,则更新投票并转发新投票。

    • 否则忽略该投票。

c. 确定 Leader
  • 当某个节点获得 超过半数(Quorum) 的投票时,成为 Leader。

  • 其余节点成为 Follower/Observer,切换到 FOLLOWING 或 OBSERVING 状态

3.2节点类型

持久(Persistent)型节点

  • 客户端和服务器断开连接后,创建的节点不删除
  • 客户端与Zookeeper断开连接后,Zookeeper给该节点名称进行顺序编号

短暂(Ephemeral)型节点

  • 客户端和服务器断开连接后,创建的节点自己删除
  • 客户端与Zookeeper断开连接后,Zookeeper给该节点名称进行顺序编号

3.3 Stat结构体

1)czxid:创建节点的事务zxid值

2)ctime:znode被创建的毫秒数(从1970年开始)

3)mzxid:znode最后更新的事务zxid

4)mtime:znode最后修改的毫秒数(从1970年开始)

5)pZxid:znode最后更新的子节点zxid

6)cversion:znode子节点变化号,zonde子节点修改次数

7)dataversion:znode数据变化号

8)aclVersion:znode访问控制列表的变化号

9)ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。

10)dataLength:znode的数据长度

11)numChileren:znode子节点数量

3.4监听器原理

1)首先要有一个main()线程

2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。

3)通过connet线程将注册的监听事件发送给Zookeeper

4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。

5)Zookeeper监听到有数据或路径变化,就会将这个消息发送到listener线程。

6)listener线程内部调用了process()方法。

3.5写数据流程

客户端client发给Zookeeper的数据如何在各个服务器之间保持一致的问题。

1)Clinet向一个Server1上写数据,发送一个请求。

2)如果Server1不是Leader,那么Server1会将收到的请求进一步转发给Leader;然后Leader再将该请求广播给其他Server。各Server写成功后会通知Leader。

3)当Leader收到半数以上的Server数据写成功时,会告诉Server1数据写成功了。

4)Server1会进一步通知Client数据写成功了。

相关推荐
AdrichPro16 分钟前
10、Linux C 网络编程(完整版)
linux·服务器·c语言·网络
IT 小旋风1 小时前
Linux centos 7 常用服务器搭建
linux·服务器·centos
中科岩创1 小时前
某地老旧房屋自动化监测项目
大数据·物联网·自动化
viperrrrrrrrrr72 小时前
大数据学习(95)-谓词下推
大数据·sql·学习
汤姆yu2 小时前
基于python大数据的旅游可视化及推荐系统
大数据·旅游·可视化·算法推荐
千百元2 小时前
centos线程数查看
linux·运维·服务器
zhangjin12223 小时前
kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
大数据·数据仓库·mysql·etl·kettle实战·kettlel批量插入·kettle mysql
哈哈真棒3 小时前
hadoop 集群的常用命令
大数据
犽戾武3 小时前
浅谈多个虚拟机(WSL和VMWare)的网络配置
linux·网络
阿里云大数据AI技术3 小时前
百观科技基于阿里云 EMR 的数据湖实践分享
大数据·数据库