Apache ZooKeeper 分布式协调服务解析

分布式系统的构建和管理中,数据的同步、序列化和协调是至关重要的。Apache ZooKeeper,作为一个集中式的存储库,允许分布式应用程序存储和检索数据,使得整个分布式系统能够协同工作。ZooKeeper可以被视作一个文件系统,其中的节点用于存储数据,而非文件或目录。它是一个Hadoop管理员工具,用于在集群中管理作业。

Apache ZooKeeper的正式定义表明,它是一个分布式的、开源的配置和同步服务,同时也是分布式应用的名称注册服务。它被用来管理和协调大量的机器集群。例如,Twitter使用的Apache Storm,用于存储机器状态数据,将Apache ZooKeeper作为机器之间的协调器。

在Hadoop中,分布式应用程序由于连接到网络的机器数量众多,因此更难以协调和处理,因为它们更容易出现错误。由于涉及的机器众多,竞态条件和死锁是实现分布式应用程序时常见的问题。竞态条件发生在一台机器尝试同时执行两个或更多操作时,这可以通过ZooKeeper的序列化特性来解决。

死锁发生在两台或多台计算机尝试同时访问同一共享资源时。更准确地说,它们试图访问彼此的资源,这导致死锁,因为没有一个系统释放资源,而是等待另一个系统释放。ZooKeeper中的同步功能有助于解决死锁问题。分布式应用程序的另一个主要问题是部分进程失败,导致数据不一致。ZooKeeper通过原子性处理这个问题,意味着要么整个进程终止,要么失败后什么也不留下。因此,ZooKeeper是Hadoop的重要组成部分,它处理这些小但重要的事务,以便开发者可以更专注于应用程序的功能。

HadoopZooKeeper架构是一个遵循简单客户端-服务器模型的分布式应用程序,其中客户端是消耗服务的节点,服务器是提供服务的节点。多个服务器节点统称为ZooKeeper文件。ZooKeeper客户端在任何给定时间至少使用一个服务器。

主节点是基于集合内的共识动态选择的,因此ZooKeeper文件通常是奇数,以确保大多数投票。如果主节点失败,另一个主节点会立即被选中并接管前一个主节点。除了主节点和从节点,ZooKeeper中还有观察者。引入观察者是为了解决扩展问题。增加从节点影响了写入性能,因为投票过程成本较高。观察者因此是不参与投票的从节点,但与其他从节点有类似的职责。

在ZooKeeper架构中,所有写入操作都通过主节点进行,因此所有写入操作都保证是顺序的。当对ZooKeeper执行写入操作时,每个连接到该客户端的服务器都与主服务器一起存储数据。这使得所有服务器都与数据保持更新。然而,这也意味着不能执行并发写入。线性写入保证如果ZooKeeper用于主要写入负载可能会有问题。

ZooKeeper在Hadoop中理想地用于协调客户端之间的消息交换,这涉及到较少的写入和更多的读取。ZooKeeper在数据共享时很有用,但如果应用程序有并发数据写入,ZooKeeper可能会碍事并强加严格的操作顺序。

ZooKeeper在读取方面最擅长,因为读取可以并发进行。并发读取之所以能够执行,是因为每个客户端都连接到不同的服务器,所有客户端都可以同时从服务器读取。然而,并发读取会导致最终一致性,因为主服务器没有参与。可能会出现客户端可能有过时视图的情况,但会在小延迟后更新。

如何使用Apache ZooKeeper构建分布式应用程序?ZooKeeper架构完成了上述所有细节,用户不需要做任何事情。一个指挥官被选择,观察者被设置,为用户使用ZooKeeper做好了准备。与早期用户相比,ZooKeeper可以被用作一个文件系统,其中可以创建目录并存储数据。像任何其他文件系统一样,上述创建的目录也可以有子目录和孙目录。这个文件系统是集中存储的,并且可以从任何地方访问。

Apache ZooKeeper的一个例子可能是一个数据模型。在例子中,每个目录被称为ZooKeeper中的一个znode。存储统计数据,如版本详情和用户数据,大小高达1 Mb。这个小信息存储空间清楚地表明ZooKeeper不是用来像数据库那样存储数据的,而是用来存储少量数据,如必须共享的配置数据。

有两种类型的znode:

  • 持久性:这是ZooKeeper中每个节点的默认类型。持久性节点始终存在,并包含重要的配置细节。当向ZooKeeper添加新节点时,它进入永久节点并获得配置信息。
  • 临时性:这些是会话节点,当应用程序启动时创建,并在应用程序结束时删除。这主要用于检查客户端应用程序在失败时的情况。当应用程序崩溃时,znode死亡。

安装Apache ZooKeeper

以下是下载和安装ZooKeeper 3.4.6的步骤,配置3个ZooKeeper节点:

  1. 下载并安装JDK,如果尚未安装,请访问或。Apache ZooKeeper服务器运行在JVM上,这是一个重要的先决条件。
  2. 访问并从发布页面下载ZooKeeper。
  3. 选择从镜像下载,并选择第一个镜像。
  4. 转到稳定文件夹并下载zookeeper-3.4.6.tar.gz。
  5. 使用tar -zxvf zookeeper-3.4.6.tar.gz解压tarball。
  6. 使用mkdir /usr/local/zookeeper/data创建目录。可以作为root创建此目录,并将所有者更改为需要的任何用户。
  7. 使用sudo vi /usr/local/zookeeper/conf/zoo.cfg创建ZooKeeper配置文件,并插入以下代码:
tickTime = 2000 syncLimit = 5 dataDir = /usr/local/zookeeper/data clientPort = 2181 server.1 = Master : 2888 : 3888 server.2 = Slave1 : 2888 : 3888 server.3 = Slave2 : 2888 : 3888
  1. 使用sudo vi /usr/local/zookeeper/data/myid在数据文件夹中创建一个名为myid的文件,并在此文件中写入“1”(不带引号)并保存。
  2. 为其他2个服务器执行步骤1至7,但将myid数据更改为服务器2的2和服务器3的3。
  3. 使用zkServer.sh start命令在所有服务器上启动ZooKeeper。
  4. 要确认ZooKeeper已启动,请输入jps并检查QuorumPeerMain。
  5. 使用zkCli.sh -server Slave1:2181命令启动客户端。

使用ZooKeeper

以下是如何使用ZooKeeper的几点说明:

  • 将配置数据和设置存储在集中式存储库中,以便从任何地方访问。
  • 消息队列用于异步通信,例如,用户点击按钮在网站上下订单,生成订单需要一些时间,因此用户不必等待,而是可以将订单放入消息队列,用户可以继续购物。
  • ZooKeeper架构Hadoop可以作为看门狗运行,其他节点可以通过通知了解一个节点中的数据变化。

结论

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485