Zookeeper 分布式应用程序的分布式协调服务

news2025/1/12 23:40:47

老规矩学习一个新技术首先从它的官网入手:Apache ZooKeeper

概览

一谈到集群,

从结构上看:

  • 主从集群:主从集群就可以做读写分离,写在主、读在从
  • 无主集群(比如redis cluster)

从数据上看:

  • 复制集群:同步拷贝的集群,每个节点数据一样
  • 分片集群:sharding分片集群

zk是复制集群、主从集群

96195692fced5c805db7e9151465f840.jpeg

一般谈到集群谈到分布式,就会谈到角色,角色有:leader、follower、client

在讨论集群模式中,只要看到集群是主从结构的,立马就要条件反射一个事情,那就是主一定是单点的。而单点,就会有单点故障问题也就是说主可能会挂,主挂了就代表整个集群不可用了,因为不能执行写操作了

leader单点问题 -> leader可能会挂 -> 集群服务不可用 -> 不可靠的集群 -> 事实上,zk集群极其高可用

如何解决zk的主的单点故障问题?

如果有一种技术,可以快速的恢复出一个leader,可以通过选举,在主挂了以后在200ms以内的时间内,重新选择出一个新的主。而这200ms的期间,就是集群的无主状态(不可用状态)

也就是说,zk集群的运行有两种状态:

  • 可用状态、
  • 不可用状态

我们期待的是,从不可用状态恢复成可用状态越快越好

因为zk选择了比较简单的主从模型,主是单点了,单点会有单点故障问题,但是单点也有好处:就是它活着的时候,它一个人说了算,所以所有从 从节点转发过来的写请求,都会在主节点这里排队,它会给每一个写操作都排一个顺序的id号(这个顺序排队处理,有点像redis)

ee101175235749a1a1866850850ff2a0.png

zk的数据结构是树的层级结构(分层命名空间),通过节点的概念来存储数据,但是每个节点的数据大小控制在1M,为什么要控制得这么小,这就与zk的设计理念有关,zk追求的就是对外提供协调服务时,能快速响应

zk集群的设计理念下,理想的读写比例是10比1,所以我们不要拿zk当数据库用,比如有的人拿zk存MQ的消费offset这会有大量的更新zk操作,是不合适的 

安装、使用

因为zk就是一个java开发的项目,如果是java开发的项目,那么基本的模式就是

下载并解压安装包

按照安装包当前所在的位置,配置环境变量ZOOKEEPER_HOME,然后再环境变量path的最后追加ZOOKEEPER_HOME/bin

找到ZOOKEEPER_HOME/bin下的zk对应的启动脚本,执行该脚本就好,有时启动脚本后面还可能可以跟着不同的附加命令。当前zkServer.sh就是zk对应的启动脚本

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

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

相关文章

10---正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s…

JavaEE 数据链路层 以太网协议

网络原理补充-数据链路层与以太网协议 文章目录 JavaEE & 网络原理补充-数据链路层 & 以太网协议1. 以太网数据帧1.1 帧头帧尾1.2 类型1.3 载荷 2. IP数据报补充2.1 16位标识2.2 13位片偏移2.3 3位标识 3. DNS3.1 DNS原理3.2 DNS劫持或者污染 JavaEE & 网络原理补…

MongoDB 查询文档中使用文本选择器($text)

之前我们介绍过使用比较选择器、逻辑选择器、元素选择器、数组选择器查询文档,如果您需要进一步了解,可以参考: MongoDB 查询文档中使用比较选择器、逻辑选择器https://blog.csdn.net/m1729339749/article/details/129965699 MongoDB 查询文…

IHS安装ssl证书

1、向专业机构申请证书,或者使用openssl生成自签名证书,openssl生成证书参考以下步骤。 openssl生成证书参考https://blog.51cto.com/longlei/2120718 生成加密私钥 [rootlocalhost test]# openssl genrsa -out test.key 2048 Generating RSA private…

直线模组常见故障的解决方法

直线模组因其具有单体运动速度快、重复定位精度高、本体质量轻、占设备空间小、寿命长等特点,运用的范围一直在扩大,发展至今,已经被广泛应用到各种各样的设备当中。 在直线模组的使用过程中,或多或少都会出现一些问题&#xff0c…

DUBBO 3.x 兼容 invoke 调用

