如何在 Ubuntu 18.04 上安装和配置 Apache ZooKeeper 集群

作者选择了 Wikimedia Foundation Inc.作为 Write for Donations计划的一部分接受捐款。

介绍

Apache ZooKeeper是一款开源软件,可实现灵活且高度可靠的分布式协调,通常用于分布式系统管理配置信息、命名服务、分布式同步、定数和状态。

在本指南中,你将安装和配置Apache ZooKeeper 3.4.13 在Ubuntu 18.04上,为了实现弹性和高可用性,ZooKeeper旨在被复制在一组主机上,称为组合。首先,你将创建单节点的ZooKeeper服务器的独立安装,然后为设置多节点集群添加细节。

前提条件

在启动此安装和配置指南之前,您需要以下内容:

  • 獨立安裝需要一個 Ubuntu 18.04 伺服器,至少需要 4 GB 的 RAM 安裝,請遵循 Ubuntu 18.04 初始伺服器安裝指南,包括具有 sudo 權限的非根用戶和防火牆。 您需要兩個額外的伺服器,以遵循相同步驟安裝,為多個節點集群。
  • OpenJDK 8 安裝在您的伺服器上,因為 ZooKeeper 需要 Java 執行。

由于 ZooKeeper 将数据存储在内存中以实现高输出量和低延迟,因此生产系统最好使用 8 GB 的 RAM。 较少的 RAM 可能会导致 JVM 交换,这可能会导致 ZooKeeper 服务器延迟。

步骤 1 — 为 ZooKeeper 创建用户

专用用户应该运行在网络上处理请求并消耗资源的服务. 这种做法会创建分离和控制,从而提高环境的安全性和可管理性. 在此步骤中,您将创建一个名为 zk的非 root sudo 用户,在本教程中运行 ZooKeeper 服务。

首先,作为您在前提条件中创建的非 root sudo 用户登录。

1[environment local]
2ssh sammy@your_server_ip

创建将运行 ZooKeeper 服务的用户:

1sudo useradd zk -m

-m标志转移到useradd命令,将为该用户创建一个主目录. zk的主目录将默认为/home/zk

bash设置为 zk 用户的默认壳:

1sudo usermod --shell /bin/bash zk

為此用戶設定密碼:

1sudo passwd zk

接下来,您将将 zk 用户添加到 sudo 组中,以便在特权模式下运行命令:

1usermod -aG sudo zk

在安全方面,建议您允许 SSH 访问尽可能少的用户。 远程登录为 sammy,然后使用su切换到所需的用户创建了访问系统和运行流程的凭证之间的分离级别。

打开sshd_config文件:

1sudo nano /etc/ssh/sshd_config

查找允许RootLogin行,并将值设置为,以禁用SSH访问 root用户:

1[label /etc/ssh/sshd_config]
2PermitRootLogin no

允许RootLogin值下,添加一个拒绝用户行,并将该值设置为任何应该禁用SSH访问的用户:

1[label /etc/ssh/sshd_config]
2DenyUsers zk

保存和退出文件,然后重新启动 SSH 示范器以激活更改。

1sudo systemctl restart sshd

切换到 zk用户:

1su -l zk

-l 旗号在切换用户后召唤登录壳,登录壳重置环境变量,为用户提供清洁的开始。

在提示中输入密码来验证用户。

现在你已经创建,配置和登录为 zk用户,你将创建一个目录来存储你的 ZooKeeper 数据。

步骤 2:为 ZooKeeper 创建数据目录

ZooKeeper坚持所有的配置和状态数据到磁盘,以便它可以幸存于重新启动. 在这个步骤中,你将创建一个数据目录,ZooKeeper将使用读取和写入数据. 你可以创建数据目录在本地文件系统或远程存储驱动器上。

创建一个 ZooKeeper 目录来使用:

1sudo mkdir -p /data/zookeeper

向目录授予您的 zk用户所有权:

1sudo chown zk:zk /data/zookeeper

「chown」會改變「/data/zookeeper」目錄的所有權和群組,使屬於「zk」群組的使用者 zk擁有資料目錄。

您已成功创建和配置数据目录. 当您继续配置 ZooKeeper 时,您将指定此路径作为 ZooKeeper 将用于存储文件的数据目录。

步骤 3 – 下载和提取 ZooKeeper 二进制

在此步骤中,您将手动下载并提取ZooKeeper二进制到/opt目录中。您可以使用高级包装工具apt下载ZooKeeper,但它可能会安装具有不同功能的较旧版本。

由于您正在手动下载这些文件,请通过更改到 /opt 目录开始:

1cd /opt

