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 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...
随机推荐
- Netty源码分析一<序一Unix网络I/O模型简介>
Unix网络 I/O 模型 我们都知道,为了操作系统的安全性考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.以下 ...
- 懂一点Python系列——快速入门
本文面相有 一定编程基础 的朋友学习,所以略过了 环境安装.IDE 搭建 等一系列简单繁琐的事情. 一.Python 简介 Python 英文原意为 "蟒蛇",直到 1989 年荷 ...
- 【Deep Learning读书笔记】深度学习中的概率论
本文首发自公众号:RAIS,期待你的关注. 前言 本系列文章为 <Deep Learning> 读书笔记,可以参看原书一起阅读,效果更佳. 概率论 机器学习中,往往需要大量处理不确定量,或 ...
- django中的缓存以及跨域
django中的缓存 先来了解以下问题
- vue one one
目录 Vue 渐进式 JavaScript 框架 一.走进Vue 1.what -- 什么是Vue 2.why -- 为什么要学习Vue 3.special -- 特点 4.how -- 如何使用Vu ...
- Java并发编程之set集合的线程安全类你知道吗
Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗? 在Java中set集合是 本篇是<凯哥(凯哥Java:kagejava)并发编程学习> ...
- 16. nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auditUnitName"
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver:handleHttpMessageNotRead ...
- WordPress 迁移站点更换域名为新域名
使用 wp-cli 工具搜索替换域名的方式更换 WordPress 域名 wp-cli 是一个命令行工具,可以让我们通过命令行安装.更新 WordPress,对 WordPress 执行一些批量操作, ...
- Swagger2 初始用
1.结合Spring-Boot 引入 pom 依赖 <dependency> <groupId>io.springfox</groupId> <artifa ...
- Tail Call
一.什么是尾调用 尾调用(Tail Call)是函数式编程的一个重要概念. 一个函数里的最后一个动作是返回一个函数的调用结果,用简单的一句话描述就是"在函数的最后一步调用函数". ...