zookeeper的下载安装和选举机制(zookeeper一)
1. 简要概述
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的框架。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据,然后接受观察者的注册,一但这些数据的状态发生变化, Zookeeper就将负责通知已经在 Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/ Slave管理模式
Zookeeper=文件系统+通知机制
2. 特点
- Zookeeper:一个领导者( leader),多个跟随者( follower)组成的集群
- Leader负责进行投票的发起和决议,更新系统状态
- 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将通知各个节点。

还有好多场景后续再研究补充吧
5. 下载安装
打开下面的地址
http://zookeeper.apache.org/releases.html
点击download

5.1 选择一个地址下载

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

5.3 上传到我们的102机器

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一)的更多相关文章
- java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解
上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeepe ...
- 学习笔记:Zookeeper选举机制
1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...
- ZooKeeper 的读写操作 & 选举机制
0. 说明 记录 ZooKeeper 的读写操作和选举机制 1. ZooKeeper 的读写操作 读操作:所有 ZooKeeper 节点都可以提供读请求(包括 follower 和 leader ) ...
- Zookeeper中的watcher监听和leader选举机制
watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...
- Zookeeper选举机制(转)
源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...
- Zookeeper介绍及安装部署
本节内容: Zookeeper介绍 Zookeeper特点 Zookeeper应用场景 用到了Zookeeper的一些系统 Zookeeper集群安装部署 一.Zookeeper介绍 是一个针对大型分 ...
- ZooKeeper集群与Leader选举
说说你对ZooKeeper集群与Leader选举的理解? ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选举.分 ...
- Zookeeper的概述、安装部署及选举机制
一.Zookeeper概述 1.Zookeeper是Hadoop生态的管理者,它致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.Zookeeper的两大功能: (1)存储数据 (2)监听 ...
- 分布式协调组件Zookeeper之 选举机制与ZAB协议
Zookeeper简介: Zookeeper是什么: Zookeeper 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...
随机推荐
- 计算广告中的CPM和eCPM
计算广告中的CPM和eCPM CPM和eCPM分别是什么? CPM(Cost per Mille ) : 千次展示付费.是针对广告主说的,你要花多少钱,购买一千次广告展示的机会.类似的还有CPC (C ...
- 第三届上海市大学生网络安全大赛 流量分析 WriteUp
题目链接: https://pan.baidu.com/s/1Utfq8W-NS4AfI0xG-HqSbA 提取码: 9wqs 解题思路: 打开流量包后,按照协议进行分类,发现了存在以下几种协议类型: ...
- VS2019 C++动态链接库的创建使用(4) - C语言客户端
前面提到过C++具有函数重载功能,所以引出的函数名会有变化,即名称改编,如果是C语言编写的客户端则无法正确识别. 处理方法: ①只需在宏定义中间增加 extern "C",但这种使 ...
- settings源码
自定义settings配置 创建python项目 settings.py NAME = '我是暴露给用户的自定义配置' __init__.py import os import importlib f ...
- 【Vulnhub练习】Tr0ll 1
下载: https://www.vulnhub.com/entry/tr0ll-1,100/#download 说明: Tr0ll的灵感来自OSCP实验室中不断摇曳的机器. 目标很简单,获得根目录并从 ...
- 你需要了解的 HTTP Status Code
你需要了解的 HTTP Status Code Intro 现在前后端分离的开发模式越来越流行,后端负责开发对应的 API,前端只需要 关注前端页面的数据展示和前端逻辑即可. 对于前后端分离这种开发模 ...
- sqoop面试题
1.1 Sqoop 在工作中的定位是会用就行1.1.1 Sqoop导入数据到hdfs中的参数 /opt/module/sqoop/bin/sqoop import \ --connect \ # 特殊 ...
- TensorFlow系列专题(八):七步带你实现RNN循环神经网络小示例
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! [前言]:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节 ...
- Tainted canvases may not be exported的问题解决
项目里使用到用canvas生成海报,在toDataURL报了这个错误Tainted canvases may not be exported. 原因就在于使用了跨域的图片,所以说是被污染的画布.解决方 ...
- 展示html/javascript/css------Live-Server
Live-server简介 这是一款带有热加载功能的小型开发服务器.用它来展示你的HTML / JavaScript / CSS,但不能用于部署最终的网站. 官网地址:https://www.npmj ...