ZooKeeper仲裁机制

  • 概述
    • 仲裁
      • 深入分析节点的数量问题
  • 总结

概述

zk服务器运行模式分成两种:

  • 独立模式
  • 仲裁模式
    如果是用独立模式(standalone),则zk的状态是无法进行复制的,这才生产环境中,会造成一定的风险,事实上,我们确实有这种情况存在,这源于初期架构的思考和公司经济的问题。而在仲裁(quorun)模式下,则是我们当前流行的分布式集群,我们称之为集合。是用仲裁,不仅可以进行状态的复制,也可以同时服务于客户端的请求。

仲裁

采用仲裁方式的复制集群中,由于具备高可用的镜像复写功能,如果客户端需要等待每个服务器完成数据的螺钉后在继续,则延时的问题会变得比较突出,要知道,延时,在大流量的访问中,是不可接收的,但不代表能消灭延时。
此时,在ZK的设计思路中,为了规避这个问题,则衍生除了法定人数的思想,即我们只需要保证我们的集群中,由若干算法模式下实现的人数能完成对应的信息落地之后,则认为客户端可以继续下一波的操作,而不是等到所有集群完全落实才继续下去。例如,我们由5个zk服务器,而法定人数为3人,则我们只需要确保其中的3台服务器保存了对应的数据,客户端就可以继续,而其他两个服务器在正常的中状态下,最终也是能获取到数据,并保存下来

这就是为什么我们要求zk的部署,起码是奇数台的其中一个原因。
请注意,假设我们由f个服务器,则允许其崩溃的数据必须小于服务器数量的一半,即5台,只能允许2台崩溃。

深入分析节点的数量问题

查阅了一些书籍和文档,其实并没有过多的阐述为什么,服务器的数量必须在奇数台或者在偶数台的情况下,为什么不行,事实上并不是认为偶数台不允许部署,而是,作为偶数台的部署,风险性会更大而已
为了避免脑裂,我们在上述的例子中,规定法定人数为3,实际上是至少为3,即集合中的5个服务器的多数原则,为了正常工作,集合中则必须至少有3台服务器是能正常运营的。为了能确保一个请求对状态的更新是否成功,则必须保证以上的3台能确认已经完成了数据复制操作。一次,如果要保证集合可以正常工作,对任何更新操作的完成,我们只好要有1个有效的服务器来保存更新的副本(至少在一个节点上合理的法定人数存在交集)。
假设集合中只有4台服务器,那么多数原则对应的的数量为3个服务器,但是,这集群中只允许1个服务器崩溃,因为两个服务器崩溃就会导致系统丧失多数原则的状态,因此,在4个服务器的情况下,我们仅能允许一个服务器崩溃,而法定人数现在却更大,意味着,对每个请求,我们需要更多的确认操作,底线是,我们需要争取奇数个服务器。

总结

不管出于何种原因,由于zk的重要性,在项目中,一旦使用了zk,建议是用仲裁的机制进行运作,单点故障的情形,往往带来的业务的深度影响。

ZooKeeper的实践(一):ZooKeeper仲裁机制相关推荐

  1. Ⅵ:zookeeper的Watcher事件监听机制

    2021最新zookeeper系列 ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤ ...

  2. ZooKeeper Dynamic Reconfiguration(ZooKeeper 动态配置重构)

    Overview 概览 Prior to the 3.5.0 release, the membership and all other configuration parameters of Zoo ...

  3. ZooKeeper学习第一期---Zookeeper简单介绍(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技 ...

  4. Zookeeper概念学习系列之zookeeper是什么?

    1. Zookeeper是Hadoop的分布式协调服务. 2. 分布式应用程序可以基于它,来实现同步服务,配置维护和命名服务等. 3. zookeeper可以保证数据在zookeeper集群之间的数据 ...

  5. Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态

    1.Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1.Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower (Observer ...

  6. zookeeper专题:使用zookeeper实现分布式锁

    文章目录 1. zookeeper为什么可以做分布式锁 ? 2. zookeeper实现非公平锁 3. zookeeper实现公平锁 4. zookeeper实现读写锁(共享锁) 5. Curator ...

  7. zookeeper专题:使用zookeeper客户端实现动态监听节点并获取数据

    文章目录 1. zookeeper原生客户端 2. Curator客户端 1. zookeeper原生客户端 zookeeper原生客户端就是zookeeper官方自带的客户端,作为代码与zk服务器交 ...

  8. 【转】ZooKeeper学习第二期--Zookeeper命令操作

    一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...

  9. ZooKeeper学习第一期---Zookeeper简单介绍

    引用:http://www.cnblogs.com/sunddenly/p/4033574.html 加入了一部分个人理解 一.传统分布式系统(主备) 如图1.1备节点定时ping主节点,返回Ack. ...

最新文章

  1. spring手动控制事务开启_Spring 基于AOP的事务控制
  2. STM32 调试脚上电默认电平
  3. 2021-02-03-延长一天时间的有效方法
  4. java base64 加解密_java Base64加解密
  5. JavaScript基础知识指南-思维导图
  6. 中标麒麟yum源地址
  7. 一个有趣的模型组合预测模型
  8. android studio 扣费白屏,详解一次Vue低版本安卓白屏问题的解决过程
  9. Java:缓冲流、转换流、序列化流
  10. 物尽其用,数码相机兼职摄像头!
  11. 怎么抠图最简单?教你一行Python代码去除照片背景
  12. 数据结构与算法(C语言版)---魔王语言
  13. 看一遍就理解:动态规划详解
  14. python可以爬什么山_Python爬取13个旅游城市,告诉你五一大家最爱去哪玩?
  15. 什么叫云原生应用?| 技术头条
  16. 列举一些站长工具中常用的SEO工具和百度指数
  17. 软件项目管理知识点整理
  18. css效果(两边渐渐消失的线、边框上下渐变)
  19. 超51亿的移动用户,TensorFlow移动端方兴未艾
  20. 递归算法——八皇后问题 python

热门文章

  1. c语言鼠标可作用位置,用 C语言控制鼠标翻页,一共三页
  2. # 对象的属性把其他自定义类作为属性**Dog宠物狗**
  3. 设计模式,看这一篇就够了
  4. php前台调用后台方法,JavaScript_JavaScript调用后台的三种方法实例,方法一:直接使用%=%调 - phpStudy...
  5. 在线教学1对1教学、1对1课堂应用场景的完整教程
  6. 可调电容器调谐调频原理介绍
  7. 共码未来 | 共建多元化生态,拥抱更有温度的开发者社区
  8. 系统架构设计师软件生命周期_云架构师生命中的一天
  9. 基于TP3.2的发送邮箱做找回密码
  10. OnlyOffice源码编译arm架构指南