思维导图:
引言
本文主要介绍了Zookeeper的基本使用方法。包括如何搭建独裁模式,即只有一个服务器的环境。在此基础之上,介绍了如何搭建仲裁模式环境,即有多个Zookeeper服务器进行服务且拥有一个主节点。最后以主从模式为例介绍了Zookeeper的工作流程。
- 独裁模式搭建:只有一个Zookeeper服务器提供服务
- 仲裁模式搭建:多个Zookeeper服务器提供服务且拥有一个主节点
- 工作流程:以主从节点模式为例描述Zookeeper的工作流程
当然,在进行上述操作之前需要一定的准备工作。我们需要先在linux服务器上安装Zookeeper,命令如下:
//下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
//解压
tar -xvzf zookeeper-3.4.14.tar.gz
//重命名配置文件
mv ./conf/zoo_sample.cfg ./conf/zoo.cfg
一.独裁模式环境搭建
独裁模式只需要一个对外提供服务的服务器,所以,此节没有繁杂的操作,只需要修改必要的配置文件,然后启动即可。
--独裁模式
//zoo.cfg中修改data目录地址
dataDir=/home/zhouhao/zookeeper-3.4.14
//启动服务器
bin/zkServer.sh start
//启动客户端
bin/zkCli.sh -server 127.0.0.1:2181
//查看root下所有节点
ls /
//创建workers节点
create /workers ""
//删除workers节点
delete /workers
//退出客户端
quit
//关闭服务器
bin/zkServer.sh stop
二.仲裁模式环境搭建
此节会用使用一台机器的多个端口号以模拟多台机器搭建Zookeeper仲裁模式环境。
首先,创建以端口号命名的模拟一台服务器的文件夹并在此文件夹下创建data数据文件夹,data文件夹会存放服务的相关数据。
//创建3个文件夹及其data文件夹
mkdir 2222 3333 4444
mkdir 2222/data
mkdir 3333/data
mkdir 4444/data
然后,我们修改原始的配置文件zoo.cfg,在其中加入服务器集群的相关信息和服务端口信息
//添加以下三项配置,表示3个服务器
//server.1表示其中一个服务器被命名为1,以后会用到。
//其中127.0.0.1表示IP,2222表示服务端口号,2223表示服务器间的通讯端口
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
紧接着我们将此zoo.cfg配置文件分别复制到我们创建的三个文件夹下,和data文件夹平级。然后分别修改其必要的配置信息。主要包括data文件夹位置和对外提供服务的端口号
//配置文件中修改数据地址,
dataDir=/home/zhouhao/zookeeper/2222/data
dataDir=/home/zhouhao/zookeeper/3333/data
dataDir=/home/zhouhao/zookeeper/4444/data
//修改服务端口号,在三个不同的配置文件中
clientPort=2181
clientPort=2182
clientPort=2183
随后,在data文件夹下添加myid文件以指定是哪个服务器使用了此data节点文件夹。myid的值与上文配置中的server.n的n相匹配
//创建myid文件并指定服务器命名
echo 1 > 2222/data/myid
echo 2 > 3333/data/myid
echo 3 > 4444/data/myid
现在,配置文件以修改完毕,可以启动这三个服务器了。注意,由于我们使用了三个服务器搭建仲裁模式环境,所以在启动第一个服务器时会报错,因为必要的法定人数服务器数量=2,所以整个Zookeeper集群暂时不能工作。当我们启动了第二个服务器的时候,集群就可以工作了。相关日志可以在zookeeper.out浏览
//启动三个服务器
bin/zkServer.sh start ../zookeeper/2222/z2222.cfg
bin/zkServer.sh start ../zookeeper/3333/z3333.cfg
bin/zkServer.sh start ../zookeeper/4444/z4444.cfg
最后,使用客户端连接服务器,需要注意的是,连接Zookeeper集群需要指定所有的服务器地址
//客户端连接服务器
bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
//创建主节点
create -e /master "master.example.com:2223"
三.Zookeeper的工作流程
3.1 会话的生命周期
未连接的会话状态为NOT_CONNECTED,当客户端初始化后转为CONNECTING,连接成功后转为CONNECTED,如果 此时连接突然中断,则会退为CONNECTING,客户端此时会尝试连接至其他的服务器,成功则变为CONNECTED,失败则变为CLOSED,当然显示关闭会话也会变为CLOSED状态,流程如下图:
3.2 工作流程
Zookeeper仲裁模式下,共有三种角色,主节点,从节点,客户端。他们是如何协调以完成工作的呢?我们首先回顾一下Zookeeper中四个基本节点:
- 主节点/master:负责监视新的从节点和任务,并分配任务给从节点
- 从节点/workers:通过先/workers下添加znode子节点注册自己,然后开始监视自己是否有任务
- 任务节点/tasks:客户端通过任务节点添加任务
- 任务分配节点/assign:主节点检测到任务节点有新的任务后,查看从节点,并在此节点下添加znode子节点以表示任务被分配给哪个从节点
通过上述四个节点的工作,可以大致的描述Zookeeper的工作流程:
- 1.客户端添加任务子节点以注册任务,并添加监控点。因为任务的完成状态会以在此任务子节点下添加子节点的方式表示。
- 2.主节点监控到任务节点发生变化,或去从节点列表后,创建/assign/从节点名 下的子节点表示将任务分配给了哪个从节点
- 3.从节点监控到自己的任务分配节点下有了新的子节点并开始执行。完成后,在此任务节点下添加状态子节点。
- 4.客户端监控到此任务子节点发生变化,检查状态子节点并接受执行结果。