zookeeper分布式应用程序协调服务

一、zookeeper基本介绍

1.1 zookeeper的概念

        Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目
        是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
        ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
        ZooKeeper包含一个简单的原语集,提供Java和C的接口。
        ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在        $zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

1.2 zookeeper的工作机制

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

1.3 zookeeper的特点

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

1.4 zookeeper的数据结构

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

1.5 ZooKeeper的应用场景

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

1️⃣、统一命名服务

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

2️⃣、统一配置管理

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

3️⃣、统一集群管理

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

4️⃣、服务器动态上下线

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

5️⃣、 软负载均衡

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

二、ZooKeeper的选举机制

2.1 第一次启动选举机制

        服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;
        服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
        服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
        服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;
        服务器5启动,同4一样当小弟。

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

1️⃣、当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入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选举。

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

2.3 选举Leader规则

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

三、部署ZooKeeper集群

3.1 环境准备

服务器类型系统和ip地址需要安装的组件
Zookeeper服务器1CentOS7.4(64 位) 192.168.200.12jdk
Zookeeper服务器2CentOS7.4(64 位) 192.168.200.13jdk
Zookeeper服务器3CentOS7.4(64 位) 192.168.200.14jdk
关闭防火墙和SElinux

setenforce 0
systemctl stop firewalld

安装 JDK

#非最小化安装一般自带
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version

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

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

相关文章

unity在linux环境下videoplayer 无法播放问题解决路径

1、问题 一个项目需要在linux下播放视频,并且视频在机器上,也就是要使用应用外的视频文件进行播放。 视频的格式当前提供的事avi格式,并且使用videoplayer 在windows下播放正常。 但是发出包之后再Ubuntu环境怎么都无法播放。 2、测试环境…

K-means和逻辑回归

逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率:P/(1-P) 对数几率是:log(P/(1-P)) **考虑对输入x分类的模型:**log(P/(1-P))wx 则 Pexp(wx)/(exp(w*x)…

【线段树】【区间更新】2916. 子数组不同元素数目的平方和 II

算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…

Spring Boot集成Graphql快速入门Demo

1.Graphql介绍 GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。 优势 GraphQL…

贫穷的本质

李永乐 李永乐一个老师 李永乐,男,汉族,1983年出生于吉林省吉林市 [1],高中数学、物理老师,北京大学物理与经济双学士 [5],清华大学电子工程系 [5]硕士研究生。 他的解读逻辑比较清晰,更像是用数…

Redis从入门到精通(十五)Redis分布式缓存(三)Redis分片集群的搭建和原理分析

文章目录 前言5.4 分片集群5.4.1 搭建分片集群5.4.2 散列插槽5.4.3 集群伸缩5.4.3.1 需求分析5.4.3.2 创建新的Redis实例5.4.3.3 添加新节点到Redis集群5.4.3.4 转移插槽 5.4.4 故障转移5.4.4.1 自动故障转移5.4.4.2 手动故障转移 5.4.5 RedisTemplate 5.5 小结 前言 Redis分布…

webpack-loader的使用

引入css后执行打包命令 "build": "npx webpack --config wk.config.js"发现报错: webpack默认只能处理js其他的像css,图片都需要借助loader来处理 css-loader loader可以用于对模块的源代码进行转换,可以把css看成一个模块&…

项目管理工具——使用甘特图制定项目计划的详细步骤

甘特图是一种直观的项目管理工具,它有助于我们清晰地展示任务安排、时间管理和项目的进度。以下是使用甘特图制定项目计划的详细步骤: 1、创建项目:首先,在进度猫中创建新的项目,并设置项目的时间、工作日等参数。根据…

Day37|贪心算法part06:738.单调递增的数字、968. 监控二叉树、贪心总结

738. 单调递增的数字 总体思想就是从后往前遍历,比较第i位和第i1位的大小,不符合顺序char[i]减1,i1位填9,找到需要填9的最先位置,然后填9。 class Solution {public int monotoneIncreasingDigits(int n) {String s …

请求分发场景下的鉴权问题

说明:记录一次对请求分发,无法登录系统的问题。 场景 如下,在此结构下,如何判断该用户是已登录的用户; 常规操作,用户登录后给用户发Token,同时将发放的Token存入到Redis中。要求用户后续请求…

halcon domain和region总结

1.domain是什么 在halcon中,ROI(Region Of Interest)被称为图像的域(domain)(参考《solution_guide_i.pdf》)。这个术语来自数学中的定义域,而图像就是函数,本函数负责将坐标映射到像素值,即f(x) gray这样…

计算机网络——TCP和UDP协议

目录 前言 前篇 引言 TCP与UDP之间的区别 TCP 三次握手 为什么要三次握手而不是两次握手? 丢包问题与乱序问题的解决 四次挥手 为什么客户端需要等待超时时间? UDP协议 TCP和UDP的主要区别 前言 本博客是博主用于复习计算机网络的博客&…

性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis)

数据库优化 explain select 重点: type类型,rows行数,extra SQL的优化 在写on语句时,将数据量小的表放左边,大表写右边where后面的条件尽可能用索引字段,复合索引时,最好按复合索引顺序写wh…

NGO-VMD+皮尔逊系数+小波阈值降噪+重构

NGO-VMD皮尔逊系数小波阈值降噪重构 NGO-VMD皮尔逊系数小波阈值降噪重构代码获取戳此处代码获取戳此处 以西储大学轴承数据为例,进行VMD,且采用NGO进行K a参数寻优 并对分解分量计算皮尔逊相关系数筛选含噪声分量,对其进行小波软硬阈值降噪&a…

网络协议——OSPF(开放式最短路径优先)详解

1.什么是OSPF 开放式最短路径优先OSPF 是一种动态的高度可靠和高度可扩展的路由协议,用于构建大型网络中的动态路由系统 2. OSPF的协议号为:89 3. OSPF的特点: OSPF是链路状态协议使用了区域概念:减少路由选择协议对路由器CPU,…

电磁兼容导论翻译疑问

在读电磁兼容导论P71页时,发现在“注意“这句话翻译的和原文有疑问:我的理解是单边幅度谱是双边幅度谱的两倍。请大家帮忙看看应如何翻译。 英文原版:Note that all positive frequency components except the dc component in the two-side…

【计算机毕业设计】基于微信小程序的开发项目150套(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享200的微信小程序毕业设计,后台用Java开发,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设…

解决mac本git安装后找不到命令的问题

不熟悉mac配置,折腾了半天,记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包: 安装时提示: 这里的解决办法是按住control键再打开文件安装。 安装完…

Linux内核之互斥锁mutex_init和自旋锁spin_lock区别及用法实例(四十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

股权融资成本GLS模型计算

一、模型公式 式中: r 为股权融资成本 P为股价 B为每股净资产 FROE为预测每股净资产收益率 目标:求解股权融资成本r 二、模型口径参考来源 PS:实际以代码为准 ①FROE(预测每股净资产收益率): 资本市场开放与…