IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据技术之Zookeeper——(一)Zookeeper的入门与安装+选举机制+客户端常用操作 -> 正文阅读

[大数据]大数据技术之Zookeeper——(一)Zookeeper的入门与安装+选举机制+客户端常用操作

提示:笔者的zookeeper是在hadoop集群搭建完成后的基础上搭建的(包括虚拟机 jdk等)


一、Zookeeper介绍

zookeeper官网
在这里插入图片描述

1.1 概述

【1】zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目

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

【3】Zookeeper = 文件系统 + 通知机制

1.2 特点

【1】Zookeeper是一个领导者(leader),多个跟随者(follower)组成的集群

【2】集群中只要有半数以上的节点存活,zookeeper集群就能正常运行,所以Zookeeper适合安装奇数台服务器

【3】全局数据一致,每一个Serve保存一份相同的数据副本,Client无论连接到哪个Serve数据都是一致的

【4】更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。

【5】数据更新的原子性:一次数据更新要么成功、要么失败

【6】实时性,在一定的时间范围内,Client能读到最新数值

1.3 zookeeper的数据结构

ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。
每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。
在这里插入图片描述

1.4 应用场景

Zookeeper提供的服务:

  • ? 统一命名服务
  • ? 统一配置管理
  • ? 统一集群管理
  • ? 服务器节点动态上下线
  • ? 软负载均衡 …

二、安装Zookeeper

2.1 本地模式

1、环境准备
【1】环境准备
????开启hadoop02虚拟机 (虚拟机安装以及jdk配置 参考hadoop专栏)

【2】将zookeeper上传到linux 使用xshell
【3】将zookeeper解压到/opt/module
????tar -zxvf apache-zookeeper-3.5.7-bin -C /opt/module/f
【4】修改名称 使其简短一点
????mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7

2、修改配置
【1】在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹
【2】将/opt/module/zookeeper-3.5.7/conf 这个路径下的zoo_sample.cfg 修改为 zoo.cfg;
【3】打开 zoo.cfg 文件,修改 dataDir 路径
????dataDir=/opt/module/zookeeper-3.5.7/zkData

3、单点启动
【1】启动zookeeper服务
????cd /opt/module/zookeeper-3.5.7

????bin/zkServer.sh start
在这里插入图片描述
【2】查看状态

bin/zkServer.sh status

在这里插入图片描述
【3】启动客户端

bin/zkCli.sh
#如果要登录主机 bin/zkCli.sh -server hadoop02:2181

在这里插入图片描述
【4】退出客户端 quit 注意这里不能使用exit exit无效

【5】停止zookeeper bin/zkServer.sh stop

2.2 zookeeper配置文件解读

????查看zookeeper的配置文件
在这里插入图片描述

【1】tick Time = 2000 通信心跳时间,zookeeper服务器与客户端心跳时间,单位毫秒
【2】initlimit = 10 LF初始通信时限 (leader和follower初始连接时能容忍的最大心跳数 tickTime的数量 即tickTime*10)
【3】syncLimit = 5 LF同步通信时限 (leader和follower·之间通信时间如果超过syncLimit * tickTime,leader则认为Follower挂掉)
【4】dataDir 保存zookeeper中的数据 注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录
【5】clientport 默认客户端连接的端口,通常不做修改

2.3 Zookeeper集群

2.3.1、集群安装

【1】集群规划
??????zookeeper集群最少三个节点,在hadoop02 hadoop03 hadoop04 三个节点部署zookeeper
【2】解压安装zookeeper 前面已经在hadoop02上安装过 只需要在hadoop02进行集群配置,然后分发到其他机器上即可

xsync /opt/module/zookeeper-3.5.7

【3】配置服务器编号 (服务器的唯一标识)
??????(1)在/opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件 添加 2 保存退出 (上下不要有空行,左右不要有空格)
在这里插入图片描述
【4】拷贝配置好的zookeeper到其他机器 使用xsync同步分发脚本
【5】在hadoop03中奖myid改成3,在hadoop04中奖myid改成4
【6】配置zoo.cfg
??????vim zoo.cfg 添加以下内容

#######################cluster##########################
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
server.4=hadoop04:2888:3888

#配置参数解读 server.A=B:C:D

A 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个server
B 是这个服务器的地址;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader, 而这个端口就是用来执行选举时服务器相互通信的端口

2.3.2、启动zookeeper集群

在这里插入图片描述

三、选举机制

【1】半数机制:集群中半数以上的机器存活,集群可用,所以zookeeper适合安装奇数台服务器

【2】zookeeper虽然在配置文件中没有指定Master和slave.但是zookeeper工作时是有一个节点为leader,其他则为follower,leader是通过内部的选举机制临时产生的

3.1、第一次启动

