一、zookeeper概述

a、zookeeper是一个开源的分布式的项目,为分布式业务提供协调服务的apache顶级项目

那什么是分布式的呢,通俗的说就是多个机器可以同时去处理一件事情

b、zookeeper相当于大数据生态体系的润滑剂,保存各个组件的配置文件;zoo是什么意思,动物园的意思,而大数据各个组件的标志都是一些动物,所以zookeeper又被称为动物园的管理员,可以管理大数据生态体系的很多组件

c、zookeeper的本质就是:文件系统+通知机制

二、工作机制

a、zk的设计是基于观察者模式设计的分布式服务管理框架,他负责存储和管理大家都关心的数据,然后接受观察者注册

b、一旦这些数据发生变化,zk就将负责通知已经在zk上注册的那些观察者,观察者会通过会根据相应的变化做出相应的行为

什么是观察者模式,通俗的讲就是一个人在干活,另外一个人在监视,就比如我们现在在这里培训,摄像头就是一个观察者

工作机制如何

三、zoopeeper特点

四、数据结构

zookeeper的数据模型结构和unix的文件系统类似,整体上可以看做是一个树,每个节点称为一个ZNode,每一个ZNode默认只只能够存储1MB的数据,每个ZNode都可以通过路径唯一标示

五、应用场景

zk可以提供如下服务,统一命名服务,统一配置管理,统一集群管理,服务器节点动态上下线,软负载均衡

a、统一命名服务

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

b、统一配置管理

在分布式环境中,配置同步是非常常见的,这里监听模式就体现的非常的明显

一般在一个分布式集群中,所有节点的配置是一致的,比如kafka集群 ;而且一旦配置更改之后,所有的节点都可以快速同步到最新的配置

我们可以将配置文件写在一个ZNode中,然后集群中所有的节点都监控这个节点,一旦配置节点内容发生变化,则立刻更新本地配置

c、统一集群管理

在分布式环境中,实时掌握每个节点的状态是非常有必要的。我们可以将每个节点都注册到一个节点中,只要监听这个节点的变化就可以获取节点的的状态变化

首先每个服务器启动后,到zk上创建一个临时节点目录

然后client去获取当前在线的服务器的列表,同时监听目录信息

如果一个服务器节点故障,那么该节点创建的临时节点目录被删除

客户端收到通知,获取最新的在线列表服务器

六、zk安装

七、选举机制

a、半数机制,集群中半数节点存活,则集群可用,所以zk集群的节点数都为奇数个

b、zk在配置文件没有指定Leader和Follower,但是在实际工作中是有一个Leader和多Follower的,Leader是临时选举产生的

c、假设有5个服务器组成zk集群,myid分别为1,2,3,4,5,同时他们都是最新启动的,假设他们是按照顺序启动的,节点1启动成功,发现没有Leader,那么他投自己一票;节点2启动成功后,发现集群中没有Leader,且自己的myid为2,节点1的myid为1,自己的myid较大,那么他投自己一票,这个时候节点1发现节点的2的myid比自己大,那么节点1就会投节点2一票,这个时候节点2有2票,但是还没有过半数;这个时候节点3启动成功,他的myid是3,节点3发现集群中没有Leader,那么他投自己一票,节点1和节点2发现节点3的myid最大,那么他们会投节点3一票,此时节点3有三票,超过半数,那么节点3就是Leader,这个时候节点4和节点5启动,虽然他们的myid较大,但是也不会在进行选举了

八、zk的节点类型

a、持久型:客户端和服务端断开连接后,创建的节点不会删除

b、持久型顺序节点:客户端和服务端断开连接后,创建的节点不会删除,只是在节点名称上会加上单调递增的序号

c、短暂型:客户端和服务端断开连接后,创建的节点会被删除

d、短暂型顺序节点:客户端和服务端断开连接后,创建的节点会被删除,只是在节点名称上会加上单调递增的序号

九、节点操作

a、创建一个持久节点

b、查看节点内容

c、创建一个持久有序号的节点

c、创建一个短暂的节点

d、修改节点内容

e、监听节点的内容

如果节点内容发生变化,则会有监听信息

接听只是一次有效,第二次修改监听就没有效果了,需要重新监听

f、删除一个节点

十、zk写数据流程

a、client向zk集群发现写数据请求

b、如果该zk节点不是Leader,则这个请求会被转发给Leader,Leader会把请求在整个集群广播

c、节点手动请求后会通知Leader,如果半数以上的节点写入成功,则认为写入成功

d、Leader手动写入成功的返回后,则会通知Client,这次写入成功

十一、zk读数据流程

读流程相对节点,每个节点收到读请求,就会直接返回,不需要通过Leader

zookeeper扫盲的更多相关文章

  1. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

  2. Zookeeper 扫盲

    Zookeeper 扫盲 :disappointed_relieved: 配置文件详解: tickTime:基本事件单元,以毫秒为单位,这个时间作为 Zookeeper 服务器之间或客户端之间维持心跳 ...

  3. SpringCloud笔记一:扫盲

    目录 前言 什么是微服务? 微服务的优缺点是什么? 微服务之间是如何通讯的? SpringCloud和Dubbo有哪些区别? SpringCloud和SpringBoot的关系? 什么是服务熔断?什么 ...

  4. kafka扫盲笔记,实战入门

    Kafka作为大数据时代的产物,自有其生存之道.让我们跟随扫盲班的培训,进行大致了解与使用kafka吧.(平时工作有使用不代表就知道kafka了哟) 1. kafka介绍 1.1. 拥有的能力(能干什 ...

  5. RocketMQ扫盲篇

    本篇博客主要参考: <浅入浅出>-RocketMQ 敖丙 APACHE-RocketMQ Gitee RocketMQ官方文档 RocketMQ 实战与进阶 GitChat 又是好久没有写 ...

  6. 消息队列扫盲(RocketMQ 入门)

    消息队列扫盲 消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧? 所以问题并不是消息队列是什么,而是 消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带 ...

  7. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  8. [译]ZOOKEEPER RECIPES-Leader Election

    选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...

  9. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

随机推荐

  1. windows系统与SQL SERVER 2008数据库服务性能监控分析简要

    软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...

  2. 2019-10-9:渗透测试,基础学习,php文件上传,mysql基础

    header("Content-Type:text/html;charst="utf-8")设置头部信息,解决编码问题setcookie("loginStrin ...

  3. 30L,17L,13L容器分油,python递归,深度优先算法

    伪代码: 全部代码: a=[] b=[] def f(x,y,z): b.append([x,y,z]) if x==15 and y==15: print(x,y,z) i=0; for x in ...

  4. JAVA中字符串常见操作

    String str1="hello,world";String str2="Hello,World"; 1.字符串的比较:例,System.out.print ...

  5. Flask入门学习——自定义一个url转换器

          我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vai ...

  6. Prometheus PromQL 基础

    目录 时序 4 种类型 Counter Gauge Histogram Summary Histogram vs Summary 操作符 时序 4 种类型 Prometheus 时序数据分为 Coun ...

  7. 检测是否引入jQuery

    if (typeof jQuery != 'undefined') { document.write("jquery已经被加载"); } else { document.write ...

  8. DRF Django REST framework APIView(一)

    什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ...

  9. 使用Spring Data JPA的Specification构建数据库查询

    Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...

  10. 2019CCPC秦皇岛 E题 Escape(网络流)

    Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...