前言
为了方便本地开发学习测试ZooKeeper集群,而不想要找多个服务器,可将多个ZooKeeper节点都部署在一台服务器或本地机器上,故称伪集群。实际上,如果了解了伪集群模式下的安装和配置,那么在生产环境下的安装配置也差不多了。
需要注意的是:由于ZooKeeper是使用Java编写的,所以在安装之前必须要准备好Java运行环境,这里不做展开。
下载ZooKeeper
下载地址https://mirrors.cnnic.cn/apache/zookeeper/当前的稳定版本https://mirrors.cnnic.cn/apache/zookeeper/stable/历史版本http://archive.apache.org/dist/zookeeper/这里下载使用了zookeeper-3.6.3,下载文件apache-zookeeper-3.6.3-bin.tar.gz,将文件解压到自定义路径下,这里用D:\zookeeper-3.6.3作为安装路径,后边配置会用到。
注意:从3.5.5 版本以后,只有带有bin标识的文件才是编译后的文件,其他的是未编译的文件,所以下载时要做好选择。
安装ZooKeeper
规划节点个数
安装之前要先规划安装节点的个数,推荐单数,最少3个节点,这里选择3个,推荐单数的原因见另一篇文章:
ZooKeeper集群推荐节点个数为奇数(2n+1)个的理解
创建数据目录和日志目录
分别为3个节点创建数据目录和日志目录,日志目录默认设置在该节点数据目录相同路径下,这里将其分开创建:
数据目录:安装路径下创建文件夹data,内再创建zoo-1,zoo-2,zoo-3三个文件夹分别作为3个节点的数据目录;
日志目录:安装路径下创建文件夹log,内再创建zoo-1,zoo-2,zoo-3三个文件夹分别作为3个节点的日志目录。
创建id文件
ZooKeeper每个节点都需要一个记录节点id的文本文件,文件名为myid,文本内容为数字,不能有其他内容,用来表示节点的id编号,各节点各不相同,默认存放在节点数据目录下,这里不做更改。
分别在data目录下的zoo-1,zoo-2,zoo-3目录内创建myid文件,文件的文本内容分别为1,2,3作为相应的id编号。
注意:myid中文本值只能是数字,且范围在1~255,表示节点个数最多为255个。
创建修改配置文件
ZooKeeper包里有一个官方的配置文件样板zoo_sample.cfg,在安装目录下conf文件夹中,在此路径下,将样版配置文件复制三份,分别命名为zoo-1.cfg,zoo-2.cfg,zoo-3.cfg。
为每一个节点修改配置文件,这里以节点1为例,各个选项的解释如下:
#数据目录(路径改为自己安装路径;myid文件在此目录下;注意斜杠方向)
dataDir=D:/zookeeper-3.6.3/data/zoo-1
#日志目录(没有该参数,默认=dataDir)
dataLogDir=D:/zookeeper-3.6.3/log/zoo-1
#客户端连接当前节点的端口号(实际集群各节点放在不同服务器上,端口号为了方便记忆一般相同,伪集群放在同一机器上,注意错开,这里可以递加)
clientPort=2181
#集群中各节点信息(全部节点,包括自身),格式为:
#server.id=host:port:port
#id与各节点myid文件中的id一致
#两个端口号,前一个用于节点之间通信,后一个用于选举主节点
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
创建修改启动文件
ZooKeeper启动文件在安装路径中bin文件夹下,在Windows环境下,启动文件为zkServer.cmd,为每个节点复制一份,分别命名为zkServer-1.cmd,zkServer-2.cmd,zkServer-3.cmd,在其中增加设置配置文件路径的语句,以节点1为例:
setlocal
call "%~dp0zkEnv.cmd"
REM 设置配置文件路径,路径改为自己的安装路径
set ZOOCFG=D:\zookeeper-3.6.3\conf\zoo-1.cfg
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOO_LOG_FILE=zookeeper-%USERNAME%-server-%COMPUTERNAME%.log
echo on
call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
endlocal
启动
分别运行zkServer-1.cmd,zkServer-2.cmd,zkServer-3.cmd,运行完成之后,可以使用ZooKeeper客户端zkCli.cmd连接集群,在Windows命令提示符窗口,进入bin目录,运行:
D:\zookeeper-3.6.3\bin>.\zkCli.cmd -server 127.0.0.1:2181
如果显示CONNECTED则连接成功:
[zk: 127.0.0.1:2181(CONNECTED) 0]
注意:ZooKeeper集群需要有1/2以上的节点启动才能完成集群的启动,才能对外提供服务。所以,至少需要启动两个节点。