Zookeeper(一)- Zookeeper介绍与集群部署

news/2024/3/28 21:59:01/文章来源:https://blog.csdn.net/qq_36602071/article/details/128084777

文章目录

  • 一、Zookeeper 介绍
    • 1. Zookeeper概述
    • 2. Zookeeper工作机制
    • 3. Zookeeper特点
    • 4. Zookeeper数据结构
    • 5. Zookeeper应用场景
      • (1)统一命名服务
      • (2)统一配置管理
      • (3)统一集群管理
      • (4)服务器动态上下线
      • (5)软负载均衡
  • 二、Zookeeper下载
    • 1. 下载地址
    • 2. 下载截图
    • 3. 下载 Linux 环境安装的 tar 包
  • 三、Zookeeper本地安装
    • 1. 本地模式安装
      • (1)安装前准备
      • (2)修改配置
      • (3)操作 Zookeeper
  • 四、Zookeeper 集群安装
    • 1. 集群规划
    • 2. 解压安装
    • 3. 配置服务器编号
    • 4. 配置zoo.cfg文件
    • 5. 启动集群
    • 6. Zookeeper集群启动停止脚本
  • 五、Zookeeper选举机制
    • 1. Zookeeper选举机制——第一次启动
    • 2. Zookeeper选举机制——非第一次启动

一、Zookeeper 介绍

1. Zookeeper概述

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

在这里插入图片描述

2. Zookeeper工作机制

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

在这里插入图片描述

3. Zookeeper特点

1.Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2.集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。
3.全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4.更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
5.数据更新原子性,一次数据更新要么成功,要么失败。
6.实时性,在一定时间范围内,Client能读到最新数据。

在这里插入图片描述

4. Zookeeper数据结构

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

在这里插入图片描述

5. Zookeeper应用场景

提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。

(1)统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。
例如:IP不容易记住,而域名容易记住。

在这里插入图片描述

(2)统一配置管理

1.分布式环境下,配置文件同步非常常见。
(1)一般要求一个集群中,所有节点的配置信息是一致的,比如 Kafka 集群。
(2)对配置文件修改后,希望能够快速同步到各个节点上。
2.配置管理可交由ZooKeeper实现。
(1)可将配置信息写入ZooKeeper上的一个Znode。
(2)各个客户端服务器监听这个Znode。
(3)一 旦Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。

在这里插入图片描述

(3)统一集群管理

1.分布式环境中,实时掌握每个节点的状态是必要的。
(1)可根据节点实时状态做出一些调整。
2.ZooKeeper可以实现实时监控节点状态变化
(1)可将节点信息写入ZooKeeper上的一个ZNode。
(2)监听这个ZNode可获取它的实时状态变化。

在这里插入图片描述

(4)服务器动态上下线

客户端能实时洞察到服务器上下线的变化

在这里插入图片描述

(5)软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求

在这里插入图片描述

二、Zookeeper下载

1. 下载地址

官网首页:https://zookeeper.apache.org/

2. 下载截图

在这里插入图片描述
在这里插入图片描述

3. 下载 Linux 环境安装的 tar 包

在这里插入图片描述

三、Zookeeper本地安装

1. 本地模式安装

(1)安装前准备

