【分布式系统管理框架】Zookeeper集群

news2024/11/19 10:33:09

分布式系统管理框架

  • 1. Zookeeper
    • 1.1 Zookeeper概述
    • 1.2 Zookeeper工作机制
    • 1.3 Zookeeper特点
    • 1.4 Zookeeper数据结构
    • 1.5 Zookeeper应用场景
    • 1.6 Zookeeper选举机制
  • 2.部署Zookeeper集群
  • 3. 知识点总结
    • 3.1 zookeeper
    • 3.2 zookeeper选举机制

1. Zookeeper

1.1 Zookeeper概述

Zookeeper定义

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

1.2 Zookeeper工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说 Zookeeper = 文件系统 + 通知机制
在这里插入图片描述

1.3 Zookeeper特点

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

1.4 Zookeeper数据结构

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

1.5 Zookeeper应用场景

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

统一命名服务

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

统一配置管理

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

统一集群管理

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

服务器动态上下线

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

软负载均衡

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

1.6 Zookeeper选举机制

在这里插入图片描述

第一次启动选举机制

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(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一样当小弟。
在这里插入图片描述

非第一次启动选举机制

(1)当ZooKeepe 集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:

  • 服务器初始化启动。
  • 服务器运行期间无法和Leader保持连接。
    在这里插入图片描述

(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:

  • 集群中本来就已经存在一个Leader

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

  • 集群中确实不存在Leader
    假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。

选举Leader规则:

1.EPOCH大的直接胜出
2.EPOCH相同,事务id大的胜出
3.事务id相同,服务器id大的胜出

SID:服务器ID

用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。

ZXID:事务ID

ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑速度有关。

Epoch:每个Leader任期的代号

没有Leader时同一轮投票过程中的逻辑时钟值是相同的每投完一次票这个数据就会增加.

2.部署Zookeeper集群

在这里插入图片描述

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

( 1)安装JDK

yum install -y java-1.8.0*
java -version

在这里插入图片描述
(2)安装Zookeeper

cd /opt
rz -E
#apache-zookeeper-3.5.7-bin.tar.gz
tar -xf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

(3)修改配置文件

cd /usr/local/zookeeper-3.5.7/conf/
cp zoo_sample.cfg zoo.cfg

vim zoo.cfg
tickTime=2000   #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10    #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
syncLimit=5     #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
dataDir=/usr/local/zookeeper-3.5.7/data      ●修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/usr/local/zookeeper-3.5.7/logs   ●添加,指定存放日志的目录,目录需要单独创建
clientPort=2181   #客户端连接端口
#添加集群信息
server.1=192.168.80.50:3188:3288
server.2=192.168.80.60:3188:3288
server.3=192.168.80.70:3188:3288


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

在这里插入图片描述

(4)拷贝配置好的Zookeeper配置文件到其他机器上

scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.80.60:/usr/local/zookeeper-3.5.7/conf/
scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.80.70:/usr/local/zookeeper-3.5.7/conf/

在这里插入图片描述

(5)在每个节点上创建数据目录和日志目录

mkdir /usr/local/zookeeper-3.5.7/data
mkdir /usr/local/zookeeper-3.5.7/logs

在这里插入图片描述

(6)在每个节点的dataDir指定的目录下创建一个 myid 的文件

echo 1 > /usr/local/zookeeper-3.5.7/data/myid
echo 2 > /usr/local/zookeeper-3.5.7/data/myid
echo 3 > /usr/local/zookeeper-3.5.7/data/myid

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

(7)配置Zookeeper启动脚本

vim /etc/init.d/zookeeper
#!/bin/bash
#chkconfig: 2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
	echo "---------- zookeeper 启动 ------------"
	$ZK_HOME/bin/zkServer.sh start
;;
stop)
	echo "---------- zookeeper 停止 ------------"
	$ZK_HOME/bin/zkServer.sh stop
;;
restart)
	echo "---------- zookeeper 重启 ------------"
	$ZK_HOME/bin/zkServer.sh restart
