cap :一致性 可用性 分区容错性
BASE原理 :基本可用 + 软状态(同步允许延迟)+最终一致性
一致性协议:2PC(2阶段提交)+3PC(3阶段提交)
3PC = canCommit + preCommit + doCommit
PAXOS引入过半的原则 只要过半通过则通过
zookeeper为分布式应用提供了高效可靠的分布式协调服务
zookeeper采用 zab协议 zookeeper atomic broadcast
zookeeper是分布式数据一致性的解决方案
单一视图:客户端不管连接哪个服务器看到的视图都一致
zookeeper保证最终一致性
zookeeper将全量数据存储到内存中 实现高吞吐和低延迟
只要集群中有一半机器对外服务 则可以对外服务
zk 有三个角色 :leader + foller + observer foller和observer都可以对外提供读服务 当只有foller才能选举
znode分临时节点和持久节点
持久节点需要主动删除才能删除
临时节点与客户端连接服务器会话的时间有关 一旦客户端断开则节点删除
每个znode都会维护一个stat的数据结构 里面维护这三个版本 : version(znode版本)+cversion(znode子节点版本)+aversion(znode acl版本)
watcher 允许在节点注册客户端感兴趣的事件
acl=access control list 权限控制集合 = CREATE READ WRITE DELETE ADMIN
zookeeper主要依赖zab进行数据的一致性
zab只允许一个主进程来接受所有客户端的所有请求 并采用zab协议将事务发布到副本进程中去。
所有的事务请求都只能由leader服务器进行转换成事务 并将事务分发给所有foller进行提议 过半则通过
zab协议分为崩溃恢复(选举新leader)和消息广播
leader服务器会为每一个事务proposal分配一个事务id(zxid)
zxid 由64位组成 低32位是简单的单调递增的计数器 用于记录客户端每次的请求id 高32位用于储存每次选举出来的epoch值+1
zab协议是zk的核心所在 其规定了任何时候只有一个主进程进行消息广播,主进程失效后必须选举一个新leader
zab协议分三个阶段:发现(looking 选举) + 同步(最后的事务) + 广播 (接受客户端的响应)
leader进程与follower进程通过心跳检测机制进行交流
leader在超时时间内无法获得过半follower的心跳 则进入looking状态(重新选举)
zab协议中每个事务proposal都有一个epoch值表示当前的leader周期
使用zk
---------------------------------------
zoo.cfg配置文件
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# 镜像数据位置
dataDir=D:\\zookeeper\\data\\zookeeper
#日志位置
dataLogDir=D:\\zookeeper\\logs\\zookeeper
#客户端连接的端口
clientPort=2181
#集群中 格式:server.id=ip:port:port
server.1=ip1:2888:3888
server.2=ip2:2888:3888
server.3=ip3:2888:3888
集群中所有的zoo.cfg文件都是一致
在dataDir下面生成一个myid文件 内容就是zoo.cfg中id的值如1 只有一个数字
create -s 顺序节点 -e 临时节点 默认不加则是持久化节点
ls / 进行查看
get path 用于获取节点内容
set path value 用于更新节点内容
delete path 用于删除节点
权限控制:通过在节点中设置acl权限控制访问
zookeeper.addAuthInfo("digest","username:password");// 类似 用户名:密码格式
zookeeper.create(path,value,Ids.CREATOR_ALL_ACL,NodeType);
try {
// 建立一个连接
ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 5000, null);
System.out.println(zk.getState());
zk.addAuthInfo("digest", "lanwx:123".getBytes());
//zk.create("/zk-lanwx/childss", "lan".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
// 无权限
ZooKeeper zk1 = new ZooKeeper("127.0.0.1:2181", 5000, null);
System.out.println(new String(zk1.getData("/zk-lanwx/childss", null, null)));
} catch (Exception e) {
e.printStackTrace();
}
Curator可以很好的作为zookeeper的客户端API可用于分布式锁
zookeeper使用场景
-------------------------
zk是高可用的分布式数据一致性框架
集群中各机器共享 数据一致
YARN全新一代分布式调度框架
技术内幕
-------------------------
数据模型:树形结构
每个zxid代表一个更新操作
znode节点类型:持久 + 临时 + 顺序
zookeeper采用jute进行数据的序列化和反序列化
zookeeper采用tcp/ip的通信协议
客户端与服务器建立连接后就存在一个会话
分享到:
相关推荐
主要介绍了zookeeper 的概述,特点,作用,角色,安装,shell命令
在第三部分中,我们学习了ZooKeeper的安装步骤,包括单机模式、集群模式和集群伪分布模式。单机模式适合初学者进行测试和学习,而集群模式则提供了高可用性和容错能力。 ZooKeeper的配置部分(系列之四)通常涉及...
### Zookeeper 学习中的疑难问题总结 #### 一、Zookeeper 概念与特性 Zookeeper 是一个分布式的、开放源码的应用程序协调服务,它最初是 Google 的 Chubby 项目的开源版本。Zookeeper 在分布式系统中扮演了一个至...
### Zookeeper 学习手册知识点概览 #### 1. ZooKeeper 基本概念 - **角色**: - **Leader**:集群中的领导者,负责处理客户端的写请求,并保持集群状态的一致性。 - **Follower**:集群中的跟随者,处理客户端的...
### Zookeeper 使用总结 #### ZOOKEEPER 概述 - **Zookeeper 介绍** Zookeeper 是一个分布式协调服务框架,旨在简化分布式应用程序的开发。它提供了一个高性能的协同工作系统,使得开发者能够专注于应用程序的...
《Zookeeper学习资料 中篇》 Zookeeper,作为Apache Hadoop的一个子项目,是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作...
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
1)Zookeeper公司内部交流学习、培训PPT【ZooKeeper前言、是什么&为什么要用、ZAB、4大应用场景分析&JAVA实例Demo Code、3.4.9版本源代码Eclipse创建】 2)Eclipse 支持的 3.4.9版本源代码 JAVA Project
在单机上模拟集群环境,即伪集群模式,主要是为了测试和学习目的。以下是配置步骤: 1. **复制**:将 Zookeeper 目录复制多份,例如复制成 `zookeeper0`, `zookeeper1`, `zookeeper2`。 2. **配置**:分别对每个...
总结来说,Zookeeper管理工具是管理和维护Zookeeper集群的重要辅助工具,它简化了操作流程,提高了运维效率。通过源码学习,开发者可以更深入地理解Zookeeper的工作原理,从而更好地应用到实际的分布式系统中。
【总结】 Zookeeper 是分布式系统中不可或缺的工具,它通过强大的协调和同步机制解决了许多分布式环境中的难题。了解并掌握Zookeeper 的基本概念、术语、架构以及API的使用,对于开发和维护分布式应用至关重要。...
总结,Zookeeper客户端图形化界面为Zookeeper的管理和维护提供了便利,通过直观的图形展示和便捷的操作,使得Zookeeper的管理变得更加高效和人性化。无论是开发人员还是运维人员,都能从中受益,提升工作效率。在...
总结,Zookeeper 3.4.12 是一个强大的分布式协调框架,它为开发者提供了构建高可用分布式系统的基础。了解并熟练掌握其核心概念和用法,对于构建可扩展、容错的分布式应用至关重要。通过深入学习和实践,我们可以更...
Paxos算法是解决这一问题的经典方案,而ZooKeeper则是Apache基金会开发的一个分布式协调服务,它基于Paxos和其他一致性算法实现,为分布式应用提供可靠的分布式协调服务。 Paxos算法是由Leslie Lamport提出的,它...
本篇文章将深入探讨 ZooKeeper 客户端的使用,这是继上一篇文章后的第二部分,我们将继续学习如何与 ZooKeeper 交互以及利用其功能。 ZooKeeper 的客户端是连接到 ZooKeeper 服务器的接口,它提供了丰富的 API 供...
这种图形化工具可以帮助学习者更好地理解和记忆Zookeeper的各个方面,包括但不限于Zookeeper的节点类型(持久化、临时、顺序节点)、选举机制、会话超时、数据模型等。 ### 5. 高级特性 - **Quorum机制**:...
**ZooKeeper:分布式协调服务详解** ZooKeeper是一个开源的分布式协调服务,由雅虎创建并贡献给Apache基金会,现已成为Apache顶级项目。它主要为分布式应用提供一致性服务,如命名服务、配置管理、集群同步、分布式...
在IT行业中,分布式系统是大型应用...总结来说,Zookeeper和RPC在Java分布式开发中扮演了重要角色,理解并掌握这两者有助于构建高可用、高性能的分布式系统。通过学习和实践,你可以进一步提升在分布式领域的技术水平。
本学习历程将带你深入理解ZooKeeper的设计理念和实现机制,助你成为驾驭分布式系统的高手。 一、ZooKeeper的起源与定位 ZooKeeper源于分布式计算领域的实际需求,旨在解决分布式环境中的数据一致性问题。它是一个...