如何在 Ubuntu 18.04 LTS 上设置 Apache ZooKeeper 集群
本教程适用于这些操作系统版本
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 18.04(仿生海狸)
在此页
- 要求
- 开始
- 安装Java
- 创建 ZooKeeper 用户
- 安装动物园管理员
- 配置动物园管理员
- 为 ZooKeeper 创建一个 Systemd 服务文件
Zookeeper 是一种集中式服务,用于管理配置信息、命名、分布式同步和提供作为开源软件发布的组服务。它是用 Java 语言编写的,使您可以专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 ZooKeepers 架构通过冗余服务支持高可用性。 Zookeeper 使分布式进程能够通过数据寄存器的公共分层命名空间相互协调。 Zookeeper 还为其客户提供高吞吐量、高可用性、低延迟和对 Znode 的严格控制访问。 Zookeeper 专门用于存储状态信息、配置、位置信息等。 ZooKeeper 提供许多特性,如可靠的系统、简单的架构、快速处理、可扩展性等等。
在本教程中,我们将学习如何在 Ubuntu 18.04 上设置单节点 Apache ZooKeeper 集群。
要求
- 一台运行 Ubuntu 18.04 的服务器。
- 在您的服务器上设置了根密码。
入门
首先,您需要使用最新版本更新您的系统。您可以通过运行以下命令来执行此操作:
apt-get update -y
apt-get upgrade -y
系统更新后,重新启动系统以应用所有更改。
安装Java
Zookeeper 是用 Java 编写的。因此,您需要在系统中安装 Java。默认情况下,最新版本的 Java 在 Ubuntu 18.04 默认存储库中不可用。因此,使用以下命令添加 Java 存储库:
add-apt-repository ppa:linuxuprising/java
接下来,更新存储库并使用以下命令安装 Java:
apt-get update -y
apt-get install oracle-java11-set-default
安装 Java 后,您可以使用以下命令检查 Java 版本:
java --version
您应该看到以下输出:
java 11.0.2 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)
完成后,您可以继续下一步。
创建 ZooKeeper 用户
接下来,您需要创建一个 zookeeper 用户来运行 zookeeper 服务。
首先,使用以下命令创建一个 zookeeper 用户:
useradd zookeeper -m
usermod --shell /bin/bash zookeeper
接下来,使用以下命令设置密码:
passwd zookeeper
接下来,将 zookeeper 用户添加到 sudo 组,以便它可以在特权模式下运行命令:
usermod -aG sudo zookeeper
创建用户后,您可以安装 ZooKeeper。
安装 ZooKeeper
ZooKeeper 将所有配置和状态数据存储到磁盘。因此,您需要使用以下命令为 ZooKeeper 创建一个目录结构:
mkdir -p /data/zookeeper
接下来,使用以下命令为 /data 目录赋予适当的所有权:
chown -R zookeeper:zookeeper /data/zookeeper
接下来,将目录更改为 /opt 并使用以下命令下载最新版本的 ZooKeeper:
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
接下来,使用以下命令解压缩下载的文件:
tar -xvzf zookeeper-3.4.9.tar.gz
接下来,使用以下命令重命名提取的二进制文件:
mv zookeeper-3.4.9 zookeeper
接下来,使用以下命令将所有权授予 ZooKeeper 用户:
chown -R zookeeper:zookeeper /opt/zookeeper
配置 ZooKeeper
接下来,您需要为 ZooKeeper 创建一个配置文件。您可以使用以下命令执行此操作:
nano /opt/zookeeper/conf/zoo.cfg
添加以下行:
tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80
完成后保存并关闭文件。
接下来,使用以下命令启动 ZooKeeper 服务:
cd /opt/zookeeper
bin/zkServer.sh start
您应该看到以下输出:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
您可以使用以下命令连接到本地 ZooKeeper 服务器:
bin/zkCli.sh -server 127.0.0.1:2181
成功连接后,您应该会看到以下输出:
[zk: 127.0.0.1:2181(CONNECTED) 1]
现在,在提示符下键入 help,您应该会看到可以从客户端执行的命令列表。
help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
现在,键入 quit 以退出连接的会话。
您可以使用以下命令停止 ZooKeeper:
bin/zkServer.sh stop
您应该看到以下输出:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
为 ZooKeeper 创建一个 Systemd 服务文件
接下来,您需要创建一个 systemd 服务文件来管理 ZooKeeper 服务。您可以使用以下命令执行此操作:
nano /etc/systemd/system/zookeeper.service
添加以下行:
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target
完成后保存并关闭文件。
接下来,重新加载 systemd 守护进程,启动 ZooKeeper 服务并使用以下命令使其在引导时启动:
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
您可以使用以下命令检查 ZooKeeper 服务的状态:
systemctl status zookeeper
您应该看到以下输出:
? zookeeper.service - Zookeeper Daemon
Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2019-03-06 15:03:01 UTC; 5s ago
Docs: http://zookeeper.apache.org
Process: 3909 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
Main PID: 3926 (java)
Tasks: 17 (limit: 1113)
CGroup: /system.slice/zookeeper.service
??3926 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/..
Mar 06 15:03:00 ubuntu1804 systemd[1]: Starting Zookeeper Daemon...
Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: ZooKeeper JMX enabled by default
Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: Using config: /opt/zookeeper/conf/zoo.cfg
Mar 06 15:03:01 ubuntu1804 zkServer.sh[3909]: Starting zookeeper ... STARTED
Mar 06 15:03:01 ubuntu1804 systemd[1]: Started Zookeeper Daemon.
恭喜!您已在 Ubuntu 18.04 服务器上成功安装和配置 ZooKeeper 单节点集群。您现在可以为生产部署多节点 ZooKeeper 集群。如果您有任何问题,请随时问我。