ZooKeeper(以下简称ZK)是一个分布式协调服务框架,可以做到各节点之间的数据强一致性。简单的理解就是在一个节点修改某个变量的值后,在其他节点可以最新的变化,这种变化是事务性的。通过在ZK节点上注册监听器,就可以获得数据的变化。
1.确定集群结构
我们打算在三个节点安装ZK,分别是192.168.1.221(hadoop1)、192.168.1.222(hadoop2)、192.168.1.223(hadoop3)。首先在hadoop1中部署。
注意:一定要保证各节点的系统时间相同。
2.解压缩、设置环境变量
在hadoop1,我们把zookeeper-3.4.5.tar.gz复制到/usr/local目录下,解压缩,重命名为zk,然后在/etc/profile中设置环境变量。具体命令可以参照前面的文章。
3.修改集群的配置
进入到${ZOOKEEPER_HOME}/conf目录下,有一个文件是zoo_sample.cfg,重命名为zoo.cfg。打开这个文件进行编辑
变量dataDir表示数据存放的目录,把该值修改为/usr/local/zk/data。
在文件的最后增加三行内容,如下
server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888 server.3=hadoop3:2888:3888
每一行表示一个配置信息,现在解释一下每行的内容,以第一行为例。其中的server是固定名称;1只是一个标记,只要保证与下面的所有标记不重复即可;后面的hadoop1表示主机名,即ZK部署的主机;2888表示ZK之间通信用的端口;3888表示ZK之间选举用的端口。
然后创建/usr/local/zk/data目录。
进入data目录,创建文件myid。myid的内容是该主机名对应的标记数字。如果是hadoop1,那么数字就是1;如果是hadoop2,那么数字就是2;如果是hadoop3,那么数字就是3。
4.配置其他节点
执行命令,把安装文件从hadoop1复制到其他节点,如下
scp -rq /usr/local/zk hadoop2:/usr/local scp -rq /usr/local/zk hadoop3:/usr/local scp /etc/profile hadoop2:/etc/ scp /etc/profile hadoop3:/etc/
进入hadoop2中,把文件myid的内容修改为2;进入hadoop3,把文件myid的内容修改为3。
5.启动集群
在三个节点的终端中,分别执行命令
zkServer.sh start
这样,就启动了ZK集群。
6.验证
我们如何判断启动是否成功哪?
可以在终端执行jps查看,会看到一个新的java进程QuorumPeerMain。这就是ZK的java进程。
也可以在三个终端分别执行命令
zkServer.sh status
会看到一个输出信息含有Mode: Leader,两个输出信息含有Mode: Follower。