1)安装 JDK2)拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下
(3)解压到指定目录
[root@hadoop102 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/4)修改名称
[root@hadoop102 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

(2)修改配置

1)将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg;
[root@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
(2)打开 zoo.cfg 文件,修改 dataDir 路径:
[root@hadoop102 zookeeper-3.5.7]$ vim zoo.cfg
修改如下内容:
dataDir=/opt/module/zookeeper-3.5.7/zkData
(3)在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹
[root@hadoop102 zookeeper-3.5.7]$ mkdir zkData

Zookeeper中的配置文件zoo.cfg中参数含义解读如下:

1.tickTime = 2000:通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒

在这里插入图片描述

2.initLimit = 10:LF初始通信时限
Leader和Follower初始连接时能容忍的最多心跳数(10 个 tickTime就是102000)
3,syncLimit = 5:LF同步通信时限(5 个 tickTime就是5
2000)
Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。

在这里插入图片描述

4.dataDir:保存Zookeeper中的数据
注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
5.clientPort = 2181:客户端连接端口,通常不做修改。

(3)操作 Zookeeper

1)启动 Zookeeper
[root@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start
(2)查看进程是否启动
[root@hadoop102 zookeeper-3.5.7]$ jps
4020 Jps
4001 QuorumPeerMain3)查看状态
[root@hadoop102 zookeeper-3.5.7]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
(4)启动客户端
[root@hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh
(5)退出客户端:
[zk: localhost:2181(CONNECTED) 0] quit
(6)停止 Zookeeper
[root@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh stop

四、Zookeeper 集群安装

1. 集群规划

在 hadoop102、hadoop103 和 hadoop104 三个节点上都部署 Zookeeper。

2. 解压安装

1)在 hadoop102 解压 Zookeeper 安装包到/opt/module/目录下
[root@hadoop102 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/2)修改 apache-zookeeper-3.5.7-bin 名称为 zookeeper-3.5.7
[root@hadoop102 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

3. 配置服务器编号

1)在/opt/module/zookeeper-3.5.7/这个目录下创建 zkData
[root@hadoop102 zookeeper-3.5.7]$ mkdir zkData
(2)在/opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件(文件名必须是myid,因为源码中读取的就是myid文件)
[root@hadoop102 zkData]$ vi myid
在文件中添加与 server 对应的编号(注意:上下不要有空行,左右不要有空格)
2
注意:添加 myid 文件,一定要在 Linux 里面创建,在 notepad++里面很可能乱码
(3)拷贝配置好的 zookeeper 到其他机器上
[root@hadoop102 module ]$ xsync zookeeper-3.5.7
并分别在 hadoop103、hadoop104 上修改 myid 文件中内容为 34

4. 配置zoo.cfg文件

1)重命名/opt/module/zookeeper-3.5.7/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg
[root@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
(2)打开 zoo.cfg 文件
[root@hadoop102 conf]$ vim zoo.cfg
#修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.5.7/zkData
#增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
#配置参数解读
server.A=B:C:DA 是一个数字,表示这是第几号服务器;
集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
B 是这个服务器的地址;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
(3)同步 zoo.cfg 配置文件
[root@hadoop102 conf]$ xsync zoo.cfg

5. 启动集群

1)分别启动 Zookeeper
[root@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start
[root@hadoop103 zookeeper-3.5.7]$ bin/zkServer.sh start
[root@hadoop104 zookeeper-3.5.7]$ bin/zkServer.sh start
(2)查看状态
[root@hadoop102 zookeeper-3.5.7]# bin/zkServer.sh status
#hadoop102为follower
Mode: follower
[root@hadoop103 zookeeper-3.5.7]# bin/zkServer.sh status
#hadoop103为leader
Mode: leader
[root@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status
#hadoop104为follower
Mode: follower

6. Zookeeper集群启动停止脚本

1)在 hadoop102 的/home/hadoop/bin 目录下创建脚本
[root@hadoop102 bin]$ vim zk.sh
在脚本中编写如下内容
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
doecho ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
doecho ---------- zookeeper $i 停止 ------------ 
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
doecho ---------- zookeeper $i 状态 ------------ 
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
(2)增加脚本执行权限
[root@hadoop102 bin]$ chmod u+x zk.sh
(3Zookeeper 集群启动脚本
[root@hadoop102 module]$ zk.sh start
(4Zookeeper 集群停止脚本
[root@hadoop102 module]$ zk.sh stop

五、Zookeeper选举机制

1. Zookeeper选举机制——第一次启动

在这里插入图片描述

SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。
ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。
Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数1票,不够半数以上(5台服务器至少要3票),选举无法完成,服务器1状态保持为LOOKING;
(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
(3)服务器3启动,发起一次选举。此时服务器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一样当小弟。

2. Zookeeper选举机制——非第一次启动

在这里插入图片描述

(1)当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:
• 服务器初始化启动。
• 服务器运行期间无法和Leader保持连接。(例如:上面的5挂了,5无法和leader连接,5会发起leader选举)
(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:
集群中本来就已经存在一个Leader。(例如:上面的5挂了,5发起leader选举时,集群中已经存在leader的场景)
对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
集群中确实不存在Leader。(例如:上面的5挂了,5发起leader选举时,集群中不存在leader的场景)
假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。

EPOCHZXIDSID ) (EPOCHZXIDSID )	(EPOCHZXIDSIDSID124的机器投票情况:		(181) 			(182) 			    (174)
选举Leader规则: 1.EPOCH大的直接胜出; 2.EPOCH相同,事务id大的胜出; 3.事务id相同,服务器id大的胜出;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38731.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码与mes生产管理系统:功能篇

随着信息技术的发展和应用,信息系统在企业中的使用也越来越广泛。不仅可以使企业内部和企业间的信息流通更为便捷和频繁,同时可以提高管理的水平,有助于提高企业的生产效益。其中mes生产管理系统就是美豳的调查资询公司AMR(Advanced Manufacturing Resea…

【目标检测】Faster R-CNN的几点理解

目录:Faster R-CNN的几点理解一、Faster R-CNN概述二、R-CNN、Fast R-CNN、Faster R-CNN的对照2.1 R-CNN2.1.1 R-CNN的检测步骤2.1.2 R-CNN的主要缺点2.2 Fast R-CNN2.2.1 Fast R-CNN的检测步骤2.2.2 Fast R-CNN的缺点2.3 R-CNN、Fast R-CNN、Faster R-CNN的比较三、…

(二)devops持续集成开发——jenkins的权限管理配置

前言 jenkins作为目前主流的devops工具,受到了广大开发用户的追捧。由于其丰富的插件库,其可插拔的功能使得其功能和生态都十分强大。本节内容是关于jenkins的权限管理组件Role-based Authorization Strategy的安装及使用。 正文 下载安装Role-based A…

ThinkPHP5文档学习——配置

文章目录一、配置目录二、配置格式PHP数组定义其它格式的支持二级配置三、配置加载惯例配置应用配置拓展配置场景配置四、读取配置参数五、动态配置设置配置参数六、独立配置独立配置文件V5.0.1版本已经废除该写法自动读取扩展配置七、配置作用域八、环境变量配置一、配置目录 …

历届图灵奖得主盘点

图灵奖,全称A.M.图灵奖(ACM A.M Turing Award),是由美国计算机协会于1966年设立的计算机奖项,名称取自艾伦麦席森图灵,旨在奖励对计算机事业作出重要贡献的个人 。图灵奖对获奖条件要求极高,评奖…

第十三章《集合》第3节:Set集合

Set也是Collection的子接口,它定义了另一种形式的集合,专业上称之为Set集合。Set集合的特点如图13-9所示。 图13-9 Set类型集合 从图13-9可以看出:Set类型的集合就像是一个装苹果的筐子,程序员只要把元素存入这个筐子即可。集合中的元素像是胡乱堆积在一起,因此元素没有索…

12【MyBatis注解开发】

文章目录三、Mybatis注解开发3.1 快速入门3.1.1 常用注解说明3.1.2 注解实现开发3.2 注解实现一对一映射3.2.1 接口3.2.2 测试类3.3 注解实现一对多映射3.2.1 接口3.2.2 测试类三、Mybatis注解开发 3.1 快速入门 3.1.1 常用注解说明 注解功能Insert新增Update更新Delete删除…

小学生python游戏编程arcade----单词对错检测及记录写入excel中

小学生python游戏编程arcade----单词对错检测及记录写入excel中前言单词对错检测及记录写入excel中1、excel读取修改1.1 excel读取1.2 修改用到的库1.3 获取Excel表格名称的三种方式1.4 excel格式问题excel文件保存2.1 保存函数2.2 实验2.3 游戏中调用修改2.4 升级时保存字典内…

PCL 点云的法向量

一,点的法向量 点云法线 法向量的概念是很小的时候我们就已经说的,法向量是我们点云中一个非常重要的属性,诸如饿哦们常说的三维重建、点云分割,点云去噪 以及特种描述算法等。 特性: 点云中每一点的法向量夹角和曲率…

面试汇总-MySQL-杂项

目录 1、悲观锁和乐观锁 2、数据库关键字的执行顺序是什么? 3、SQL优化 3.1、如何进行sql优化? 3.2、常见的join算法 3.2.1、Hash Join 3.2.2、Merge Join 3.2.3、Nested Loop Join 3.3、Join前后表的数据量对查询性能有什么影响? …

JavaScript_BOM

JavaScript_BOM 学习路线:JavaScript_BOM->Window对象->confirm()、setInterval()、setTimeout()->History、Location->闪烁的灯泡 概述 BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。…

【Shell 脚本速成】06、Shell 数组详解

目录 一、数组介绍 二、数组定义 三、数组赋值方式 四、数组取值 案例演示 五、关联数组 5.1 定义管理数组 5.2 关联数组赋值 5.3 管理数组取值 5.4 综合案例 有这样一个现实问题:一个班级学员信息系统,要求存储学员ID、NAME、SCORE、AGE、GE…

文本检测与识别技术的应用现状及产业案例

文本检测与识别技术的产业应用现状 文本是人类文明的视觉和物理载体,文本的检测和识别使视觉与对其内容的理解进一步联系起来。在这一部分中,我们列出并分析了对提高我们的生产力和生活质量产生或将产生重大影响的最杰出的项目。 自动数据录入&#xff…

鼠标监视 | 拖拽方块 | Vue

title: 拖拽功能 tags: Vue categories: JavaScript abbrlink: 18a433ce date: 2022-11-26 21:14:19 效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" co…

RabbitMQ 快速入门-消息的收发

RabbitMQ 快速入门-消息的收发准备工作一、Connection 方式1. 生产者测试类2. 消费者测试类注意二、RabbitTemplate 方式1. 生产者测试类2. 创建队列3. 消费者注意准备工作 推荐创建两个 SpringBoot 项目&#xff0c;一个作为生产者&#xff0c;另一个作为消费者 也可使用 Ma…

[附源码]SSM计算机毕业设计校园征兵及退役复原管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

若依、多选框前后端处理,MyBatis处理多对多关系

背景 很经典的CRUD&#xff0c;整理下笔记。 后端 实体类 /*** 专业方向主键&#xff0c;用于下拉框搜索*/private Long disasterTypeId;/*** 专业方向*/private List<DisasterType> disasterType;业务层 /*** 新增专家信息库** param expertInfo 专家信息库* return 结…

gcc: error trying to exec ‘cc1plus‘: execvp: no such file or directory

该问题是缺少gcc文件&#xff0c;或者gcc与g版本不匹配问题 问题来源1&#xff1a;系统文件的缺失或者不匹配 按照如下方法测试 安装主要是利用apt-get安装&#xff0c;如果没有root权限的话&#xff0c;只能下载源码进行编译安装&#xff0c;然后添加路径环境&#xff0c;安…

Java基础概念-03-字面量

在有些资料中&#xff0c;会把字面量叫做&#xff0c;常量&#xff0c;或字面值常量&#xff0c;但最正确的叫法还是&#xff0c;字面量 小数在 Java 中也称为浮点数 下面是课本中的介绍&#xff1a; 常量是指在程序运行过程中&#xff0c;其值不能被修改的量&#xff0c;Java…

核心解读 - 2022版智慧城市数字孪生标准化白皮书

核心解读 - 2022版智慧城市数字孪生标准化白皮书前言&#xff1a;城市数字孪生基本概念一、城市数字孪生概述1、城市数字孪生内涵及概念模型2、城市数字孪生典型特征3、城市数字孪生相关方4、城市数字孪生技术参考架构5、城市数字孪生关键技术二、智慧城市数字孪生发展现状1、政…