即集群的第一次启动,zxid一致
【前提】:假设集群有五台机器,每台机器有自己的唯一编号 (myid)1 2 3 4 5 启动顺序为1 2 3 4 5
【1】服务器1启动,为自己投1票(zxid,myid)实际投的票为(0,1) 因为机器没有达到半数,选举失败 状态保持为·looking

【2】服务器2启动,再发起一次选举,服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1) 大,更改选票为推举服务器2。此时服务器1票数为0票,服务器2票数为2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING

【3】服务器3启动,发起一次选举,。服务器3的myid比服务器1和服务器2都大,此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING

【4】服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为 1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING

【5】服务器5启动,跟4一样当小弟
在这里插入图片描述

3.2、非第一次启动

即集群工作情况下leader发生故障后需要重新选举leader zxid不一致
【1】当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:

????? 服务器初始化启动。

????? 服务器运行期间无法和Leader保持连接。

【2】当一台机器进入leader选举的情况,当前集群可能处于两种状态:

(1)集群中leader存在

? 对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可

(2)集群中leader不存在(leader挂掉)

? 假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。
在这里插入图片描述
先比EPOCh 再比zxid 再比myid

四、zookeeper的客户端操作

4.1、常用命令行

命令行基本语法功能
help显示所有操作命令提示
ls [path]使用ls命令查看当前znode的子节点(-w 监听子节点 -s 附加次级信息)
get获得节点的信息【可监听】 -w 监听节点内容变化;-s 附加次级信息
creat普通创建子节点 -s 含有序列 ; -e 临时
set设置节点的值,修改节点的值
stat查看节点的状态
delete删除节点(空的)
deleteall递归删除节点

【1】启动客户端 bin/zkCli.sh -server hadoop02:2181
【2】help 查看帮助
在这里插入图片描述
【3】查看当前节点的内容信息 ls /
在这里插入图片描述
【4】查看当前节点的详细数据 ls -s /
在这里插入图片描述
(1)czxid:创建节点的事务 zxid

每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生

(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 子节点数量

4.2、节点类型

4.2.1、概述

节点类型分为两类四种 两大类:持久、短暂 ;四种:持久有序、持久无序、短暂有序、短暂无序

持久:客户端和服务器断开连接后,创建的节点不会被删除

短暂:客户端和服务器断开连接后,创建的节点会自己删除

【1】持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在

【2】持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只是zookeeper给该节点进行了顺序编号

【3】临时目录节点:客户端与zookeeper断开连接后,该节点被删除

【4】临时顺序编号目录节点:客户端与zookeeper断开连接后,该节点被删除,只是zookeeper给该节点进行了顺序编号

4.2.2、实操

【1】创建永久节点 不带序号
在这里插入图片描述【2】获得该节点的值
在这里插入图片描述
【3】创建永久节点+带序号

create -s /sanguo/weiguo/zhangliang "zhangliang"
create -s /sanguo/weiguo/zhangliang "zhangliang"

在这里插入图片描述
【4】创建短暂节点 + 不带序号
在这里插入图片描述
【5】查看当前节点
在这里插入图片描述
【6】退出客户端重连 再次查看
在这里插入图片描述
【7】修改节点数据
在这里插入图片描述

4.3、监听器原理

????客户端注册监听他关心的目录节点,当目录节点发生变化(数据改变、节点删除、自目录节点增加删除)时,zookeeper会通知客户端。监听机制保证了zookeeper保存的任何数据的任何改变都能快速的响应到监听了该节点的应用程序
在这里插入图片描述

4.3.1、监听节点数据变化

【1】在 hadoop04 主机上注册监听/sanguo 节点数据变化

get -w /sanguo

【2】在hadoop03主机上修改/sanguo节点的数据

set /sanguo "三国"

【3】观察hadoop04主机收到的数据变化的监听
在这里插入图片描述
【注意】在hadoop03再次修改数据,但是hadoop04不会再收到监听。因为注册一次只能监听一次。想要再次监听,需要再次注册

4.3.2、监听子节点增减的变化

【1】在hadoop04上注册监听/sanguo节点的子节点变化

ls -w /sanguo

【2】在hadoop03上创建子节点

create /sanguo/jin "simayi"

【3】观察hadoop04收到的子节点变化的监听

在这里插入图片描述

4.3.3、节点的查看与删除

【1】查看节点状态

stat /sanguo

在这里插入图片描述

【2】删除节点

delete /sanguo/jin

在这里插入图片描述
【3】递归删除节点

deleteall /sanguo

在这里插入图片描述

小结

【1】zookeeper是什么(分布式的,为分布式框架提供协调服务的apache项目)
【2】zookeeper的应用场景

  1. 统一命名服务
  2. 统一配置管理
  3. 统一集群管理
  4. 服务器动态上下线
  5. 软负载均衡

【3】zookeeper的安装

  1. 本地模式安装
  2. 单点启动
  3. 集群模式配置

【4】zookeeper的选举机制
【5】客户端常用操作命令

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:39:36  更:2021-08-15 15:40:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:02:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码