从您的本地机器,导航到 Apache下载页面。 此页面将自动为您提供最接近的镜子,以获得最快的下载。 点击向建议的镜子网站的链接,然后向下滚动,点击 zookeeper/ 查看可用的版本。 选择您想要安装的 ZooKeeper 版本。 本教程将专注于使用 3.4.13。 一旦您选择了版本,右键单击以 `.tar.gz’结束的二进制文件,并复制链接。

从您的服务器,使用wget命令和复制的链接下载ZooKeeper二进制:

1sudo wget http://apache.osuosl.org/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

从压缩档案中提取二进制:

1sudo tar -xvf zookeeper-3.4.13.tar.gz

「.tar.gz」扩展代表了 TAR 包装的组合,然后是 GNU zip (gzip) 压缩。您会注意到您将旗帜 -xvf' 传递给提取档案的命令。 旗帜 x' 代表提取, v' 允许 verbose 模式显示提取进度,而 f' 允许指定输入,在我们的情况下 `zookeeper-3.4.13.targz',而不是 STDIN。

接下来,给 zk用户提取的二进制的所有权,这样它就可以运行可执行的。

1sudo chown zk:zk -R zookeeper-3.4.13

接下来,您将配置一个符号链接,以确保您的 ZooKeeper 目录在更新中保持相关性. 您还可以使用符号链接来缩短目录名称,从而减少设置配置文件所需的时间。

使用ln命令创建一个符号链接。

1sudo ln -s zookeeper-3.4.13 zookeeper

将该链接的所有权更改为zk:zk。请注意,您已经通过了-h标志,以更改链接本身的所有权。

1sudo chown -h zk:zk zookeeper

通过创建符号链接,您的目录路径在配置中将保持相关和未变,通过未来的升级。

步骤 4 – 配置 ZooKeeper

现在你已经设置了环境,你已经准备好配置 ZooKeeper。

配置文件将生活在 /opt/zookeeper/conf 目录中. 此目录包含与 ZooKeeper 分布一起的样本配置文件。 这个样本文件,名为 `zoo_sample.cfg',包含这些参数最常见的配置参数定义和样本值。 一些常见参数如下:

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

创建一个名为 zoo.cfg 的配置文件在 /opt/zookeeper/conf. 您可以使用 nano 或您最喜欢的编辑器创建和打开一个文件:

1nano /opt/zookeeper/conf/zoo.cfg

向该文件添加以下属性和值集:

1[label /opt/zookeeper/conf/zoo.cfg]
2tickTime=2000
3dataDir=/data/zookeeper
4clientPort=2181
5maxClientCnxns=60

2000毫秒的tickTime是心跳之间建议的间隔。较短的间隔可能会导致系统的过度使用,并且受益有限。dataDir参数指向您在上一节所创建的符号链接所定义的路径。通常,ZooKeeper 使用端口2181来收听客户端连接。在大多数情况下,60个允许的客户端连接充足用于开发和测试。

保存文件并离开编辑器。

您已经配置了 ZooKeeper 并准备启动服务器。

步骤 5 – 启动 ZooKeeper 并测试独立安装

您已经配置了运行 ZooKeeper 所需的所有组件. 在此步骤中,您将启动 ZooKeeper 服务并通过本地连接到服务来测试您的配置。

返回/opt/zookeeper目录。

1cd /opt/zookeeper

使用zkServer.sh命令启动 ZooKeeper。

1bin/zkServer.sh start

您将在您的标准输出中看到以下内容:

1[secondary_label Output]
2ZooKeeper JMX enabled by default
3Using config: /opt/zookeeper/bin/../conf/zoo.cfg
4Starting zookeeper ... STARTED

使用以下命令连接到本地 ZooKeeper 服务器:

1bin/zkCli.sh -server 127.0.0.1:2181

您将收到标签为CONNECTED的提示,这表明您已成功安装了本地独立的 ZooKeeper。 如果您遇到错误,您将想要验证配置是否正确。

1[secondary_label Output]
2Connecting to 127.0.0.1:2181
3...
4...
5[zk: 127.0.0.1:2181(CONNECTED) 0]

在这个提示中键入帮助,以获取您可以从客户端执行的命令列表。

 1[secondary_label Output]
 2[zk: 127.0.0.1:2181(CONNECTED) 0] help
 3ZooKeeper -server host:port cmd args
 4    stat path [watch]
 5    set path data [version]
 6    ls path [watch]
 7    delquota [-n|-b] path
 8    ls2 path [watch]
 9    setAcl path acl
10    setquota -n|-b val path
11    history
12    redo cmdno
13    printwatches on|off
14    delete path [version]
15    sync path
16    listquota path
17    rmr path
18    get path [watch]
19    create [-s] [-e] path data acl
20    addauth scheme auth
21    quit
22    getAcl path
23    close
24    connect host:port

在您完成了一些测试后,您将通过在提示中键入quit来关闭客户端会话. 在您关闭客户端会话后,ZooKeeper 服务将继续运行.关闭 ZooKeeper 服务,因为您将在下一步将其配置为systemd服务:

1bin/zkServer.sh stop

您现在已经安装、配置并测试了独立的 ZooKeeper 服务. 此设置有助于您熟悉 ZooKeeper,但也对开发和测试环境有用。

步骤 6 — 创建和使用 Systemd 单元文件

`systemd,系统和服务管理器,是一个 init 系统,用于启动用户空间,并在启动后管理系统流程。

