一、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. IT人该如何未雨绸缪,不断提升自己的竞争力?同时尽量避免风险?

    人会慢慢变老,变老后精力,记忆力乃至身体会慢慢变差,这是无法逆转的自然规律.随之会产生的是对中年危机的忧虑乃至恐惧,比如担心能力精力不及年轻人,从而导致收入锐减乃至失业. 对此我有如下三点不解.第一, ...

  2. wordpress开源小程序

    wordpress多端开源小程序正式发布了,目前支持微信/QQ/百度/今日头条. 目前我们的开源小程序,已经建立了微信QQ交流群,需要的可以加下,微信添加hackdex(备注开源拉你入群),QQ群:7 ...

  3. setBounds方法,与setLayout(null)

    首先把相关容器的布局方式设为 setLayout(null); 然后调用组件的  setBounds() 方法 设置button的位置为(100,100) 长宽分别为 60,25 jButton.se ...

  4. Oracle SQL command slash

    We know that there is "commit" in oracle to submit all data in the session and used very c ...

  5. 一个有意义的Day类

    早晨去单位的路上听到电台里在说“Everyday is a new chance to change your life”,正好最近在学Python类的使用方法,于是我编了一个关于Day的类,以供参考 ...

  6. Android Native Binder,在Native层与App交互数据

    Binder底层是基于C实现的,因此可以作为Native进程与App层交互数据的渠道.其应用场景为:Native Service.Hal驱动设置.应用层JNI服务等. Android 4.4引入SEA ...

  7. 大型情感剧集Selenium:9_selenium配合Pillow完成浏览器局部截图

    网页截图 上次提到了selenium的四种截图方法,最终截图了整张网页.但很多时候,我们仅仅需要截图部分的内容.比如截取某个关键信息,或者现在已经不常见的截图验证码(现在都是各种按规则点击-).那么我 ...

  8. 转:ETL讲解(很详细!!!)

    ETL讲解(很详细!!!) ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要 ...

  9. 上手spring boot项目(一)之如何在controller类中返回到页面

    题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些 ...

  10. 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)

    class A { public String show(D obj) { // func1 return ("A and D"); } public String show(A ...