zoukankan      html  css  js  c++  java
  • ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)——概述

    1. 概述

    Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。zookeeper从设计模式的角度来理解:是一个基于观察者设计模式的分布式服务管理框架,她负责存储和观察大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化,zookeeper就将负责通知已经在zookeepr上注册的那些观察者做出相应的反应。

    2. zookeeper的特点

    1)Zookeeper:它是一个由一个leader,多个follower组成的集群。;

    2)集群中只要由半数以上的节点存活,zookeeper就能够正常工作;

    3)全局数据一致性:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,拿到的数据都是一致的;

    4)更新请求顺序进行,来自同一个client的更新请求按照其发送顺序依次进行;

    5)数据更新原子性,一次数据要么更新成功,要么失败;

    6)实时性:在一定的时间范围内,Client能够读到最新的数据。

    3. 数据结构

    zookeeper的数据模型结构与Linux的文件系统的结构非常类似,整体上可以看作是一个树的结构,每个节点成为一个znode。每一个znode默认能够存储1MB的数据,每个znode都可以通过其路径唯一标识。

    就像Linux的文件系统一样,我们能够自由的增加删除znode也可以在一个znode下增加删除子节点,注意哦,znode是可以存储数据的。具体操作已在其他的随笔中有记录了。

    ### 4. zookeeper的应用场景

    zookeeper提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等等~~

    1)统一命名服务:在分布式的环境下,经常需要对应用/服务进行统一的命名服务,便于识别。例如:IP地址不容易记住,而域名就比较好记了。

    2)统一配置管理:

    (1)分布式环境下,配置文件同步非常常见:

    • 一般要求一个集群中,所有的节点配置信息一致,比如kafka集群;
    • 对于配置文件修改之后,希望能够快速同步到集群的各个节点上去;

    (2)配置管理可以交给zookeeper实现:

    • 可以将配置信息 写入zookeeper的一个znode

    • 各个客户端监听这个znode

    • 一旦znode中的数据被修改,zookeeper将通知各个客户端服务器。

    3)统一集群管理

    (1)分布式环境中,实时掌握每个节点的状态是必要的,可以根据节点的状态做出一些调整

    (2)zookeeper可以实时的监控节点的状态变化:

    • 可以将节点信息写入zookeeper的一个znode
    • 简体这个znode可以获取它的实时变化

    4)服务器动态上下线

    5. Zookeeper中的配置文件zoo.cfg中参数

    1).tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
    Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
    它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
    2).initLimit =10:LF初始通信时限
    集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
    3).syncLimit =5:LF同步通信时限
    集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
    4).dataDir:数据文件目录+数据持久化路径
    主要用于保存Zookeeper中的数据。
    5).clientPort =2181:客户端连接端口
    监听客户端连接的端口。

  • 相关阅读:
    [leedcode 104] Maximum Depth of Binary Tree
    [leedcode 103] Binary Tree Zigzag Level Order Traversal
    [leedcode 102] Binary Tree Level Order Traversal
    [leedcode 101] Symmetric Tree
    [leedcode 100] Same Tree
    [leedcode 99] Recover Binary Search Tree
    深入理解java虚拟机---内存分配策略(十三)
    jmeter4.0 源码编译 二次开发
    jmeter源码导入eclipse并执行
    深入理解java虚拟机---垃圾回收(十一)
  • 原文地址:https://www.cnblogs.com/simon-1024/p/11866527.html
Copyright © 2011-2022 走看看