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

Zookeeper学习(一)的更多相关文章

  1. zookeeper学习(上)

    zookeeper学习(上) 在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性,因此对zookeeper的学习是非常必要的.本篇博文主要是讲解zookeeper的安装和zookee ...

  2. ZooKeeper 学习笔记

    ZooKeeper学习笔记 1.   zookeeper基本概念 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和Habase的重要组件,是为分布式应用提供一致性服 ...

  3. 【分布式】ZooKeeper学习之一:安装及命令行使用

    ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...

  4. [转]ZooKeeper学习第一期---Zookeeper简单介绍

    ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...

  5. zookeeper 学习资料

    zookeeper 学习资料 学习资料 网址 Zookeeper 教程(菜鸟教程) https://www.w3cschool.cn/zookeeper/

  6. Zookeeper学习文章目录1

    目录:参考文章如下 1.ZooKeeper学习第一期---Zookeeper简单介绍 2. ZooKeeper学习第二期--ZooKeeper安装配置 3. ZooKeeper学习第三期---Zook ...

  7. zookeeper学习(零)_安装与启动

    zookeeper学习(零)_安装与启动 最近换了新的电脑,终于买了梦寐以求的macbook.最近也换了新的公司,公司技术栈用到了zookeeper.当然自己也要安装学习下.省的渣渣的我,被鄙视就麻烦 ...

  8. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  9. ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...

  10. Zookeeper学习笔记(下)

    这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...

随机推荐

  1. Lua-源码-字符串的resize函数-luaS_resize

    // 这里需要问一下:upval和一般的对象有什么区别?为什么要单独一个函数来处理? void luaC_linkupval (lua_State *L, UpVal *uv) { global_St ...

  2. C#-CLR note - 26线程

    开篇 async/wait的使用 static async Task Main(string[] args) { Console.WriteLine("start-- "); va ...

  3. MySQL索引——总结篇

    MySQL索引 MySQL索引 数据库的三范式,反模式 零碎知识 索引 索引原理 B Tree索引 B+Tree索引 B Tree 与 B+Tree的比较 聚集索引和辅助索引 聚集索引的注意事项 索引 ...

  4. Ethical Hacking - NETWORK PENETRATION TESTING(21)

    MITM - Code Injection Inject javascript or HTML code into pages. Code gets executed on target machin ...

  5. Android调用摄像机拍照(只能拍一张,第二张自动替换)

    这两天我玩了玩几天没动的Android,脑子里冒出一个注意,想用Android调用摄像机(偷拍)拍照,然后存下来,在网上百度一下就有很多人说,我也试了试,7.0以下非常轻松就成功了,因为7.0一下不用 ...

  6. ztree : 增删改功能demo与自定义DOM功能demo的结合

    最近有个项目要用ztree,需要用ztree自带的功能(增删改),也需要自定义DOM的功能(置顶). ztree的demo里有增删改的demo,也有自定义DOM的demo,但没有两者结合的. 所以我把 ...

  7. Onedrive分享型网盘搭建 - OneManager

    注册账号 部署OneManager 注册完账号后打开网址:https://heroku.com/deploy?template=https://github.com/qkqpttgf/OneManag ...

  8. 使用ImpromptuInterface反射库方便的创建自定义DfaGraphWriter

    在本文中,我为创建的自定义的DfaGraphWriter实现奠定了基础.DfaGraphWriter是公开的,因此您可以如上一篇文章中所示在应用程序中使用它,但它使用的所有类均已标记为internal ...

  9. Java中goto标签的使用

    编写此文仅为以后可以复习. 最近在自学Java核心技术(很好的书,推荐!!),也是第一次从上面了解了goto,或许只是浅层了解. 错误之处希望大佬们给予批评与建议!!谢谢!!! Java核心技术中就提 ...

  10. Git Push提示没有权限

    中途协助别人开发的一个小项目, 我已经是该项目的Developer, 可是提交代码依然提示无权限 这是由于我是在master上直接提交的, 而GitLab默认是保护master分支的, push只对M ...