其他分享
首页 > 其他分享> > Zookeeper

Zookeeper

作者:互联网

文章目录


在这里插入图片描述

前言:

zookeeper是分布式应用程序协调服务,负责协调其他的大数据框架。学习要求:会用即可。因此本文主要简单阐述一下zookeeper是怎么用的,基本的原理是啥。

1 zookeeper概述

1.1 作用

zookeeper是一个基于观察者设计模式的分布式服务管理框架,负责存储和管理集群中几点的数据,接受观察者的注册,一旦这些数据状态发生改变,Zookeeper就将负责通知已经在zookeeper中注册的那些观察者做出相应的反映。
zookeeper = 文件系统 + 通知机制

1.2 特点

在这里插入图片描述
zookeeper也是一个分布式的程序,具有多个节点,具有如下特点:

1.3 数据结构

在这里插入图片描述
zookeeper数据模型以节点树的数据结构构建,每个节点称为一个znode,每一个znode默认存储1MB的数据(可以看到数据量很小,只可以存储一些配置信息)。

1.4 应用场景

2 zookeeper安装

2.1 本地模式安装与配置

下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/
本文是基于3.5.7来进行安装的。

安装步骤:
1)下载、上传、解压、安装JDK
2)修改配置:

3)zookeeper初步了解:
在这里插入图片描述
查看zookeeper的目录结构:

查看bin目录下的文件
在这里插入图片描述
用的多的有:

第2步中修改了zookeeper配置文件,其主要参数除了dataDir之外还有:
在这里插入图片描述
其具体含义为:

2.2 集群模式安装与配置

与hadoop需要在配置文件中指定谁是namenode、secondary NameNode、resourceMannager不同,zookeeper它能够自己选出leader,所以不需要进行相关配置。但是需要自己配置每台机器的myid(用来唯一标识每一台机器的ID,每台机器不能重复),并需要在zoo.cfg文件中配置一下,告诉所有机器zookeeper集群本应该在哪几台机器上运行。

接下来进入安装步骤:
1)按照本地模式安装与配置安装一台机器
2)在存储目录dataDir中新建myid文件,并在其中写入惟一的编号。
3)将安装目录和存储目录分发到你要配置的机器上,然后分别为他们修改myid。
4)需要重新配置zoo.cfg文件:增加如下配置,之后分发个各个集群:

server.1=hadoop100:2888:3888
server.3=hadoop102:2888:3888
server.4=hadoop103:2888:3888

当前主要配置编号的参数是server.A=B:C:D

5)制作批量启动、停止、查看状态的脚本

#!/bin/bash

case $1 in
"start"){
	for i in hadoop100 hadoop102 hadoop103
	do
	echo ---------- zookeeper $i 启动 ------------
	ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
	done
};;
"stop"){
	for i in hadoop100 hadoop102 hadoop103
	do
	echo ---------- zookeeper $i 停止 ------------ 
	ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
	done
};;
"status"){
	for i in hadoop100 hadoop102 hadoop103
	do
	echo ---------- zookeeper $i 状态 ------------ 
	ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
	done
};;
esac

做一下说明:这个脚本能用前提是配置了主机名称映射和ssh免密登录和可执行权限。运行启动脚本,查看状态,得到如下图:
在这里插入图片描述
解释一下:hadoop100配置的myid = 1,hadoop102配置的myid = 3,hadoop103配置的myid = 4。为啥hadoop2是leader下面揭晓。

3 zookeeper选举机制

这个PPT讲的很清楚了:
在这里插入图片描述
在这里插入图片描述
唯一解释一下的是ZXID:

Zxid 是一个 64 位的数字,其中低 32位是一个简单的单调递增的计数器,针对客户端每一个事 务请求,计数器加 1;而高 32 位则代表Leader 周期 epoch 的编号。

每个当选产生一个新的 Leader服务器,就会从这个 Leader服务器上取出其本地日志中最大事务的 ZXID,并从中读取 epoch值,然后加 1,以此作为新的 epoch,并将低 32 位从 0 开始计数。

Zxid(Transaction id)类似于 RDBMS 中的事务 ID,用于标识一次更新操作的 Proposal(提议)
ID。为了保证顺序性,该 zkid 必须单调递增。

依据上面选举的原理,就不难理解为啥hadoop102是leader了而不是hadoop103。初始化谁是leader与启动顺序和myid都有关系。

4 zookeeper实操

4.1 客户端命令行操作

4.2 客户端API操作

4.3 服务器动态上下监听案例

4.4 分布式锁案例

标签:zookeeper,配置,Zookeeper,myid,服务器,安装,客户端
来源: https://blog.csdn.net/weixin_41399650/article/details/120610658