Systemd Essentials是一个很好的介绍资源来了解更多关于systemd及其组成部分。

使用您的编辑器创建一个名为zk.service.service文件在/etc/systemd/system/

1sudo nano /etc/systemd/system/zk.service

将下列行添加到文件中以定义 ZooKeeper 服务:

 1[label /etc/systemd/system/zk.service]
 2[Unit]
 3Description=Zookeeper Daemon
 4Documentation=http://zookeeper.apache.org
 5Requires=network.target
 6After=network.target
 7
 8[Service]    
 9Type=forking
10WorkingDirectory=/opt/zookeeper
11User=zk
12Group=zk
13ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
14ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
15ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
16TimeoutSec=30
17Restart=on-failure
18
19[Install]
20WantedBy=default.target

单元文件配置中的服务部分指定了工作目录、该服务将运行的用户以及启动、停止和重新启动 ZooKeeper 服务的可执行命令。

保存文件并离开编辑器。

现在,你的systemd配置已经到位,你可以开始服务:

1sudo systemctl start zk

一旦您确认您的systemd文件可以成功启动服务,您将允许该服务启动。

1sudo systemctl enable zk

此输出证实了象征链接的创建:

1[secondary_label Output]
2Created symlink /etc/systemd/system/multi-user.target.wants/zk.service → /etc/systemd/system/zk.service.

查看使用 ZooKeeper 服务的状态:

1sudo systemctl status zk

停止使用systemctl的 ZooKeeper 服务。

1sudo systemctl stop zk

最后,要重新启动 DAEMON,请使用以下命令:

1sudo systemctl restart zk

现在你已经配置了systemd来管理ZooKeeper,你可以利用这个快速而灵活的 init模型来启动,停止和重新启动ZooKeeper服务。

步骤 7 — 配置多节点 ZooKeeper 集群

虽然独立的 ZooKeeper 服务器对于开发和测试是有用的,但每个生产环境都应该有一个复制的多节点集群。

在 ZooKeeper 集群中,作为一个应用程序一起工作的节点构成一个 quorum. Quorum 是指在进行交易之前需要达成协议的节点的最小数目。

在生产环境中,您应该在单独的主机上运行每一个 ZooKeeper 节点,从而防止服务中断,因为主机硬件故障或重新启动,这是构建具有弹性且高度可用的分布式系统的重要和必要的架构考虑。

在本教程中,您将安装和配置三节点,以演示多节点设置。在配置三节点集群之前,您将创建两个与独立的 ZooKeeper 安装相同配置的额外服务器。

一旦您遵循新的节点的步骤一到六,请在每个节点的编辑器中打开zoo.cfg

1sudo nano /opt/zookeeper/conf/zoo.cfg

在您在三个节点中的每个zoo.cfg文件中,在文件的末尾添加initLimit,syncLimit和该组中的服务器的额外配置参数和值。

 1[label /opt/zookeeper/conf/zoo.cfg]
 2tickTime=2000
 3dataDir=/data/zookeeper
 4clientPort=2181
 5maxClientCnxns=60
 6initLimit=10
 7syncLimit=5
 8server.1=your_zookeeper_node_1:2888:3888
 9server.2=your_zookeeper_node_2:2888:3888
10server.3=your_zookeeper_node_3:2888:3888

initLimit 指示初始同步阶段所需的时间。 这个时间是定数中的每个节点需要连接到领导者之间的时间。 syncLimit 指示发送请求和接收确认之间可以过的时间。 这是节点可以从领导者中失灵的最大时间。 ZooKeeper 节点使用一对端口,分别是 :2888:3888,用于跟随节点连接到领导者节点和进行领导者选举。

一旦您在每个节点上更新了文件,您将保存并退出编辑器。

要完成多节点配置,您将在每个服务器上指定一个节点ID。 要做到这一点,您将在每个节点上创建一个myid文件。 每个文件将包含与配置文件中分配的服务器号码相关的号码。

