本节书摘来异步社区《HBase管理指南》一书中的第1章,第1.5节,作者: 蒋燚峰 译者: 苏南,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 ZooKeeper安装
分布式的HBase需要运行一个ZooKeeper集群。HBase集群的所有节点和客户端都必须能够访问该ZooKeeper仲裁团。
此节将描述如何建立一个ZooKeeper集群。我们将仅为我们的HBase集群建立一个单机运行的ZooKeeper节点,但是如果是在生产环境中,就应该建立一个至少含有三个节点ZooKeeper仲裁团。此外,还要确保运行节点的个数是奇数。
我们将在本节的“1.5.4 补充说明”一节中讨论集群式ZooKeeper的安装。
1.5.1 准备
首先,要确保在你的ZooKeeper服务器上已经安装好了Java。
我们将使用hadoop用户来作为所有ZooKeeper守护进程和文件的所有者。所有ZooKeeper文件和数据将被存储在/usr/local/ZooKeeper目录下,你需要预先创建好该目录。我们的ZooKeeper也将安装在master1上。
我们将在client1上安装一个ZooKeeper客户端。因此,在client1上也要安装Java并准备好hadoop用户和目录。
1.5.2 操作步骤
安装一个单机运行的ZooKeeper的步骤如下。
1.从ZooKeeper的官方网站(http://ZooKeeper.apache.org/releases.html#download)下载ZooKeeper的最新稳定版本。
2.下载其安装压缩包并将其解压缩到我们为ZooKeeper准备的根目录中。为了更便于安装,我们要设置一个ZK_HOME环境变量。在写作本书时,ZooKeeper的最新稳定版是3.4.3版。
hadoop@master1$ ln -s ZooKeeper-3.4.3 current
hadoop@master1$ export ZK_HOME=/usr/local/ZooKeeper/current
3.为ZooKeeper创建几个目录,用来存储的快照和事务日志。
hadoop@master1$ mkdir -p /usr/local/ZooKeeper/data
hadoop@master1$ mkdir -p /usr/local/ZooKeeper/datalog
4.创建$ZK_HOME/CONF/java.env文件,并在其中输入下列的Java设置。
hadoop@master1$ vi $ZK_HOME/conf/java.env
JAVA_HOME=/usr/local/jdk1.6
export PATH=$JAVA_HOME/bin:$PATH
5.复制ZooKeeper样本配置文件并进行如下一些修改,以设置ZooKeeper存储数据的位置。
hadoop@master1$ cp $ZK_HOME/conf/zoo_sample.cfg $ZK_HOME/conf/zoo.cfg
hadoop@master1$ vi $ZK_HOME/conf/zoo.cfg
dataDir=/usr/local/ZooKeeper/var/data
dataLogDir=/usr/local/ZooKeeper/var/datalog
6.将/usr/local/ZooKeeper下的所有文件从主节点同步到客户端上。在此初始安装时,不要同步${dataDir}和${dataLogDir}目录。
7.在主节点上执行如下命令启动ZooKeeper。
hadoop@master1$ $ZK_HOME/bin/zkServer.sh start
8.连接到正在运行的ZooKeeper上,执行如下一些命令来验证安装是否正确。
hadoop@client1$ $ZK_HOME/bin/zkCli.sh -server master1:2181
[zk: master1:2181(CONNECTED) 0] ls /
[ZooKeeper]
[zk: master1:2181(CONNECTED) 1] quit
9.在主节点上执行如下命令关闭ZooKeeper。
hadoop@master1$ $ZK_HOME/bin/zkServer.sh stop
1.5.3 运行原理
在本节中,我们安装了一个基本的单机运行的ZooKeeper实例。正如你看到的那样,安装非常简单,你所需要做的只是告诉ZooKeeper在哪里可以找到Java和在哪里保存自己的数据。
在第4步中,我们创建了一个名为java.env的文件,然后在该文件中记录了一些Java设置。你必须使用这个文件名,因为ZooKeeper(默认情况下)要从这个文件中读取Java设置。
ZooKeeper的配置文件名为zoo.cfg。你可以从ZooKeeper附带的示例文件复制出一个配置文件来。对于基本安装来说,那些默认设置就很适用。因为ZooKeeper在集群系统中一直起着核心作用,所以必须对其正确设置才能获得最佳的性能。
若要连接一个正在运行的ZooKeeper仲裁团,必须使用它的命令行工具,并且指定要连接的ZooKeeper服务器和端口。默认的客户端口是2181。如果使用默认端口,那么就不需要指定端口号。
我们把所有的ZooKeeper数据称为Znode。Znode在构造上就像一个文件系统的层次结构。ZooKeeper提供了一些命令,可以通过它的命令行工具访问或更新Znode。在命令行工具中键入help可以获得进一步的帮助信息。
1.5.4 补充说明
HBase将ZooKeeper作为自己的协调服务来使用,因此ZooKeeper服务必须非常可靠。在生产环境中,你必须运行一个至少含三个节点的ZooKeeper集群。此外,还要确保运行节点的个数是奇数。
安装一个集群式ZooKeeper的过程与本节前面所示的过程基本相同。你可以先按照前面的步骤来安装好集群中的每一个节点。然后再在每个节点的zoo.cfg文件中添加如下一些设置,这样每一个节点就可以知道仲裁团中其他的每个节点了。
hadoop@node{1,2,3}$ vi $ZK_HOME/conf/zoo.cfg
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
另外,你还需要在${DATADIR}目录下放置一个myid文件。该myid文件由一行文本组成,内容是该节点的ID。因此,在node1节点的myid文件中,除了包含一行内容为1的文本以外,没有其他内容。
提示
请注意,所有的ZooKeeper节点的时钟必须是同步的。你可以使用NTP(Network Time Protocol,网络时间协议)来同步时钟。
分别在该集群的每个节点上启动ZooKeeper。然后,你就可以使用下面这条命令从客户端连接到ZooKeeper集群上了。
$ zkCli.sh -server node1,node2,node3
在ZooKeeper集群中,只要有一半以上的节点能够正常运行,ZooKeeper就能正常工作。这意味着:在3个节点的集群中,只有一台服务器可以宕机。