从DUBBO的2.7.22版本升级到了3.x的版本后,发现invoke失灵了 首先是启动报错,注释掉配置 dubbo.protocol.telnetinvoke后程序可运行,但是invoke失效。 通过对比源码 示例: tag-3.0.10 tag-2.7.22 发现3.0.2之后的版本都移除了i…

【网络编程】UDP简单实现翻译软件与网络聊天室

文章目录 一、引入二、翻译软件实现2.1 加载字典2.2 处理数据并传递给用户端2.3 客户端获取结果2.4 结果2.5 执行命名功能 三、网络聊天室实现3.1 管理用户3.2 发送消息3.3 多线程处理3.4 结果 四、源码 一、引入 在上一章【网络编程】demo版UDP网络服务器实现实现了客户端和服…

(1分钟了解)视觉惯性导航初始化方法综述

视觉惯性导航初始化方法综述 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 初始化相关的简介,在这里知道初始化方法可以分为联合初始化、非联合初始化和半联合初始化三种方法即可。 ​ 编辑切换为居中 添加图片注释&…

VIM学习笔记 正则表达式-(vimgrep/grep)

在UNIX问世的前一年,1969年,Ken Thompson将正则表达式整合入QED文本编辑器。在Linux文本编辑器ed中,如果你希望显示包含字母“re”的行时,需要使用命令g/re/p,而grep也因此得名。可以看作此操作的缩写:g (g…

ARM板上的蓝牙对讲功能

1)ARMRTL8723 或RTL8821 RTL8723是USB接口的邮票芯片,集成了wifi和BT。前面已经完成了wifi的处理,这次主要说一下蓝牙语音方面。 蓝牙功能,我们主要是使用Bluez5协议栈.结合alsa使用(pulseaudio也是可以的&#xff0c…

JVM学习(四)

1. JAVA IO/NIO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内 核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态&#xff0c…

Class 02 - R语言Rstudio的安装

Class 02 - R语言&Rstudio的安装 下载和安装R安装前准备下载R语言安装R语言开始使用R语言 下载和安装RStudio安装前准备下载RStudio安装RStudio开始使用RStudio如何编写代码 下载和安装R 在这个部分中,你将完成在计算机上下载和安装R语言程序。当安装完成后&am…

嫌视频背景杂乱或单调?如何去除视频杂乱背景

录制视频时,有时候视频背景会十分杂乱或单调,这会对用户的视觉体验和注意力产生负面影响。 背景杂乱或单调的场景可能会影响您的观感。这种情况通常发生在自然光线不足或拍摄环境不理想的情况下。如果您想改变视频的背景或者是去除视频杂乱的背景&#…

硬件I2C读写MPU6050代码

1、接线图 SDA接在B11,SCL接在B10 ,软件IIC的两个引脚可以任意更改的,因为都是开漏输出,硬件接在哪个引脚上,程序中就对应操作哪个引脚 但是硬件IIC,通信引脚是不可以任意指定的,查表,由于PB6、…

2023年Android开发者路线-第4部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第4部分 在上一篇博文中,我们讨论了现代 Android 开发的基本要素,包括 Fragments、…

2023年Android开发者路线-第3部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第3部分 在上一篇文章中,我们讨论了 Android 主要组件的重要元素,包括 Intents 和 …

【C++初阶】类与对象(中)之你必须掌握的三个重要默认成员函数 --- 构造函数 +析构函数 + 拷贝构造函数

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

chatgptH5源码开发

hatGPTH5源码开发需要以下步骤: 确定需求:在开发ChatGPTH5应用之前,需要明确用户的需求和目标,以便进行合理的设计和开发。 技术选型:选择适合的前端技术框架和工具,如React、Vue、Angular等&#…

Flink从入门到精通之-10容错机制

Flink从入门到精通之-10容错机制 流式数据连续不断地到来,无休无止;所以流处理程序也是持续运行的,并没有一个明确的结束退出时间。机器运行程序,996 起来当然比人要容易得多,不过希望“永远运行”也是不切实际的。因…

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

本文介绍了如何通过定义多个GPT角色,以自动化流水线的方式打造个人写作团队,让AI帮助我们完成文章写作、修改、SEO等所有流程。原文: How I Built WritingGPT, a Fully Automated AI Writing Team ChatGPT是AI内容创造领域的巨大飞跃,但当我们…