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

server/2025/2/12 8:47:24/

课程视频:【尚硅谷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命令安装

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数据写成功了。


http://www.ppmy.cn/server/167007.html

相关文章

攻克AWS认证机器学习工程师(AWS Certified Machine Learning Engineer) - 助理级别认证:我的成功路线图

引言 当我决定考取AWS认证机器学习工程师 - 助理(AWS Certified Machine Learning Engineer — Associate)级别证书时,我就预料到这将是一段充满挑战但回报颇丰的旅程。跟你说吧,它在这两方面都没让我失望。这项考试面向的是不仅理解机器学习原理,还对AWS生态系统有扎实基…

jvm 线程监控调试

文章目录 前言一、使用JDK工具转储线程文件(如jstack)1. 找到Java进程的PID:2. 使用jstack生成线程转储文件:3.验证生成的线程转储文件:二、分析文件1.使用在线工具进行分析上传thread-dump文件,等待解析完成2.查看分析结果总结前言 提示:使用jdk自带工具转储线程监控文…

三十三、网络及多线程

三十三、网络及多线程 以下界面设计基本全用ui文件设计 33.1 Qt网络编程 Qt 直接提供网络编程模块,基于TCP/IP 客户端和服务器相关各 种类。TCP 通信(QTcpSocket/QTcpServer )。UDP 通信 (QUdpSocket)。还有部分实现HTTP、FTP 等网络…

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …

Vue 过渡动画实现全解析:打造丝滑交互体验

Vue 过渡动画实现全解析:打造丝滑交互体验 在当今竞争激烈的 Web 开发领域,用户体验已成为衡量项目成功与否的关键指标。过渡动画作为提升用户体验的利器,能让应用的交互更加丝滑流畅,给用户带来愉悦的使用感受。在 Vue.js 框架中…

Mac电脑修改hosts文件内容

背景 mac电脑需要配置ip和域名的映射关系,通过域名访问内部系统 解决 打开终端 输入 sudo su 命令,切换到root用户 输入密码 编辑hosts文件,输入命令 vim /etc/hosts 编辑hosts内容,英文状态下,按键盘字母 i 键&am…

MIPI 详解:CPHY

提示:本文基于 MIPI Specification for C-PHY Version 1.2 – 26 November 2016 文章目录 简介CPHY 概述PHY 功能概述Lane 信号状态概述高速模式下符号的表示高速信号状态表示 强制功能 体系结构Lane 模块主机和从机高频时钟产生通道和物理协议接口可选择的通道选项…

序列模型和注意力机制

序列模型和注意力机制 Seq2Seq模型主要用于处理输入序列到输出序列的映射问题,常用于机器翻译、语音识别等。主要由**编码器(Encoder)和解码器(Decoder)**构成。 编码器输入序列后生成一个固定长度的向量表示隐藏状态,通常采用RNN结构。输入序列的每个单…