Zookeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步、提供组服务。
分布式应用程序以某种形式使用所有这些类型的服务。
配置zookeeper主机并添加zookeeper用户
在安装必要的Zookeeper软件包之前,我们将在所有Ubuntu节点上配置主机文件。
之后,我们将在所有三个节点上创建 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)
编辑 /etc/hosts
文件并进行以下更改:
192.168.1.102 node1 192.168.1.103 node2 192.168.1.105 node3
在主机文件中使用上述详细信息修改后,请检查所有节点之间的ping连接。
现在,使用命令创建新的zookeeper
用户和组:
# adduser zookeeper
安装和配置Oracle JDK
有关更多信息,请查阅如何在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是否已成功配置了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的体系结构
为了获得可靠的Zookeeper服务,您应该在称为集成的集群中部署Zookeeper。只要大多数合奏者都在,这项服务就可以使用。因为Zookeeper需要多数,所以最好使用奇数台机器。例如,有了四台机器,Zookeeper只能处理一台机器的故障;如果两台机器出现故障,其余两台机器不构成多数。然而,有了五台机器,Zookeeper可以处理两台机器的故障。
作为Zookeeper体系结构一部分的每一个组件都在下面进行了解释。
- 客户端–客户机是分布式应用程序集群中的一个节点,从服务器访问信息。在特定的时间间隔内,每个客户端向服务器发送一条消息,让服务器知道客户端处于活动状态。同样,当客户端连接时,服务器发送确认。如果连接的服务器没有响应,客户端会自动将消息重定向到另一台服务器。
- 服务器–服务器是Zookeeper集合中的一个节点,为客户端提供所有服务。向客户端发出确认,通知服务器处于活动状态。
- Leader–服务器节点,在任何连接的节点出现故障时执行自动恢复。服务启动时选举领导人。
- Follower–遵循leader指令的服务器节点。
验证 Zookeeper Cluster 和 Ensemble
在 Zookeeper ensemble 中的三台服务器中,一台将处于leader模式,另外两台将处于follower模式。 您可以通过运行以下命令来检查状态。
$ /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
如果您需要检查和查看 znode,您可以在任何 Zookeeper 节点上使用以下命令进行连接:
$ /home/zookeeper/zookeeper-3.4.13/bin/zkCli.sh -server `hostname -f`:2181
安装和配置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
编辑 bashrc
,为 zookeeper 用户设置 Zookeeper 环境变量。
export ZOO_LOG_DIR=/var/log/zookeeper
source一下,使环境变量在当前会话中生效。
$ source ~/.bashrc
现在,在 /var/lib
文件夹下创建目录 zookeeper
作为 Zookeeper 数据目录,并在 /var/log
下创建另一个 zookeeper
目录,所有 Zookeeper 日志将被捕获。 两个目录所有权都需要更改为zookeeper。
$ 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/
为整体创建服务器 ID。 每个zookeeper服务器在ensemble内的myid
文件中都应该有一个唯一的编号,并且值应该在1到255之间。
在node1中:
$ sudo sh -c "echo '1' > /var/lib/zookeeper/myid"
在node2中:
$ sudo sh -c "echo '2' > /var/lib/zookeeper/myid"
在node3中:
$ 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
在所有三个节点中的Zoo.cfg
文件中完成了配置之后,使用以下命令将在所有三个节点中启动zookeeper:
$ /home/zookeeper/zookeeper-3.4.13/bin/zkServer.sh start
日志文件将在名为 zookeeper.log
的 zookeeper 的 /var/log/zookeeper
中创建,尾文件以查看任何错误的日志。
$ tail -f /var/log/zookeeper/zookeeper.log