zookeeper原理与安装
zookeeper是一个高可用性,高性能的协调服务
解决哪些问题
在分布式应用中,经常会出现部分失败的情况,即当节点间传递消息的时候由于网络或者接收者进程死掉等原因,发送者无法知道接收者是否收到消息。
由于部分失败是分布式系统固有的特征因此zookeeper并不能避免部分失败,但是它可以帮你在部分失败的时候进行正确处理
为了解决这个问题zookeeper具有以下特征:
1:zookeeper提供丰富的构件(building block)来实现很多协调数据结构和协议
2:访问原子性,客户端要么读到所有数据,要么读取失败,不会出现只读取部分的情况
3:zookeeper运行在一组机器上,具有高可用性,帮助系统避免单点故障,同时删掉故障服务器
4:顺序一致性:任意客户端的更新请求会被按照发送顺序提交
5:单一系统映像:当一台服务器故障,导致它的客户端需要连接其它服务器的时候,所有更新晚于故障服务器的服务器都不会接收请求,一直到更新赶上故障服务器
6:及时性:任何客户端能看到的滞后都是有限的,不会超过几十秒,且提供sync操作强制客户端所连的服务器与领导者同步
7:会话:每个客户端连接时会尝试连接到配置列表中的一台服务器,一旦失败会自动连接另一台服务器依次类推,知道成功连接一台服务器,从而创建一个会话,客户端可以位每个会话设置超时时间,一旦会话过期,则所有短暂znode会丢失,因为zookeeper会自动发送心跳包,所以很少发生
8:约会机制(rendezvous),在交互的过程中,被协调的各方不许要事先彼此了解,甚至不必同时存在
9:ACL:zookeeper提供了digest(通过用户名密码),host(通过主机名),ip(通过ip地址)3种身份验证模式,依赖与zookeeper的身份验证机制每个ACL都是一个身份对应一组权限,如果我们要给demo.com的客户端域一个读权限在java语言中可以这样创建:
new ACL(Perms.READ, new Id("host", "demo.com"));
Ids.OPEN_ACL_UNSAFE是将所有ADMIN之外的权限授予每个人
另zookeeper还可以集成第三方的身份验证系统
10:提供关于通用协调模式的开源共享资源库
11:高性能的(官方数据)对以写为主的工作负载来说使用5台不错的机器基准吞吐量达到10000+
原理
zookeeper使用zab协议,类似Paxos算法但在操作方面却是不同的,该协议包括2个不断重复的阶段
领导者选举:集群所有机器一起选出一台领导者,其它机器成为跟随者,一旦半数以上的跟随者将状态同步,表示这个阶段完成(官方数据这个阶段秩序200毫秒)
原子广播:所有机器将写操作转发给领导者,领导者再将更新广播给跟随者,只有半数以上的跟随者同步修改之后领导者才会提交更新,客户端才能收到更新成功的信息
它的核心是一个精简的文件系统,形成一个树状的数据结构,统一使用节点(znode)的概念,节点可以有子节点,也可以用来保存数据,并且有一个关联的ACL,因为zookeeper被设计来实现协调服务,通常使用小数据文件所以znode能存储的数据限制在1M以内
zookeeper采用斜杠分割的Unicode字符串来做引用类似文件系统路径,但必须是标准的,不支持./这种特殊字符,使用/zookeeper子树来保存管理信息
客户端与服务器通信采用tcp长连接,客户端和服务器通过心跳来保持seesion的连接。当session失效时临时节点会被删除。
通过监控节点以及节点的变化来实现功能,例如集群管理,配置的集中管理,分布式锁等
zookeeper通过复制实现高可用性,只要集群中半数以上的机器可用,就能提供服务,所以一个集群通常要奇数台机器
zookeeper的生命周期有以下3个状态:CONNECTION,CONNECTED,CLOSED
新产生的zookeeper实例是CONNECTION状态,通过建立连接进入CONNECTED状态,当zookeeper实例断开和重连的时候,zookeeper实例在CONNECTED和COONECTION之间转换,调用close方法或者会话超时会进入到CLOSE状态且不能恢复
znode特性
znode有2种,短暂node和持久node,在创建时确定,并且不能修改,短暂node在客户端session结束的时候会被移除
且不可以创建任何类型的子节点
如果在创建znode的时候设置了顺序标识,那么此znode会通过父节点维护的一个单调递增的计数器来添加一个顺序号,这个顺序号可以被用来进行全局排序
watch机制可以让客户端得到znode的变化,观察只能触发一次,为了能多次收到通知,客户端需要重新注册所需的观察
安装配置:(单机模拟集群)
下载最新版本zookeeper
创建3个文件夹server1 server2 server3
解压缩到3个文件夹
配置zoo.cfg(配置路径不要出现中文)
是一个java属性文件
可以放在conf下面
或者/etc/zookeeper子目录中
如果配置了ZOOCFGDIR环境变量,也可以保存在该环境变量所指定的目录中
#以毫秒为单位的基本时间单元
tickTime=2000
#所有跟随者与领导者进行连接并同步的时间
#如果此时见内半数以上的跟随者未能完成同步,领导者会放弃领导,进行另一次
#领导者选举
initLimit=5
#一个跟随者与领导者同步的时间,该时间内跟随者未能完成同步会自己重启,所有关联这个跟随者的客户端将链接另一个跟随者
syncLimit=2
#存储持久数据的本地文件系统位置
dataDir=xxxx/zookeeper/server1/data
dataLogDir=xxx/zookeeper/server1/dataLog
#监听客户端连接的端口
clientPort=2181
#第一个端口是跟随者链接领导者,第二个用于领导者选举阶段的其他服务器链接
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
在dataDir下面创建myid文件,里面写入数字,余server.后面的数字一致
----------------------------------------------------------------------------------------------
zookeeper-集群服务器
zookeeper是一个集群服务器的管理软件。可以方便管理集群中的各种资源。
直入主题,介绍一下搭建一个zookeeper集群的步骤:
1. 下载zookeeper. 可以在http://zookeeper.apache.org/releases.html 官网下载最新的zookeeper版本
2. 將下载的zookeeper压缩包在本地进行解压。 路径假设 ZOO_HOME
3. ZOO_HOME/conf目录下建立配置文件zoo.cfg,也可以将zoo_sample.cfg内容复制到zoo.cfg中
4.这里面插一句,如果在单机模式下运行。 只需要简单几行配置就可以了
- tickTime=2000
- dataDir=/var/lib/zookeeper
- clientPort=2181
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
tickTime: 单位毫秒,用来做心跳的时间。 一个session的最小过期时间必须是tickTime 的两倍以上。
dataDir:保存zookeeper运行时的一些数据信息
clientProt:zookeeper启动后监听的端口用来提供客户端进行链接
如果是集群环境就要增加一些配置。
- tickTime=2000
- dataDir=/var/lib/zookeeper
- clientPort=2181
- initLimit=5
- syncLimit=2
- server.1=zoo1:2888:3888
- server.2=zoo2:2888:3888
- server.3=zoo3:2888:3888
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
介绍配置项之前首先要介绍一下,zookeeper集群中的两个概念领导者(leader)和跟随者(follower)
zookeeper的集群需要一台服务器作为领导者,负责接受客户端所有的写请求。而其他的服务器作为跟随者与领导者保持数据的同步。如果集领导者发生与其他服务器通讯发生异常,则集群中服务器重新通过投票机制再选择一台服务器作为领导者。
接下来介绍新增加的配置项
initLimit:是指集群中服务器连接到leader的最长时间限制。 比如例子中配置 initLimit=5 tickTime=2000 那么最长时间为5*2000 是10秒
syncLimit : 是集群中跟随者与leader之间接收数据的时间。计时方式与initLimit类似。
server.x=zoo1:2888:3888
x代表是服务器的id server.1 server.2 server.3 是集群中服务器的列表
zoo1 zoo2 zoo3 是服务器的ip或者域名 后面的两个端口,第一个端口用来链接leader服务器。第二个端口用来选举leader服务器
5.在集群服务器的dataDir中增加一个myid的配置文件。里面记录着服务器id,就是server.x中的x。告诉本机启动时是服务器列表中的哪个服务器。
在集群中每个服务器的配置文件可以保持一致。不过myid有所不同
6.启动zookeeper
在集群中每台服务器上执行:
ZOO_HOME/bin/zkServer.sh start 启动zookeeper
相关推荐
### Zookeeper总体架构与运作原理 Zookeeper的核心是它的**集群架构**,通常包含奇数个节点(通常是2n+1个节点),这样设计能够确保即使有一半的节点不可用时,系统依然可以继续工作。集群中的每一个节点都有两种...
zoo.cfg文件中可以设置数据快照存储路径(dataDir)和日志文件存储路径(dataLogDir),在集群配置中还可以指定集群服务器列表(server.X=A:B:C)。A是服务器的IP地址,B是服务器之间的通信端口(通常称为peerPort,...
- `server.x`:配置集群中每个服务器的标识(x 表示服务器编号)、IP 地址和两个端口号(分别为 follower 与 leader 间的通信端口和选举端口)。 4. **创建myid文件**:在 `dataDir` 指定的目录下创建 `myid` 文件...
由于项目需要,编写基于zookeeper集群监测服务器宕机情况,并发邮件通知代码;实现很简单,编写了客户端和服务端,基于maven实现,代码方面修改zookeeper ip地址,需要部署的服务器名和邮件信息即可实现。直接打包...
要安装 Zookeeper 集群,我们需要在每个服务器上安装 Zookeeper,然后配置 Zookeeper 的配置文件。例如,在上面的部分内容中,我们可以看到如何安装和配置 Zookeeper。 ### Zookeeper 集群启动 要启动 Zookeeper ...
此外,ZooKeeper还能够处理集群节点的故障转移,例如自动启用备用的总服务器以取代发生故障的主服务器,以及实时更新CGI的总服务器网络地址。 综上所述,ZooKeeper是一个强大的分布式协调服务,它通过其简单的设计...
Zookeeper原理及应用 Zookeeper是一个分布式服务框架,由Apache Hadoop子项目组成,它提供了可靠的协调系统,可以解决分布式环境中的数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的...
### ZooKeeper原理及其在Hadoop和HBase中的应用 #### ZooKeeper概述 ZooKeeper是一个由雅虎开发的开源分布式协调服务系统,旨在为分布式应用提供一致性和可靠性支持。它是Google Chubby系统的开源版本,主要功能...
### 第二课:Zookeeper客户端使用与集群特性详解 #### 一、Zookeeper客户端概述 Zookeeper是一款开源的分布式协调服务框架,它提供了一系列的服务,包括配置维护、域名服务、分布式同步、组服务等。为了方便用户...
《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的著作,其中重点讲解了Paxos算法与Zookeeper在实际应用中的理论与实践。Paxos是分布式计算领域中著名的共识算法,为解决分布式...
ZooKeeper的架构基于一个集群模型,每个服务器在内存中都有数据副本。在启动时,通过Paxos协议选举出一个领导者(Leader),负责处理数据更新。领导者使用ZAB(ZooKeeper Atomic Broadcast)协议来协调集群中的其他...
总的来说,通过在Windows环境下搭建Zookeeper的伪分布式集群,我们可以更方便地学习和理解Zookeeper的工作原理和功能,为后续的分布式系统开发打下基础。在这个过程中,了解和掌握Zookeeper的核心概念、配置以及操作...
2. 各个服务器的`dataDir`下创建`myid`文件,内容为该服务器的编号(与`server.x`中的`x`一致)。 集群中的每个节点都需要上述配置,并且所有节点的`zoo.cfg`配置必须一致。启动集群时,先启动一个节点作为领导者,...
### 分布式一致性原理与实践:从Paxos到Zookeeper #### 一、引言 随着互联网技术的发展,分布式系统已经成为现代软件架构的核心组成部分。在分布式系统中,多个节点协同工作来完成复杂的任务,而如何确保这些节点...
3. Zookeeper架构:描述Zookeeper的服务器集群结构,包括ZAB(Zookeeper Atomic Broadcast)协议,它是Zookeeper实现一致性的重要机制。 4. Zookeeper API:讲解如何使用Zookeeper提供的客户端API进行数据操作、监控...
**ZooKeeper 3.4.6:注册中心的安装...总之,ZooKeeper 3.4.6的安装并不复杂,但理解其工作原理和配置细节对于有效利用它的功能至关重要。在分布式系统中,ZooKeeper作为一个可靠的协调者,可以帮助解决很多关键问题。
- `server.x`:定义集群中的服务器节点,例如 `server.1=localhost:2187:2887`,其中 x 表示服务器编号,2187 和 2887 分别为 follower 与选举的端口。 3. **创建数据目录和日志目录**:根据配置文件中的 `dataDir...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》是一本深入探讨分布式系统中一致性问题的重要书籍。在分布式计算领域,一致性是确保多个节点间数据同步的关键特性,它对于构建可靠、高可用的系统至关重要。这本书主要...