zoukankan      html  css  js  c++  java
  • Zookeeper学习(一)

    一、Zookeeper理解与选举机制

    ①Zookeeper理解

    概念:Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题

    特点:Zookeeper 本质上是一个分布式文件系统, 适合存放小文件,也可以理解为一个数据库。

    Zookeeper 中存储的其实是一个又一个 Znode, Znode 是 Zookeeper 中的节点。

    Znode 是有路径的, 例如 /data/host1 , /data/host2 , 这个路径也可以理解为是Znode 的 Name

    Znode 也可以携带数据, 例如说某个 Znode 的路径是 /data/host1 , 其值是一个字符串 "192.168.0.1"

    正因为 Znode 的特性, 所以 Zookeeper 可以对外提供出一个类似于文件系统的试图, 可以
    通过操作文件系统的方式操作 Zookeeper

    • 使用路径获取 Znode
    • 获取 Znode 携带的数据
    • 修改 Znode 携带的数据
    • 删除 Znode
    • 添加 Znode

    ②Zookeeper架构

    Zookeeper集群是一个基于主从架构的高可用集群

    每个服务器承担如下三种角色中的一种
    1.Leader 一个Zookeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各
    Follwer及Observer间的心跳。所有的写操作必须要通过Leader完成再由Leader将写操作广
    播给其它服务器。
    2.Follower 一个Zookeeper集群可能同时存在多个Follower,它会响应Leader的心跳。
    Follower可直接处理并返回客户端的读请求,同时会将写请求转发给Leader处理,并且负
    责在Leader处理写请求时对请求进行投票。
    3.Observer 角色与Follower类似,但是无投票权。

     

    ③Zookeeper的选举机制

     1.服务器启动时期的Leader选举

    进行leader选举至少两台机器,一般都为奇数个机器,选举过程如下:

    ①每个Server发起投票

    ②接收来自各个服务器的投票

    ③处理投票:

    • 优先检查ZXID。ZXID比较大的服务器优先作为Leader。
    • 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。

    对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较两者的
    ZXID,均为0,再比较myid,此时Server2的myid最大,于是更新自己的投票为(2, 0),然后重
    新投票,对于Server2而言,其无须更新自己的投票,只是再次向集群中所有机器发出上一次
    投票信息即可。

    统计投票。

    每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于Server1、Server2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出Leader。

    ⑤改变服务器状态

    二、Zookeeper的Shell 客户端操作

    首先进入shell客户端,有两种方式:

    ①在bin文件夹下:zkCli.sh -server hadoop101:2181

    ②在bin文件夹下:zkCli.sh

    正式操作:

    列出path下的所有Znode

    ls /

    创建永久结点

    create /hello world

    /hello为路径  world为携带的数据

     

    创建临时节点

    create -e /tmp world

     永久节点不会随会话结束而消失,而临时节点会随着会话结束而消失

    我们结束会话后,再次进入发现tmp目录已经消失了

     

    创建永久序列化节点

    create -s /hello2 world

     

    创建临时序列化节点

    create -e -s /tmp world

     

    创建子节点(注意:只能给永久性节点创造子节点,临时性节点不可创造子节点)

    create /hello/aaa world

     

    修改节点数据

    set /hello xxx

     

     

    删除节点,如果要删除的节点有子节点,则不能删除

    delete /hello

     

    删除节点,即使有子节点也可删除

    rmr /hello2

     

    列出历史记录

    history

     

     

  • 相关阅读:
    HDOJ1003 MaxSum【逆推】
    HDOJ1698 Just a hook【线段树成段更新lazy标志】武科大ACM暑期集训队选拔赛4题
    HDOJ1102 Constructing Roads【最小生成树】武科大ACM暑期集训队选拔赛1题
    POJ2828 Buy Tickets【线段树,逆序遍历】
    HDOJ1215 ( 七夕节 )【居然还可以这么解~】
    HDOJ1089HDOJ1096【格式练习】
    HDOJ1233 ( 还是畅通工程 ) 【最小生成树,kruscal】
    HDOJ1035 ( Robot Motion ) 【递归】
    POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】
    HDOJ1216 Assistance Required【打表】武科大ACM暑期集训队选拔赛7题
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/13467114.html
Copyright © 2011-2022 走看看