一、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. python3 之 变量作用域详解

    作用域: 指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称: L:local,局部作用域,即函数中定义的变量: E: ...

  2. 【Luogu P1439】最长公共子序列(LCS)

    Luogu P1439 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; d ...

  3. Stream系列(二)Map方法使用

    Stream 将List 里面的对象转换为新的对象 EmployeeTestCase.java package com.example.demo; import lombok.Data; import ...

  4. 使用 cAdvisor 主机上的容器

    目录 前言 安装测试 安装 docker 安装docker-ce 启动 cAdvisor 容器 访问测试 prometheus 服务端配置 使用 promtool 检查配置文件 重新加载配置文件 前言 ...

  5. while(cin)?

    #include<iostream> #include<utility> using namespace std; int main() { int i; do { cout& ...

  6. AJAX与Django

    AJAX 什么是AJAX? AJAX不是JavaScript的规范,它的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求.提交任务之 ...

  7. rsync工具、rsync常用选项、以及rsync通过ssh同步 使用介绍

    第8周5月14日任务 课程内容: 10.28 rsync工具介绍10.29/10.30 rsync常用选项10.31 rsync通过ssh同步 10.28 rsync工具介绍 rsync是一个同步的工 ...

  8. python中字典数据类型常用操作

    创建字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: ...

  9. Android组合Windows环境下Frida的安装步骤

    Frida是什么     我觉得官网已经说得很清楚了.简单的说就是一款动态代码检测工具,可用于各种系统,这里的主要用途是动态检测Android代码,配合Windows系统环境使用.     Frida ...

  10. ubuntu部署.Net Core3.1(Nginx+pm2)

    前言 虽然.NetCore已经出来很久了,但是很多初学者还是不会在linux部署.所以写一篇初学者在ubuntu下部署Core的全过程,大佬请无视. 环境搭建 ubuntu18.04 NetCore3 ...