1. 简要概述

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的框架。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据,然后接受观察者的注册,一但这些数据的状态发生变化, Zookeeper就将负责通知已经在 Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/ Slave管理模式
Zookeeper=文件系统+通知机制

2. 特点

  1. Zookeeper:一个领导者( leader),多个跟随者( follower)组成的集群
  2. Leader负责进行投票的发起和决议,更新系统状态
  3. Follower用于接收客户请求并向客户端返回结果,在选举 Leader过程中参与投票
    4)集群中只要有半数以上节点存活, Zookeeper集群就能正常服务。
    5)全局数据一致:每个 serer保存一份相同的数据副本, client无论连接到哪个 serer,数据都是一致的。
    6)更新请求顺序进行,来自同一个 client的更新请求按其发送顺序依次执行
    7)数据更新原子性,一次数据更新要么成功,要么失敗。
    8)实时性,在一定时间范围内, client能读到最新数据。

3. 数据结构

Zookeeper数据模型的结枃与Unix文件系统很类似,整体上可以看作是一裸树,每个节点叫做一个 Znode,很显然 zookeeper集群自身推护了一套数据结构・这个存储结构是个树形结构,其上的每一个节点,我们称之为" znode",每一个 znode默认能够存儲IMB的数据,每个 Znode都可以通过其路径唯一标识

4. 应用场景

提供的服务包括:分布式消息同步和协调机制、服务器节点动态上下线、统一配置管理负载均衡、集群管理等
1)分布式环境下,配置文件管理和同步是一个常见问题
一个集群中,所有节点的配置信思是一致的,比如 Hadoop集群。
对配置文件修改后,希望能够快速同步到各个节点上。
2)配置管理可交由 Zookeeper实现。
可将配置信息写入 ZooKeeper上的一个 Znode.
各个节点监听这个 Znode。
一且 Znode中的数据被修改, Zookeeper将通知各个节点。

image.png

还有好多场景后续再研究补充吧

5. 下载安装

打开下面的地址
http://zookeeper.apache.org/releases.html
点击download

image.png

5.1 选择一个地址下载

image.png

5.2选一个版本点击会看到tar.gz

image.png

5.3 上传到我们的102机器

image.png

5.4 可以看到上传成功

[shaozhiqi@hadoop102 ~]$ cd /opt/software/
[shaozhiqi@hadoop102 software]$ ll
total
-rw-rw-r--. shaozhiqi shaozhiqi Jun : hadoop-3.1..tar.gz
-rw-rw-r--. shaozhiqi shaozhiqi Jun : jdk-8u211-linux-x64.tar.gz
-rw-rw-r--. shaozhiqi shaozhiqi Jun : spark-2.4.-bin-hadoop2..tgz
-rw-rw-r--. shaozhiqi shaozhiqi Jul : zookeeper-3.4..tar.gz
[shaozhiqi@hadoop102 software]$

5.5解压jar

[shaozhiqi@hadoop102 software]$ tar -zxvf zookeeper-3.4..tar.gz -C /opt/module/

进入目录修改配置

[shaozhiqi@hadoop102 zookeeper-3.4.]$ ll
total
drwxr-xr-x. shaozhiqi shaozhiqi Mar : bin //我们常用的命令
-rw-rw-r--. shaozhiqi shaozhiqi Mar : build.xml
drwxr-xr-x. shaozhiqi shaozhiqi Mar : conf //我们要配置配置文件
drwxr-xr-x. shaozhiqi shaozhiqi Mar : dist-maven
-rw-rw-r--. shaozhiqi shaozhiqi Mar : ivysettings.xml
-rw-rw-r--. shaozhiqi shaozhiqi Mar : ivy.xml
drwxr-xr-x. shaozhiqi shaozhiqi Mar : lib //依赖的jar
-rw-rw-r--. shaozhiqi shaozhiqi Mar : LICENSE.txt
-rw-rw-r--. shaozhiqi shaozhiqi Mar : NOTICE.txt
-rw-rw-r--. shaozhiqi shaozhiqi Mar : pom.xml
-rw-rw-r--. shaozhiqi shaozhiqi Mar : README.md
-rw-rw-r--. shaozhiqi shaozhiqi Mar : README_packaging.txt
drwxr-xr-x. shaozhiqi shaozhiqi Mar : src
-rw-rw-r--. shaozhiqi shaozhiqi Mar : zookeeper-3.4..jar
-rw-rw-r--. shaozhiqi shaozhiqi Mar : zookeeper-3.4..jar.asc
-rw-rw-r--. shaozhiqi shaozhiqi Mar : zookeeper-3.4..jar.md5
-rw-rw-r--. shaozhiqi shaozhiqi Mar : zookeeper-3.4..jar.sha1
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-client
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-contrib
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-docs
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-it
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-jute
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-recipes
drwxr-xr-x. shaozhiqi shaozhiqi Mar : zookeeper-server
[shaozhiqi@hadoop102 zookeeper-3.4.]$