your_zookeeper_node_1上,创建将指定节点ID的myid文件:

1sudo nano /data/zookeeper/myid

由于 your_zookeeper_node_1被识别为server.1,您将输入1来定义节点ID。

1[secondary_label your_zookeeper_node_1 /data/zookeeper/myid]
21

对于剩余节点,请遵循相同的步骤,每个节点上的myid文件应如下:

1[secondary_label your_zookeeper_node_1 /data/zookeeper/myid]
21
1[secondary_label your_zookeeper_node_2 /data/zookeeper/myid][environment second]
22
1[secondary_label your_zookeeper_node_3 /data/zookeeper/myid][environment third]
23

您现在已经配置了三个节点的 ZooKeeper 集群,接下来,您将运行集群并测试您的安装。

步骤 8 – 运行和测试多节点安装

随着每个节点配置为作为一个群集工作,你已经准备好开始一个定数。 在此步骤中,你将开始每个节点的定数,然后通过在 ZooKeeper 中创建样本数据来测试你的群集。

要启动一个定数节点,首先切换到每个节点上的/opt/zookeeper目录:

1cd /opt/zookeeper

用以下命令启动每个节点:

1java -cp zookeeper-3.4.13.jar:lib/log4j-1.2.17.jar:lib/slf4j-log4j12-1.7.25.jar:lib/slf4j-api-1.7.25.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg

随着节点的启动,你会间歇性地看到一些连接错误,然后有一个阶段,他们加入了定数,并在他们中间选出一个领导者。

通过 SSH 登录到 your_zookeeper_node_3作为您在前提条件中配置的非根用户:

1[environment local]
2ssh sammy@your_zookeeper_node_3

一旦登录,切换到您的 zk用户:

1[secondary_label your_zookeeper_node_3 /data/zookeeper/myid][environment third]
2su -l zk

输入 zk用户的密码. 登录后,更改目录为 /opt/zookeeper:

1[secondary_label your_zookeeper_node_3 /data/zookeeper/myid][environment third]
2cd /opt/zookeeper

您现在将启动 ZooKeeper 命令行客户端,并在 your_zookeeper_node_1上连接到 ZooKeeper:

1[secondary_label your_zookeeper_node_3 /data/zookeeper/myid][environment third]
2bin/zkCli.sh -server your_zookeeper_node_1:2181

在独立安装中,客户端和服务器都在同一个主机上运行,这使您可以使用localhost建立与ZooKeeper服务器的客户端连接,因为客户端和服务器在多节点集群中运行在不同的节点上,在之前的步骤中,您需要指定 your_zookeeper_node_1的IP地址才能连接到它。

您将看到熟悉的提示标签连接,类似于您在步骤 5 中看到的。

接下来,您将创建、列出,然后删除一个 znode。Znodes 是 ZooKeeper 中的基本抽象,与文件系统上的文件和目录类似。

测试您是否能够成功创建、列出并删除一个znode是确认您的ZooKeeper集群是否正确安装和配置的关键。

创建一个名为 zk_znode_1 的 znode,并将字符串 sample_data 与之关联。

1create /zk_znode_1 sample_data

您将看到下面的输出,一旦创建:

1[secondary_label Output]
2Created /zk_znode_1

列出新创建的node:

1ls /

获取与之相关的数据:

1get /zk_znode_1

ZooKeeper会这样回答:

 1[secondary_label Output]
 2[zk: your_zookeeper_node_1:2181(CONNECTED)] ls /
 3[zk_znode_1, zookeeper]
 4[zk: your_zookeeper_node_1:2181(CONNECTED)] get /zk_znode_1
 5sample_data
 6cZxid = 0x100000002
 7ctime = Tue Nov 06 19:47:41 UTC 2018
 8mZxid = 0x100000002
 9mtime = Tue Nov 06 19:47:41 UTC 2018
10pZxid = 0x100000002
11cversion = 0
12dataVersion = 0
13aclVersion = 0
14ephemeralOwner = 0x0
15dataLength = 11
16numChildren = 0

输出确认了与 zk_node_1 关联的值,即 样本_数据. ZooKeeper 还提供有关创建时间、ctime 和修改时间的额外信息,即 mtime。

请删除 zk_znode_1 znode:

1delete /zk_znode_1

在此步骤中,您成功测试了两个 ZooKeeper 节点之间的连接性,您还通过创建、列出和删除节点来学习了基本的 znode 管理。

结论

在本教程中,您已配置并测试了独立和多节点的 ZooKeeper 环境. 现在,您的多节点 ZooKeeper 部署已准备好使用,您可以查看 官方 ZooKeeper 文档 获取更多信息和项目。

Published At
Categories with 技术
comments powered by Disqus