如何在 Ubuntu 18.04 中安装和配置 Zookeeper
Zookeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步、提供组服务。 所有这些类型的服务都以某种形式由分布式应用程序使用。
在本文中,我们解释了在 Ubuntu 18.04 上安装和配置具有确定法定人数的 3 节点 Zookeeper 集群的必要步骤。
在本教程中您将学习:
什么是 Zookeeper 及其概述。
Zookeeper的架构是怎样的。
如何配置 Zookeeper 主机和添加 Zookeeper 用户。
如何安装和配置 Oracle JDK。
如何配置和设置 Zookeeper。
如何配置工作节点加入 Swarm 集群。
如何验证 Zookeeper 集群和整体。
Zookeeper 架构概述。
动物园管理员概述
Zookeeper 允许分布式进程通过数据寄存器(我们将这些寄存器称为 znode)的共享分层名称空间相互协调,就像文件系统一样。与普通文件系统不同,Zookeeper 为其客户端提供高吞吐量、低延迟、高可用性、严格有序的 znode 访问。
Zookeeper 的性能方面使其能够在大型分布式系统中使用。可靠性方面防止它成为大型系统中的单点故障。其严格的排序允许在客户端实现复杂的同步原语。
Zookeeper 提供的名称空间与标准文件系统的名称空间非常相似。名称是由斜杠(“/”)分隔的路径元素序列。 Zookeeper 命名空间中的每个 znode 都由路径标识。并且每个znode都有一个父节点,其路径是该znode的前缀少一个元素;此规则的例外是根(“/”),它没有父级。此外,与标准文件系统一样,如果 znode 有任何子节点,则无法删除它。
Zookeeper被设计用来存储协调数据:状态信息、配置、位置信息等。
Zookeeper的架构
为了获得可靠的 Zookeeper 服务,您应该将 Zookeeper 部署在称为集成的集群中。只要大多数集合都已启动,该服务就可用。因为Zookeeper需要多数,所以最好使用奇数台机器。例如,四台机器的Zookeeper只能处理单台机器的故障;如果两台机器出现故障,剩下的两台机器不占多数。然而,如果有五台机器,Zookeeper 就可以处理两台机器的故障。
下面对 Zookeeper 架构中的每一个组件进行了解释。
客户端 – 客户端是分布式应用程序集群中的节点之一,从服务器访问信息。在特定的时间间隔内,每个客户端都会向服务器发送一条消息,让服务器知道该客户端还活着。同样,当客户端连接时,服务器会发送一个确认。如果连接的服务器没有响应,客户端会自动将消息重定向到另一台服务器。
服务器 – 服务器是我们 Zookeeper 整体中的节点之一,为客户端提供所有服务。向客户端发出确认,通知服务器处于活动状态。
Leader – 如果任何连接的节点出现故障,则执行自动恢复的服务器节点。领导者在服务启动时选举产生。
Follower – 遵循领导者指令的服务器节点。
配置 Zookeeper 主机并添加 Zookeeper 用户
在安装配置所需的Zookeeper包之前,我们将在所有Ubuntu节点上配置hosts文件。之后,我们将在所有三个节点上创建zookeeper用户,因为zookeeper守护进程需要作为zookeeper用户本身运行。
这里我们使用了3台Ubuntu 18.04机器。
Zookeeper Node1 – 192.168.1.102 (hostname - node1)
Zookeeper Node2 – 192.168.1.103 (hostname – node2)
Zookeeper Node3 – 192.168.1.105 (hostname - node3)
通过 gedit
或 vim
在所有三个节点上编辑 /etc/hosts
文件,并执行以下更改:
192.168.1.102 node1
192.168.1.103 node2
192.168.1.105 node3
在hosts文件中修改上述详细信息后,使用ping检查所有节点之间的连接性。
现在,使用以下命令创建新的 zookeeper
用户和组:
# adduser zookeeper
安装和配置 Oracle JDK
下载 Java 存档并将其解压到 /opt
目录下。有关更多信息,请参阅如何在 Ubuntu 18.04 上安装 java。
要将 JDK 1.8 Update 192 设置为默认 JVM,我们将使用以下命令:
# update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_192/bin/java 100
# update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_192/bin/javac 100
安装后验证java是否已成功配置,运行以下命令:
# update-alternatives --display java
# update-alternatives --display javac
要检查 Java 版本,请运行以下命令:
# java -version
安装成功后您将得到以下信息:
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
配置和设置 Zookeeper
从所有三台 Ubuntu 计算机的官方 Apache 存档中下载并解压 Zookeeper 包,如下所示:
$ wget https://www-us.apache.org/dist/zookeeper/stable/zookeeper-3.4.12.tar.gz
$ tar -xzvf zookeeper-3.4.12.tar.gz
通过设置以下 Zookeeper 环境变量来编辑 Zookeeper 用户的 bashrc。
export ZOO_LOG_DIR=/var/log/zookeeper
在当前登录会话中获取 .bashrc:
$ source ~/.bashrc
现在,在 /var/lib
文件夹下创建目录 zookeeper
作为 Zookeeper 数据目录,并在 / 下创建另一个
将捕获所有 Zookeeper 日志。两个目录所有权都需要更改为zookeeper。zookeeper
目录var/log
$ sudo mkdir /var/lib/zookeeper ; cd /var/lib ; sudo chown zookeeper:zookeeper zookeeper/
$ sudo mkdir /var/log/zookeeper ; cd /var/log ; sudo chown zookeeper:zookeeper zookeeper/
为 ensemble 创建服务器 ID。每个 Zookeeper 服务器在集合中的 myid
文件中应该有一个唯一的编号,并且值应该在 1 到 255 之间。
在节点1中
$ sudo sh -c "echo '1' > /var/lib/zookeeper/myid"
在节点2中
$ sudo sh -c "echo '2' > /var/lib/zookeeper/myid"
在节点3中
$ sudo sh -c "echo '3' > /var/lib/zookeeper/myid"
现在,转到 Zookeeper 主目录下的 conf 文件夹(解压缩/提取存档后 Zookeeper 目录的位置)。
$ cd /home/zookeeper/zookeeper-3.4.13/conf/
zookeeper@node1:~/zookeeper-3.4.13/conf$ ls -lrth
total 16K
-rw-r--r-- 1 zookeeper zookeeper 922 Jun 29 21:04 zoo_sample.cfg
-rw-r--r-- 1 zookeeper zookeeper 535 Jun 29 21:04 configuration.xsl
-rw-r--r-- 1 zookeeper zookeeper 999 Nov 24 18:29 zoo.cfg
-rw-r--r-- 1 zookeeper zookeeper 2.2K Nov 24 19:07 log4j.properties
默认情况下,名为 zoo_sample.cfg
的示例 conf 文件将出现在 conf
目录中。您需要创建一个名为 zoo.cfg
的副本,如下所示,并按照在所有三台 Ubuntu 计算机上的描述编辑新的 zoo.cfg
。
$ cp zoo_sample.cfg zoo.cfg
$ ls -lrth /home/zookeeper/zookeeper-3.4.13/conf
total 16K
-rw-r--r-- 1 zookeeper zookeeper 922 Jun 29 21:04 zoo_sample.cfg
-rw-r--r-- 1 zookeeper zookeeper 535 Jun 29 21:04 configuration.xsl
-rw-r--r-- 1 zookeeper zookeeper 999 Nov 24 18:29 zoo.cfg
-rw-r--r-- 1 zookeeper zookeeper 2.2K Nov 24 19:07 log4j.properties
$ vim /home/zookeeper/zookeeper-3.4.13/conf/zoo.cfg
dataDir=/var/lib/zookeeper
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
Zookeeper 配置更改。
现在,在 log4.properties
文件中进行以下更改,如下所示。
$ vim /home/zookeeper/zookeeper-3.4.13/conf/log4j.properties
zookeeper.log.dir=/var/log/zookeeper
zookeeper.tracelog.dir=/var/log/zookeeper
log4j.rootLogger=INFO, CONSOLE, ROLLINGFILE
Zookeeper log4j 配置更改。
在所有三个节点的zoo.cfg文件中完成配置后,使用以下命令在所有三个节点中一一启动zookeeper:
$ /home/zookeeper/zookeeper-3.4.13/bin/zkServer.sh start
Zookeeper 服务在所有三个节点上启动。
日志文件将在 Zookeeper 的 /var/log/zookeeper
中创建,名为 zookeeper.log
,尾随该文件以查看日志中是否有任何错误。
$ tail -f /var/log/zookeeper/zookeeper.log
验证 Zookeeper 集群和 Ensemble
在 Zookeeper 整体中,三台服务器中,一台处于领导者模式,另外两台处于跟随者模式。您可以通过运行以下命令来检查状态。
$ /home/zookeeper/zookeeper-3.4.13/bin/zkServer.sh status
Zookeeper 服务状态检查。
$ echo stat | nc node1 2181
列出服务器和连接的客户端的简要详细信息。
$ echo mntr | nc node1 2181
用于集群健康监控的 Zookeeper 变量列表。
$ echo srvr | nc localhost 2181
列出 Zookeeper 服务器的完整详细信息。
如果您需要检查并查看 znode,可以在任何 Zookeeper 节点上使用以下命令进行连接:
$ /home/zookeeper/zookeeper-3.4.13/bin/zkCli.sh -server `hostname -f`:2181
连接到Zookeeper数据节点并列出内容。
结论
它已成为大规模创建高可用分布式系统的首选之一。 Zookeeper 项目是 Apache 基金会最成功的项目之一,它已获得顶级公司的广泛采用,带来了与大数据相关的众多好处。
Apache Zookeeper 为实施不同的大数据工具提供了坚实的基础,使公司能够在大数据世界中顺利运作。它同时提供多种好处的能力使其成为大规模实施的最优选的应用程序之一。