5.6改名zoo_sample.cfg

[shaozhiqi@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg

修改文件存储的地址为我们的地址dataDir=/opt/module/zookeeper-3.4.14/zkdata
其他的先不改

[shaozhiqi@hadoop102 conf]$ vim zoo.cfg
# The number of milliseconds of each tick
tickTime=
# The number of ticks that the initial
# synchronization phase can take
initLimit=
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/module/zookeeper-3.4./zkdata
# the port at which the clients will connect
clientPort=
# the maximum number of client connections.

6. 单节点启动

6.1启动服务端:

[shaozhiqi@hadoop102 zookeeper-3.4.]$ cd bin/
[shaozhiqi@hadoop102 bin]$ pwd
/opt/module/zookeeper-3.4./bin
[shaozhiqi@hadoop102 bin]$ ll
total
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : README.txt
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkCleanup.sh
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkCli.cmd
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkCli.sh
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkEnv.cmd
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkEnv.sh
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkServer.cmd
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkServer.sh
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkTxnLogToolkit.cmd
-rwxr-xr-x. shaozhiqi shaozhiqi Mar : zkTxnLogToolkit.sh
[shaozhiqi@hadoop102 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[shaozhiqi@hadoop102 bin]$

验证是否启动成功:QuorumPeerMain

[shaozhiqi@hadoop102 bin]$ jps
Jps
QuorumPeerMain
[shaozhiqi@hadoop102 bin]$

6.2启动客户端,可以看到日志链接到了2181

[shaozhiqi@hadoop102 bin]$ ./zkCli.sh
Connecting to localhost:
-- ::, [myid:] - INFO [main:Environment@] - Client environment:zookeeper.version=3.4.-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on // : GMT

单节点可以启动,证明我们的zookeeper是好用的

7. 集群启动

停掉zookeeper服务端:

shaozhiqi@hadoop102 bin]$ ./zkServer.sh stop

7.1修改zoo.cfg配置文件

添加配置,2888代表leader的端口,3888是当2888挂了,3888替换
2,3,4标示集群模式下的myid里面的id号,根据下面的配置用来判断是那个server

[shaozhiqi@hadoop102 conf]$ vim zoo.cfg
server.=hadoop102::
server.=hadoop103::
server.=hadoop104::

7.2配置102的myid

[shaozhiqi@hadoop102 zookeeper-3.4.]$ cd zkdata/
[shaozhiqi@hadoop102 zkdata]$ ll
total
drwxrwxr-x. shaozhiqi shaozhiqi Jul : version-
[shaozhiqi@hadoop102 zkdata]$ vim myid
[shaozhiqi@hadoop102 zkdata]$ cat myid [shaozhiqi@hadoop102 zkdata]$

7.3同步我们的zookeeper到我们的103 104机器

[shaozhiqi@hadoop102 module]$ testxsync zookeeper-3.4./

修改103和104的myid

[shaozhiqi@hadoop103 zookeeper-3.4.]$ cd zkdata/
[shaozhiqi@hadoop103 zkdata]$ vim myid
[shaozhiqi@hadoop103 zkdata]$ cat myid [shaozhiqi@hadoop103 zkdata]$
[shaozhiqi@hadoop104 zkdata]$ vim myid
[shaozhiqi@hadoop104 zkdata]$ cat myid [shaozhiqi@hadoop104 zkdata]$

7.4启动集群

7.4.1 Zookeeper的选举机制

那么我们配置了三台机器,启动时他怎么选举leader呢个?
1)半数机制( Paxos协议):集群中半数以上机器存活,集群可用。所以zookeeper适合装在奇数位机器
2)Zookeeper虽然在配置文件中并没有指定 master和 slave。但是, zookeeper工作时是有一个节点为 leader.其他则为 follower. Leader是通过内部的选举机制临时产生的
3)以一个简单的例子来说明整个选举的过程,,假设有五台服务器组成的 zookeeper集群,它们的d从1-5,同时它们都是最新启动的也就是没有历史数据,在存放数据量这一点上,都是一样的,假设这些服务器依序启动,来看看发生什么。
leader产生说明
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是 LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果由于两者都没有历史数据,所以d 值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3,所以服务器1、2还是继铁保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的 leader,
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了
(5)服务器5启动,同个一样当小弟
按照这个理论我们的三台机器应该是103

7.4.2启动102

