朔州网站建设费用,手机网站建设西安,嗯嗯嗯 嗯嗯嗯嗯嗯嗯哼哼哼哼哼哼这是什么歌英文的,深圳市9号文简介: ZooKeeper是一个分布式的#xff0c;开放源码的分布式应用程序协调服务#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件#xff0c;它提供了一个分布式环境中的高可用性、高性能、有序访问的数据存储#xff0c;可以让分布式应用程…简介: ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件它提供了一个分布式环境中的高可用性、高性能、有序访问的数据存储可以让分布式应用程序能够实现高效协调。提供的功能包括配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务将简单易用的接口和性能高效、功能稳定的系统提供给用户让应用程序开发人员可以专注于应用程序的业务逻辑而不必关心协调任务的具体细节。ZooKeeper包含一个简单的原语集提供Java和C的接口。ZooKeeper代码版本中提供了分布式独享锁、选举、队列的接口代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本选举只有Java版本。
ZooKeeper的优点包括
高可靠性ZooKeeper是一个高可靠的分布式协调服务可以保证数据的一致性和完整性。可扩展性ZooKeeper支持动态扩展和缩减可以根据需求调整资源的分配。易用性ZooKeeper提供了简单的原语集使得开发者可以快速实现分布式应用。安全性ZooKeeper使用SSL加密通信保证数据传输的安全性。
ZooKeeper是一个强大且灵活的分布式协调服务适用于大规模分布式系统的场景。 下载路径
Index of /apache/zookeeper/zookeeper-3.7.1
注意: 3.5.5开始的版本要下载尾部有bin 别问为什么会报错 3.5.5开始带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包。之前版本tar.gz包里面是只是源码包无法直接使用。 配置环境变量
检测是否在系统变量path中配置 %JAVA_HOME%\bin 如果没有新建配置一下 说明
当前是windows的一个伪集群正常的生产环境中分别部署到每一台机器上也不是windows而是容器或linux中。
为什么是集群不是单机当然是保证系统高可用了。 开始吧......... 解压目录 打开conf中的zoo_sample.cfg修改后另存为zoo.cfg 原始(zoo_sample.cfg)文件不会被执行。 参数解析 zoo.cfg文件 1.tickTimeCS通信心跳时间Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。tickTime2000
2.initLimitLF初始通信时限集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数tickTime的数量。initLimit5
3.syncLimitLF同步通信时限集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数tickTime的数量。syncLimit2
4.dataDir数据文件目录Zookeeper保存数据的目录默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。dataDir/home/zookeeper/zookeeper/zkdata
5.clientPort客户端连接端口客户端连接 Zookeeper 服务器的端口Zookeeper 会监听这个端口接受客户端的访问请求。clientPort2181
6.服务器名称与地址集群信息服务器编号服务器地址LF通信端口选举端口规则如下:集群分布模式server.id数字ip集群交互端口选举leader端口 server.1localhost:2287:3387 server.2localhost:2288:3388 server.3localhost:2289:3389 修改配置 注意: 下面路径单斜 \ 会当做是转义符处理 \\ 斜杠可以解决。(单机没问题 如果是集群 必报错)
#数据文件目录
dataDirD:\work\zookeeperColony\apache-zookeeper-3.7.1-bin-server1\data
#日志文件目录
dataLogDirD:\work\zookeeperColony\apache-zookeeper-3.7.1-bin-server1\logs#伪集群分布模式server.id(注意是数字)ip集群交互端口选举leader端口
server.1localhost:2287:3387
server.2localhost:2288:3388
server.3localhost:2289:3389 在server1、 server2、 server3、分别创建 data 文件夹 data中创建myid文件注意不需要任何后缀myid文件内容分别为1、2、3对应的各server.id。
注意: 集群启动时要检查是否有该文件如果没有话会报错 启动闪退 如果启动闪退 你可以编译 bin 下的 zkServer.cmd 添加pause 可以更清楚看清错误 启动实例 三个实例都配置完成后启动 bin 下的 zkServer.cmd 报错了 单机可以正常启动集群就报错。
原因: 集群查找myid文件就嗝屁……是把\当做是转义符处理所以路径错误找不到myid文件从而启动失败修改该路径后重新启动一切正常(改为双斜杠\\) 修改路径: dataDirD:\\work\\zookeeperColony\\apache-zookeeper-3.7.1-bin-server1\\data dataLogDirD:\\work\\zookeeperColony\\apache-zookeeper-3.7.1-bin-server1\\logs 启动 server1 server2 server3 (注意: 在启动第一台服务 会一直跳出错误信息这是因为选举策略 不用管) 机器数量启动过半了才能选出Leader server1 server2 注意: 我在启动server3 这台服务的时候 由于我的端口被占用 我在server1 server2 server3 中分别对zoo.cfg 中的 server.3localhost:2289:3389 改为 2286 :2286 方可正常。
server3 通过 cmd 命令行 查看 是否启动正常 命令:jps 通过控制台看看不是 一台LEADING 两台FOLLOWING
server1 是FOLLOWING server2 是LEADING server3 是FOLLOWING 总之集群中id小的机器会向比自己id大的机器投票 如果现在把server2 Leader 关闭 xunh server3 会接任 Leader职务 可以自己试一下 。 脚本一次性启动三台 一台一台启动太麻烦创建文件 zookeeperstart.bat内容如下 Zookeeper 选举策略 领导者选举Leader Election在ZooKeeper集群中有一个主节点Master负责协调整个集群的运行。主节点会选举一个领导者Leader作为自己的代理人负责处理集群中的事务和任务。当一个新的客户端连接到ZooKeeper集群时它会尝试与主节点建立连接。如果连接成功则客户端会发送一个请求请求成为新的领导者。如果主节点已经选举出了一个领导者则客户端会等待直到领导者就职。如果领导者还未就职则客户端会一直等待直到领导者选举完成。配置管理选举Configuration Management Election在ZooKeeper集群中可能会存在多个客户端同时连接到集群需要共享一些配置信息。为了保证这些配置信息的一致性和可靠性ZooKeeper集群会采用配置管理选举Configuration Management Election策略。在这种策略下当一个客户端连接到ZooKeeper集群时它会尝试与主节点建立连接。如果连接成功则客户端会发送一个请求请求成为新的领导者。如果主节点已经选举出了一个领导者则客户端会等待直到领导者就职。如果领导者还未就职则客户端会一直等待直到领导者选举完成。多数选举Majority Election在ZooKeeper集群中如果多个客户端同时发送请求想要成为新的领导者则它们会根据一定的规则来竞争。具体来说这些规则可能包括时间戳、先到先得Round Robin等。在这种策略下多个客户端会根据自己的请求时间戳来排序最早请求的客户端会成为新的领导者。如果两个或多个客户端的请求时间戳相同则ZooKeeper会采用“多数选举”策略选举出一个领导者。独裁选举Throne Election在ZooKeeper集群中只有一个客户端可以成为新的领导者。这种策略类似于“领导者选举”策略但是当一个客户端成为领导者时它可以完全控制整个ZooKeeper集群包括资源分配、事务处理等。这种策略通常不推荐使用因为它可能导致集群的不稳定和不可预测性。
总结: ZooKeeper的选举策略取决于具体的应用场景和需求。在选择选举策略时需要考虑性能、可靠性、安全性等因素。不同的策略会对ZooKeeper集群的运行产生不同的影响需要根据实际情况进行选择。 Zookeeper ZAB协议 Zookeeper的ZAB协议是一种分布式一致性协议用于确保在分布式环境下多个Zookeeper实例之间的数据一致性。它主要包括原子广播和崩溃恢复两个功能。
原子广播
ZAB协议通过原子广播机制来确保分布式环境下多个Zookeeper实例之间的数据一致性。具体来说当一个Zookeeper实例主节点需要向其他Zookeeper实例从节点广播数据时主节点会将数据以原子的方式广播到所有从节点。这样所有从节点都能够同步数据从而确保整个集群中的数据一致性。
崩溃恢复
当主节点崩溃时ZAB协议会自动触发崩溃恢复机制。在这种情况下崩溃的主节点会将其数据复制到备用节点上并重新选举一个新的主节点。这样即使主节点崩溃整个集群仍然能够保持数据一致性。
总结: ZAB协议通过原子广播和崩溃恢复两个机制来确保Zookeeper集群中的数据一致性和可靠性。这使得Zookeeper成为分布式环境下进行高可用性和可靠性部署的理想选择。 Zookeeper 数据模型 ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似拥有一个层次化结构。这里面的每一个节点都被称为: ZNode每个节点上都会保存自己的数据和节点信息。节点可以拥有子节点同时也允许少量(1MB)数据存储在该节点之下 ZooKeeper的数据模型主要包含以下几个部分
1、Name SpaceZooKeeper的数据模型类似于文件系统使用 Name Space 来表示不同的数据对象。每个 Name Space 由一组唯一的标识符组成称为节点Node。节点是 ZooKeeper 树中的基本单位每个节点都有一个唯一的数字标识符。
2、Data StoreZooKeeper 的数据存储在称为数据存储Data Store的节点中。每个数据存储节点都是一个文件用于存储数据和元数据信息。
数据存储节点通常包含以下几个部分
a. Data数据存储节点中存储的是数据对象例如文件、哈希表等。
b. MetaData数据存储节点中还包含元数据信息例如文件权限、所有者等。
c. ACLACL访问控制列表是一个用于定义节点间权限的数据结构。在 ZooKeeper 中ACL 用于限制不同用户对节点的访问权限。3、NodeZooKeeper 树中的每个节点都由一个唯一的数字标识符组成称为 Znode。Znode 是 ZooKeeper 树中的基本单位代表着一个数据对象。
Znode 包含以下几个部分
a. StatZnode 包含一个元数据信息例如文件大小、修改时间等。
b. DataZnode 存储着实际的数据对象。
c. ChildrenZnode 可以包含子节点用于存储子数据对象或者其他 Znode。4、 ZxidZxid 是一个全局唯一的标识符用于确保每个事件在 ZooKeeper 树中的唯一性。Zxid 用于生成序列号以便在事件通知和领导者选举过程中使用。
注: ZooKeeper的数据模型通过使用树形结构来组织数据每个节点代表着一个数据对象节点之间通过父子关系相互关联。这种结构保证了在分布式系统中所有数据的一致性和事件驱动的行为。 Zookeeper 节点四大类 临时节点临时节点用于存储会话数据和事件它们的生命周期与客户端会话绑定一旦会话结束这些节点将被自动删除。持久节点持久节点用于存储长期数据例如状态信息、配置数据等。它们具有永久性即使客户端会话断开节点也会保留在 ZooKeeper 中。顺序节点顺序节点是根据预定顺序链接在一起的一组节点。它们用于实现分布式锁机制当多个客户端请求同一个资源时只有一个客户端可以获得锁并进行操作其他客户端需要等待。临时顺序节点临时顺序节点是一种特殊类型的顺序节点它们具有临时性和顺序性。临时顺序节点在满足特定条件时会转换为永久顺序节点而在此期间它们可以被多个客户端共享。 Zookeeper 节点类型 持久节点Persistent是Zookeeper中最常见的节点类型它们在服务器上永久存在直到被删除。这些节点用于存储数据和元信息如成员关系、权限等。临时节点Ephemeral临时节点在服务器上存活的时间通常较短它们用于创建临时数据和关系例如订阅关系或发布/订阅关系。临时节点在建立后会被快速删除以确保节点状态的可恢复性。顺序节点Sequential顺序节点是按照顺序创建的它们用于在分布式环境中存储有序数据。顺序节点在建立后会按照预定的顺序被引用和访问。分区节点Partition分区节点用于将Zookeeper实例分成多个子集每个子集可以独立管理。分区节点可以提高Zookeeper的可扩展性和容错性。聚合节点Aggregating聚合节点用于将多个Zookeeper实例的数据合并为一个大的聚合实例。聚合节点可以减少网络带宽的使用提高数据传输速度。持久顺序节点Persistent Sequential持久顺序节点是介于持久节点和顺序节点之间的一种节点类型。它们在建立后会保留数据和元信息直到被删除。这些节点通常用于存储有序数据如任务或事件。容器节点Container容器节点是专门用于存储和管理共享资源的节点。它们可以跨多个Zookeeper实例存在提高了资源的可共享性和管理效率。同步节点Synchronous同步节点在创建时就会一直保持同步状态它们不能接收新的事务只能接收崩溃重试事务。同步节点主要用于测试和开发环境下的事务处理。异步节点Asynchronous异步节点在创建时不会保持同步状态它们可以接收新的事务并进行处理但是事务的提交和回滚是异步的。异步节点主要用于实时性要求较高的场景如视频流或实时通信应用。
以上是ZK的一些常见节点类型不同的节点类型在ZK中具有不同的含义和用途。 Zookeeper watch 监听 ZooKeeper 的 watch 监听是一种机制用于监视分布式系统中的变化。ZooKeeper 的 watch 监听机制可以帮助应用程序实现以下功能
心跳检测ZooKeeper 监视客户端连接状态并自动进行心跳检测。如果客户端断开连接ZooKeeper 将发送一个心跳包以确保客户端仍在运行。变化检测ZooKeeper 支持多种变化检测方式例如读取、写入、删除等操作。当ZooKeeper 检测到分布式系统中发生变化时它将通知相关客户端。自动修复ZooKeeper 具有自动修复机制可以在分布式系统中的节点出现故障时自动进行故障转移。这样ZooKeeper 可以确保分布式系统的高可用性和可靠性。
ZooKeeper 的 watch 监听机制通常由以下组件组成
WatcherWatcher 是 ZooKeeper 的核心组件用于监视分布式系统中的变化。它负责监视节点的状态、事件和变化并将这些信息通知给相关客户端。EventEvent 是 ZooKeeper 中的一种事件类型用于描述分布式系统中的变化。Event 包含有关变化的详细信息例如读取、写入、删除等操作。WatchManagerWatchManager 是 ZooKeeper 的一个组件用于管理 watch 监听。它负责创建、删除和重启 watcher以及协调 watcher 之间的通信。
ZooKeeper 的 watch 监听机制可以帮助应用程序实现分布式系统的监视、心跳检测、变化检测和自动修复等功能。 Zookeeper 集群中的角色 Leader是Zookeeper集群工作的核心也是事务性请求写操作的唯一调度和处理者它保证集群事务处理的顺序性同时负责进行投票的发起和决议。Follower是Zookeeper集群中的另一个重要角色它负责处理客户端非事务读操作请求转发事务请求给Leader参与集群Leader选举投票。Observer对于非事务请求可以独立处理读操作对于事务性请求会转发给Leader处理但不参与任何形式的投票。Secret Manager负责群成员的加入、删除、退出操作管理共享数据的一致性。Graceful exit负责组织有序地退出。 导图 以上是Zookeeper集群中的主要角色它们各司其职共同保证Zookeeper集群的正常运行。