Zookeeper详解-概述(一)

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

ZooKeeper框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。

先来介绍一下分布式:

分布式应用

分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说,对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成。

通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点

分布式应用有两部分, Server(服务器)  Client(客户端) 应用程序。服务器应用程序实际上是分布式的,并具有通用接口,以便客户端可以连接到集群中的任何服务器并获得相同的结果。 客户端应用程序是与分布式应用进行交互的工具。

分布式应用的优点

  • 可靠性 - 单个或几个系统的故障不会使整个系统出现故障。
  • 可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。
  • 透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战

  • 竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
  • 死锁 - 两个或多个操作等待彼此无限期完成。
  • 不一致 - 数据的部分失败。

什么是Apache ZooKeeper?

Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。

分布式应用程序的协同服务

ZooKeeper提供的常见服务如下 :

  • 命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
  • 配置管理 - 加入节点的最近的和最新的系统配置信息。
  • 集群管理 - 实时地在集群和节点状态中加入/离开节点。
  • 选举算法 - 选举一个节点作为协调目的的leader。
  • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
  • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。

分布式应用程序提供了很多好处,但它们也抛出了一些复杂和难以解决的挑战。ZooKeeper框架提供了一个完整的机制来克服所有的挑战。竞争条件和死锁使用故障安全同步方法进行处理。另一个主要缺点是数据的不一致性,ZooKeeper使用原子性解析。

ZooKeeper的好处

以下是使用ZooKeeper的好处:

  • 简单的分布式协调过程
  • 同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理。
  • 有序的消息
  • 序列化 - 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。
  • 可靠性
  • 原子性 - 数据转移完全成功或完全失败,但没有事务是部分的。

原文地址:https://www.cnblogs.com/huxipeng/p/8455950.html

时间: 2024-08-30 06:16:34

Zookeeper详解-概述(一)的相关文章

Zookeeper详解(二):Zookeeper安装

安装环境: CentOS 7   内存1GB JDK版本:1.8.0_112 为JDK配置如下环境变量: 编辑/etc/profile.d/jdk.sh #!/bin/bash JAVA_HOME=/usr/local/jdk1.8.0_112 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 之后运行下面的命令: 注意:在生产环境中为了避免内存频繁的换进换出,建议将JAVA堆大小设置的更大一点,这取决于你的物理内存大小. 关于集群可用:如果

由浅入深Zookeeper详解(参考官方文档)

[老哥我最近接到个任务研究一下Zookeeper,对于我这个Linux运维领域的小菜鸟来说也是刚刚听到这个名字,为了养成良好的文档整理和学习能力,我人生第一次开通了博客并把这次的研究经历记录了下来,以后我会不定期的记录下来我对技术领域的探索,希望热爱Linux运维志同道合的兄弟们多指教,一同进步成长.(ps:我本人平时比较沉默,善于观察思考,对历史人物颇有见解,但是一旦说起话来就会滔滔不绝,谁让我曾经的梦想是当一名教师呢!哈哈!)同时,送给大家一句话,人生是一场马拉松比赛,只有坚持到最后的人,才

Zookeeper详解-基础(二)

在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.我们将在本章中讨论以下主题: Architecture(架构) Hierarchical namespace(层次命名空间) Session(会话) Watches(监视) 1.zookeeper的架构 看看下面的图表.它描述了ZooKeeper的"客户端-服务器架构". 下面对zookeeper的组件进行说明 Client(客户端): 客户端,我们的分布式应用集群中的一个节点,从服务器访问信息.对于特定

Zookeeper详解-工作流和leader选举(三)

一.工作流 一旦ZooKeeper集合启动,它将等待客户端连接.客户端将连接到ZooKeeper集合中的一个节点.它可以是leader或follower节点.一旦客户端被连接,节点将向特定客户端分配会话ID并向该客户端发送确认.如果客户端没有收到确认,它将尝试连接ZooKeeper集合中的另一个节点. 一旦连接到节点,客户端将以有规律的间隔向节点发送心跳,以确保连接不会丢失. 如果客户端想要读取特定的znode,它将会向具有znode路径的节点发送读取请求,并且节点通过从其自己的数据库获取来返回

Zookeeper详解-安装(四)

ZooKeeper服务器是用Java创建的,它在JVM上运行.你需要使用JDK 6或更高版本. 步骤1:验证Java安装 相信你已经在系统上安装了Java环境.现在只需使用以下命令验证它. $ java -version 如果你在机器上安装了Java,那么可以看到已安装的Java的版本.否则,请按照以下简单步骤安装最新版本的Java. 步骤1.1:下载JDK 通过访问链接下载最新版本的JDK,并下载最新版本的Java. 最新版本(在编写本教程时)是JDK 8u 60,文件是"jdk-8u60-l

Zookeeper详解-API(六)

ZooKeeper有一个绑定Java和C的官方API.Zookeeper社区为大多数语言(.NET,python等)提供非官方API.使用ZooKeeper API,应用程序可以连接,交互,操作数据,协调,最后断开与ZooKeeper集合的连接. ZooKeeper API具有丰富的功能,以简单和安全的方式获得ZooKeeper集合的所有功能.ZooKeeper API提供同步和异步方法. ZooKeeper集合和ZooKeeper API在各个方面都完全相辅相成,对开发人员有很大的帮助.让我们

Zookeeper详解-Cli(五)

ZooKeeper命令行界面(CLI)用于与ZooKeeper集合进行交互以进行开发.它有助于调试和解决不同的选项. 要执行ZooKeeper CLI操作,首先打开ZooKeeper服务器("bin/zkServer.sh start"),然后打开ZooKeeper客户端("bin/zkCli.sh").一旦客户端启动,你可以执行以下操作:1.创建znode2.获取数据3.监视znode的变化4.设置数据5.创建znode的子节点6.列出znode的子节点7.检查状

Zookeeper详解(八):Zookeeper数据存储

zookeeper日志有三类:快照(虽然不是日志但是它是数据).事务日志(记录每次操作).zookeeper自己系统日志.第三个不属于数据类所以这里不做说明. 快照数据 Zookeeper在运行时会在内存中维护一个完整的数据,就像内存数据库一样.ZKDatabase就是Zookeeper的内存数据库,负载管理Zookeeper的会话.存储和事务日志.它会定期dump一份数据快照到硬盘上,在Zookeeper启动时根据这个快照数据和事务日志来加载一份完整的数据到内存.这一点跟Redis很像,其实很

Zookeeper详解(九):Zookeeper高可用方面的建议和日常运维

集群数量:3.5.7这样的奇数.当然偶数也可以组成集群只是3台与4台组成的集群其实允许的故障数量是一样的,所以4台组成的集群不划算. 多机房问题:如果每个机房之间的网络状况良好可以在每个机房都部署ZK服务器来组成一个大的Zookeeper集群.首先确定你的集群规模比如是N台.然后分别计算每个机房的点数.第一个机房N1=(n-1)/2 ,第二个机房N2的取值范围是 1~(N-N1)/2,第三个机房N3就是N-N1-N2. 如果是双机房可以在一个主要机房部署多台,在一个次要机房部署少量ZK服务器.原