[shaozhiqi@hadoop102 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[shaozhiqi@hadoop102 bin]$

当值起了一个服务时查看状态,error ,服务数大于一半时才能提供服务

[shaozhiqi@hadoop102 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[shaozhiqi@hadoop102 bin]$

7.4.3启动103,查看状态发现103是leader

[shaozhiqi@hadoop103 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[shaozhiqi@hadoop103 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: leader
[shaozhiqi@hadoop103 bin]$

7.4.4启动104,查看104状态follower,所以103是leader

[shaozhiqi@hadoop104 zookeeper-3.4.]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[shaozhiqi@hadoop104 zookeeper-3.4.]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower
[shaozhiqi@hadoop104 zookeeper-3.4.]$

后面持续更新中~~~

zookeeper的下载安装和选举机制(zookeeper一)的更多相关文章

  1. java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解

    上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeepe ...

  2. 学习笔记:Zookeeper选举机制

    1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...

  3. ZooKeeper 的读写操作 & 选举机制

    0. 说明 记录 ZooKeeper 的读写操作和选举机制 1. ZooKeeper 的读写操作 读操作:所有 ZooKeeper 节点都可以提供读请求(包括 follower 和 leader ) ...

  4. Zookeeper中的watcher监听和leader选举机制

    watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...

  5. Zookeeper选举机制(转)

    源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...

  6. Zookeeper介绍及安装部署

    本节内容: Zookeeper介绍 Zookeeper特点 Zookeeper应用场景 用到了Zookeeper的一些系统 Zookeeper集群安装部署 一.Zookeeper介绍 是一个针对大型分 ...

  7. ZooKeeper集群与Leader选举

    说说你对ZooKeeper集群与Leader选举的理解?   ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选举.分 ...

  8. Zookeeper的概述、安装部署及选举机制

    一.Zookeeper概述 1.Zookeeper是Hadoop生态的管理者,它致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.Zookeeper的两大功能: (1)存储数据 (2)监听 ...

  9. 分布式协调组件Zookeeper之 选举机制与ZAB协议

    Zookeeper简介: Zookeeper是什么: Zookeeper 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...

随机推荐

  1. .Net Core 实现图片验证码

    记录自己的学习,参考了网上各位大佬的技术,往往在登录的时候需要使用到验证码来进行简单的一个校验,这边使用在.net core上进行生成图片二维码 思路很简单=> 生成一个随机数->保存到服 ...

  2. Linux - top命令监控列表的详细解析

    统计信息区(系统资源信息区) 前五行,即列表上方的五行 第一行:输出系统任务队列信息 18:46:38:系统当前时间 up 2days 1:54:系统开机后到现在的总运行时间 1 user:当前登录用 ...

  3. The instance of entity type 'manager' cannot be tracked because another instance with the same key value for {'id'} is already being tracked. When attaching existing entities, ensure that only one ent

    最近在用ASP.NET CORE时遇到一些问题,现记录下: 出现上述错误,即在更新实体数据时出现的错误 services.AddDbContext<StoreContext>(c => ...

  4. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  5. 太赞了!阿里几位工程师重写了 《Java 并发编程》

    事情是这样的,前些日子和得知一个读者在准备阿里的面试,我蛮有兴趣的跟他聊了起来,随着话题越来越深入,我发现这位读者有意思,他和几位阿里的工程师之前编写了一本 concurrent.redspider. ...

  6. 动态规划-Cherry Pickup

    2020-02-03 17:46:04 问题描述: 问题求解: 非常好的题目,和two thumb其实非常类似,但是还是有个一点区别,就是本题要求最后要到达(n - 1, n - 1),只有到达了(n ...

  7. ECMAScript 6 基础

    ECMAScript 6 基础 ECMAScript 6 简介 JavaScript 三大组成部分 ECMAScript DOM BOM ECMAScript 发展历史 https://develop ...

  8. MNIST数据集介绍

    大多数示例使用手写数字的MNIST数据集[^1].该数据集包含60,000个用于训练的示例和10,000个用于测试的示例.这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值 ...

  9. 十分钟一起学会Inception网络

    作者 | 荔枝boy 编辑 | 安可 一.Inception网络简介 二.Inception网络模块 三.Inception网络降低参数计算量 四.Inception网络减缓梯度消失现象 五.Ince ...

  10. R与金钱游戏:美股与ARIMA模型预测

    似乎突如其来,似乎合情合理,我们和巴菲特老先生一起亲见了一次,又一次,双一次,叒一次的美股熔断.身处历史的洪流,渺小的我们会不禁发问:那以后呢?还会有叕一次吗?于是就有了这篇记录:利用ARIMA模型来 ...