;;
status)
	echo "---------- zookeeper 状态 ------------"
	$ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac

(8)设置开机自启

chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper

(9)分别启动Zookeeper

service zookeeper start

在这里插入图片描述

(10)查看当前状态

service zookeeper status
netstat -lntp | grep 2181

在这里插入图片描述

在这里插入图片描述

3. 知识点总结

3.1 zookeeper

zookeeper   分布式系统管理框架    相当于各种分布式应用服务的 注册中心+文件系统+通知机制
本质:用于注册各种分布式应用,存储和管理各种分布式应用服务的元数据,如果应用服务状态发生改变会通知客户端

3.2 zookeeper选举机制

第一次选举:比较服务器节点的myid,谁myid大就获取比它小的服务器节点的选票,当选票超过节点服务器数量的半数则当选为leader,其他节点为follower,
		  即使后面再有其他myid更大的节点加入到集群也不会影响之前的选举结果。

非第一次选举:如果非leader节点故障,替换的新节点继续当follower,与leader对接并同步数据。
		     如果是leader节点故障,则需要重新选举新leader,先比较每个节点的Epoch(参加选举的参数),选最大的当leader;
		   										  若Epoch有相同的节点,则再比较ZXID(写操作的事务id),选ZXID最大的当leader;
		   										  若ZXID也有相同的节点,则在比较SID(等同于myid),选SID最大的当leader

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是微服务架构

什么是微服务架构🍉 你考虑过吗?什么是微服务,为什么越来越多的企业,为了使自己构建的应用满足客户的期望,而和微服务架构进行整合呢? 微服务,又叫微服务架构,是一种软件架构方式。…

web-报错注入

必要的函数 rand select rand(0) from hackbiao; rand(0):生成以0开头的随机数,生成的数量与字段下数据的条数相等。如果i没有这个地段的话,就会自己形成一个新的字段打印出来。 count和group by grouip by在进行排序的时候,会…

网络线程模型

堵塞IO模型:每个连接都由独立的线程进行处理。当并发度较高时系统资源占用较大,并且如果线程发生了IO堵塞还会浪费线程资源Reactor模型:reactor线程监听,并分发事件给相应的handlerProactor模型:交由系统进行异步处理&…

海岸带地物分类步骤

1.读取图像 使用 Envi 打开 imageKSC.tif 影像。在 Toolbox 工具栏中选择 Spectral->Build 3D Cube。在 3D Cube File 对话框中选择高光谱数据集,显示信息为 614*512*176 的高光谱影像,单击 OK 按钮。 图1 原始影像 2.选择波段 当打开 3D Cube RGB…

垃圾回收的核心知识点解析

目录 检测垃圾引用计数算法可达性分析算法 回收垃圾标记清除算法复制算法标记整理算法分代算法 Java运行时内存中的程序计数器、虚拟机栈、本地方法栈这三部分区域其生命周期与相关线程有关,随线程而生,随线程而灭。而程序计数器就是一个单纯存地址的整数…

Oracle Apex制作一个简单的交互式报表页面

简单查询一下: select ID,NAME,DESCRIPTION,PRICE from "FOOD_MENU" a 查询结果 创建交互式报表 工作报表展示 菜单报表展示 页设计器 改变布局样式 记得保存!!! 修改标签内容 添加验证&更改必填项 啥也…

BI-SQL丨XML

XML SQL Server中,存在一种特殊类型的数据,就是XML数据类型。 可能看到这里,小伙伴都会产生疑惑,XML不是Web语言么?为什么在SQL Server里面也会有XML数据类型? 这个就要从SQL Server的应用开始说起了&am…

自动驾驶MCU 软件架构说明

目录 1 文档... 2 1.1.1 变更历史... 2 1.1.2 Term.. 2 1.1.3 引用文档... 2 2 MCU软件框架图... 3 3 模块介绍... 3 文档 变更历史 版本Version 状态 Status 内容 Contents 日期 Date 撰写 Editor 批准 Approver V0.1 …

