zoukankan      html  css  js  c++  java
  • zookeeper扫盲

    一、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

  • 相关阅读:
    ubuntu正确输入用户名密码后重复登录界面
    Spring第一个程序
    winrar解压spring出现“路径和文件名总长度必须不能超过 260 个字符!”错误的解决方法
    Spring属性装配之属性类型是另外一个被装载的类
    classpath、path、JAVA_HOME的作用及JAVA环境变量配置
    ubuntu基本命令篇15系统管理time命令中Real,User,Sys概念
    基于linux使用mysql二进制包安装mysql5.5
    shell循环语法
    db笔记本
    shell function
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/11967378.html
Copyright © 2011-2022 走看看