zoukankan      html  css  js  c++  java
  • Zookeeper学习

    一、工作机制

      zookeeper是一个基于观察者模式的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据发生变化,Zookeeper就负责通知已经在zookeeper上注册的那些观察者做出相应的反应。

      zookeeper=文件系统+通知机制

    二、特点

      1. zookeeper一个领导者,多个跟随者组成的集群。

      2. 集群中只要有半数以上的节点存活,zookeeper就能正常服务。

      3. 全局数据一致:每个Server保存一份相同的数据副本,client无论连接哪个Server,数据都是一致的。

      4. 更新请求顺序执行,来自同一个client的更新请求按其发送顺序依次执行。

      5. 实时性,在一定时间范围内,client能读到最新数据。

      6. 数据更新原子性,要么成功,要么失败。

    三、 数据结构

      1. zookeeper数据结构可以看做一棵树,每个节点称作一个znode。每个znode默认能够给存储1mb数据,每个znode都可以通过其路径唯一标识。

    四、 应用场景

      1. 统一命名服务

      2. 统一配置文件

      3. 统一集群管理

      4. 服务器动态上下线

      5. 软负载均衡

    五、zookeeper安装

      A. 准备

        1. 安装jdk

        2. 拷贝zookeeper安装包到linux下

        3. 解压到指定目录

      B、修改配置 

        1. 进入解压目录下conf目录,创建zoo.cfg文件

        2. 修改dataDir路径为解压目录+zkData

        3. 在解压目录下创建zkData

      C、启动

        1. 启动服务器 :bin/zkServer.sh start

        2. 停止服务器: bin/zkServer.sh stop

        3. 查看服务器状态:bin/zkServer.sh status

        4. 启动客户端:bin/zkCli.sh

        5. 关闭客户端: quit

    六、配置文件解析

      1. tickTime=2000 心跳间隔为2s

      2. initLimit=10 心跳帧为10帧

      3. syncLimit=5 同步帧为5帧

      4. clientPort=2181 客户端的端口号为2181

    七、内部原理

      A、选举机制

        1. 半数机制

          集群中半数以上机器存活,集群可用。所以zookeeper适合安装在奇数台服务器上。

        2. zookeeper虽然没有指定master和Slave,但是工作时有一个节点为leader,其它为follower,leader是通过内部产生的 

        3. 选举机制 

          每个节点创建先投票自己,如果不能称为leader,将票数转给id大的。

    八、节点类型

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

        1.持久化目录节点

        2. 持久化顺序编号目录节点

          客户端与zookeeper断开连接后,该节点依旧存在,只是zookeeper给该节点名称进行顺序编号

      B、短暂:客户端和服务端断开连接后,创建的节点自己删除。

        1.临时目录节点

        2. 临时顺序编号目录节点

    九、实战

      A、分布式安装部署

        1.在每台服务器上安装zookeeper

        2. 配置服务器编号

          在解压目录下zkData创建一个myid文件,编写编号

        3. 修改配置文件

          添加集群:server.A=B:C:D

          A:是一个数字,代表第几号服务器(myid里的值)

          B:这个服务器的IP地址

          C:这个服务器与集群中的leader服务器交换信息的端口(2888)

          D:万一集群中的leader服务器挂了,需要一个端口来重新进行选举,选出一个新的leader,而这个端口就是用来执行选举时服务器相互通信的端口(3888)

        4. 分别启动zookeeper并查看状态

      B、客户端命令行操作

        1. help:显示所有操作命令

        2. ls path [watch] 使用ls命令来查看当前znode中所包含的内容

        3. ls2 path [watch] 查看当前节点数据并能看到更新次数等数据

        4. create 普通创建 -s 含有序列 -e 临时(重启或者超时消失)

        5. get path [watch] 获得节点的值

        6. set 设置节点的具体的值

        7. stat 查看节点状态

        8. delete 删除节点

        9. rmr 递归删除节点 

        注意:一次监听只能生效一次

      C、Stat结构体

        1. czxid-创建节点的事务zxid

          每次修改Zookeeper状态都会收到一个zxid形式的时间戳,也就是zookeeper事务id。

          事务id是zookeeper中所有修改总的次序,每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。

        2. ctime-创建节点的毫秒数

        3. mzxid - 节点最后更新的事务zxid

        4. mtime - 最后更新的毫秒数

        5. pZxid - 最后更新的子节点

        6. cversion - 子节点变化号,子节点修改次数

        7. dataversion - 数据变化号

        8. aclVersion - 访问控制列表的变化号

        9. ephemeralOwner - 如果时临时节点,这个时znode拥有者的session_id,如果不是临时节点则是0

        10. dataLength - 节点的数据长度

        11. numChildren - 子节点数量

      D、监听器原理

        1. 首先要有一个main线程

        2. 在main线程中创建zookeeper客户端,这个时候就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listen)

        3. 通过connect线程将注册监听事件发送给zookeeper

        4. 在zookeeper的注册监听器列表中将注册的监听事件添加到列表中

        5. zookeeper监听到有数据或路径变化,就会将这个消息发送给Listener线程

      E、写数据流程

        1. client向zookeeper的Server1上写数据,发送一个写请求

        2. 如果Server1不是leader,那么Server1会把接受到的请求进一步转发给leader,因为每个zookeeper的Server里面有一个时leader。这个leader会将写请求广播给各个Server,各个Server写成功后会通知leader。

        3. 当大部分Server数据写成功了,那么就说明数据写成功了。

        4. leader会进一步通知client数据写写成功了。

  • 相关阅读:
    《The One!》团队作业4:基于原型的团队项目需求调研与分析
    《TheOne团队》团队作业三:团队项目原型设计与开发
    《The One 团队》第二次作业:团队项目选题
    《The One!团队》第一次作业:团队亮相
    实验十 团队作业6:团队项目系统设计改进与详细设计
    易校园——项目系统设计与数据库设计
    易校园--项目需求分析
    软工实践——团队上机作业
    团队编程第一次作业
    《发际线总是和我作队》第六次作业:团队项目系统设计改进与详细设计
  • 原文地址:https://www.cnblogs.com/DjanFey/p/11819200.html
Copyright © 2011-2022 走看看