智慧工厂:如何打造工厂安全生产AI视频监管与风险预警系统?

一、背景需求 现代工厂多是机械操作,少量人员看守,甚至是无人化管理模式。企业都会在生产车间、仓库等重点区域安置摄像头留存画面用作回溯依据。但问题出现后再溯源,或许已经造成严重的生命安全事故和财产损失了。因此,对工厂各…

数据库技术与应用——目录篇

数据库技术与应用目录 文章目录 第1章 数据库基础知识数据库技术的概念数据管理的发展数据库的体系结构数据库管理系统常用的数据库管理系统介绍 第2章 信息得三种世界与数据模型信息的三种世界及其描述数据模型 第3章 关系模型关系模型的由来关系数据库的结构关系代数关系演算…

【算法练习】双指针

目录 移动零复写零快乐数盛最多水的容器有效三角形的个数和为s的两个数三数之和四数之和 移动零 算法原理: 数组划分(数组分块) 两个指针作用: cur:从左到右扫描数组,遍历数组 dest:已处理的区间内,非零元素…

比Wi-Fi快100倍!Li-Fi无线传输标准802.11bb正式发布:带宽高达224GB/s

大家对Wi-Fi可以说耳熟能详,最新标准已经演进到802.11be,即Wi-Fi 7,理论速率可达30Gbps。 现在,更强的来了。 IEEE今日正式签署802.11bb无线传输标准,即Li-Fi,基于光波的无线传输。 Li-Fi支持者认为&#x…

Appium+python自动化(五)- 模拟器(超详解)

简介 Appium是做安卓自动化的一个比较流行的工具,对于想要学习该工具但是又局限于或许当前有些小伙伴没 android 手机来说,可以通过安卓模拟器来解决该问题,下面就讲解使用appium连接安卓模拟器的操作步骤。而宏哥是由于手机数据线问题&#…

【大数据Hive】Hive 内部表与外部表使用详解

目录 一、hive 内部表简介 1.1 查看内部表信息 二、hive 外部表简介 三、内部表与外部表对比 四、内部表与外部表操作演示 4.1 内部表操作 4.1.1 数据准备 4.1.2 建表sql 4.2 外部表操作 4.2.1 建表sql 4.2.2 上传数据文件到 /stu目录 4.2.3 内部表删除 4.2.4 外部…

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。 1,软著申请三要素2,源代码合成软件SourceConvert2.1 启动文件2.2 Spring项目源代码格式2.2.1 规律的包名2.2.2 核心文件 3,Sour…

[QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

目录 4. QT画图与动画 4.1 QT的绘图系统 4.2 案例目标 4.3 绘制过程 4.4 更换控件的icon 4.5 案例2 4.6 坐标轴 4. QT画图与动画 4.1 QT的绘图系统 QT(也称为Qt Framework)是一种流行的跨平台应用程序开发框架,它提供了丰富的图形用户…

网页无插件播放265/264视频/监控大屏/GPU解码

网页无插件播放265/264视频/监控大屏/GPU解码 先看效果 特点 GPU解码,chrome网页播放32路 h256/hevc 直播视频流,毫无压力。提供1分屏、4分屏、8分屏、9分屏、16分屏、32分屏、64分屏分屏切换不会停止播放GPU解码、无插件播放自动识别264/265,并且都是…

飞控学习笔记-梯度下降算法(gradient descent algorithm)

简介 笔记来源于文章:An_efficient_orientation_filter_for_inertial_and_inertial_magnetic_sensor_arrays 共轭: 四元数叉乘: 欧拉角等式:

vue-springboot美食商城网站的设计与实现0fh04

美食网站是在的数据存储主要通过MySQL。用户在使用应用时产生的数据通过Java语言传递给数据库。通过此方式促进美食信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的平台。述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详…