zookeeper window环境安装、集成为windows服务、单机伪集群搭建

提示 zookeeper 是 java 程序,所以安装之前需要安装 JDK,JDK 安装的教程网络上很多,本文不再赘述。注意的是系统环境变量中的 JDK 目录的值一定是:JAVA_HOME。

下载

官网地址:https://zookeeper.apache.org/

安装包下载地址:https://zookeeper.apache.org/releases.html#download

如果官网下载速度慢可以使用国内镜像下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/

笔者选择最新版本的 zookeeper 安装包:

镜像地址选择想要的版本下载:

注意下载的是.tar.gz文件。

下载好的安装包名称为:apache-zookeeper-3.6.0-bin.tar.gz

安装

将上述安装包放到指定的文件目录,并使用解压缩工具解压这个安装包:首选解压 gz 包之后得到 tar 包,继续解压 tar包得到 apache-zookeeper-3.6.0-bin 文件目录,进入该目录得到 apache-zookeeper-3.6.0-bin 目录结构如下:

在上述的文件目录中创建 data 和 log 文件夹,并复制 conf 文件夹中的 zoo_sample.cfg 文件名称为:zoo.cfg,使用文本编辑器打开该文件,并设置数据保存目录为刚才创建的 data 文件夹目录:

启动

在安装目录的 bin 目录下,将zkServer.cmd拖拽到 cmd 命令窗口中,回车执行即可启动 zookeeper:

启动过程没有异常信息提示,启动成功之后,光标不停闪烁:

只要这个 cmd 窗口不关闭,zookeeper 服务就会一直启用着。zookeeper 服务默认启动的是 2181 端口。

客户端图形化工具

ZooInspector

下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

本博客下载地址:ZooInspector.zip

下载完后解压压缩包,在 build 文件夹目录中找到:zookeeper-dev-ZooInspector.jar。使用 java -jar 命令启动该 jar 文件:

1
java -jar zookeeper-dev-ZooInspector.jar

启动可视化客户端工具:

将上述客户端解压的文件目录放到一个固定位置,在 buid 文件目录中创建一个ZooInspector.cmd文件,文件内容为:

1
java -jar zookeeper-dev-ZooInspector.jar

将这个ZooInspector.cmd文件创建快捷方式到桌面,并设置个图标,双击运行即可:

zktools

本站下载地址:zktools.zip

集成 zookeeper 到 windows 服务

下载的 Zookeeper 是 .cmd 的批处理命令运行的,默认没有提供以 windows 服务的方式运行的方案,因此可以下载 prunsrv 来作为 zookeeper 的服务管理。将 zookeeper 做成 windows 服务,避免每次关闭后,再启动还需要使用 cmd。

下载 prunsrv

下载地址:http://archive.apache.org/dist/commons/daemon/binaries/windows/

目前最新版本是 1.2.2,找到对应的安装:commons-daemon-1.2.2-bin-windows.zip,

本站下载地址:commons-daemon-1.2.2-bin-windows.zip

解压 zip 文件,复制 prunmgr.exe、prunsrv.exe 到 ZooKeeper 安装路径的 bin 目录下。注意:如果你的操作系统是 64 位的,则复制 amd64 目录下的 prunsrv.exe。

编写脚本

安装服务脚本

在 ZooKeeper 根目录下创建服务安装脚本:zkServiceInstall.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
CD /d %~dp0
SET ZK_HOME=%CD%
SET ZK_DATA_DIR=%ZK_HOME%\data
SET ZK_LOG_DIR=%ZK_HOME%\log
SET ZK_SERVICE_NAME=zookeeper
if not exist %ZK_DATA_DIR% mkdir %ZK_DATA_DIR%
if not exist %ZK_LOG_DIR% mkdir %ZK_LOG_DIR%

:: 安装ZooKeeper的Windows服务
%ZK_HOME%\bin\prunsrv.exe "//IS//%ZK_SERVICE_NAME%" ^
--DisplayName="%ZK_SERVICE_NAME%" ^
--Description="%ZK_SERVICE_NAME%" ^
--Startup=auto ^
--StartMode=exe ^
--StartPath=%ZK_HOME% ^
--StartImage=%ZK_HOME%\bin\zkServer.cmd ^
--StopPath=%ZK_HOME%\ ^
--StopImage=%ZK_HOME%\zkServerStop.bat ^
--StopMode=exe ^
--StopTimeout=5 ^
--LogPath=%ZK_LOG_DIR% ^
--LogPrefix=zookeeper-wrapper ^
--PidFile=zookeeper.pid ^
--LogLevel=Info ^
--StdOutput=auto ^
--StdError=auto

pause
删除服务脚本

在 ZooKeeper 根目录下创建服务卸载脚本:zkServiceRemove.bat

1
2
3
4
@echo off 

CD /d %~dp0
%CD%\bin\prunsrv.exe //DS//zookeeper
停止服务脚本

在 ZooKeeper 根目录下创建服务停止脚本:zkServerStop.bat

无法使用 net stop zookeeper 命令停止服务,只能暴力杀死进程来停止服务。

1
2
3
4
5
6
7
8
9
10
11
@echo off

setlocal

CD /d %~dp0

:: 以杀进程的方式停止ZooKeeper服务
SET /p zkPID=<%CD%\log\zookeeper.pid
taskkill /PID %zkPID% /T /F

endlocal
脚本使用说明

以上三个脚本必须以管理员身份运行,首先运行 zkServiceInstall.bat 文件,再 win + r 寻找 services.msc 服务,找到zookeeper服务右击启动服务,或者使用net start zookeeper启动服务。

停止服务,执行 zkServerStop.bat 文件。

如果想删除服务,必须先停止服务(执行 zkServerStop.bat 文件),才能删除服务,即执行 zkServiceRemove.bat 文件。

zookeeper 服务配置参数说明

zookeeper 默认参考配置文件:zoo_sample.cfg

  • tickTime:心跳间隔,这个时间作为 zookeeper 服务器之间或 zookeeper 服务器与客户端服务器维持心跳的时间间隔,即每隔 tickTime 时间就会发送一个心跳。

  • initLimit:这个配置项是用来配置 zookeeper 接受客户端(这里所说的客户端不是用户连接 zookeeper 服务器的客户端,而是 zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5 x 2000 毫秒 = 10 秒

  • syncLimit:这个配置项表示 Leader 与 Follower 之间发送消息,请求和相应时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2 x 2000 毫秒 = 4 秒

  • dataDir:zookeeper 存储数据的目录,默认情况下,zookeeper 的日志问价也会保存至该目录

  • clientPort:客户端连接zookeeper的端口号

  • server.A = B:C:D:

    • A 是一个整形数字,表示服务器下标。
    • B 是这个服务器的 ip 地址。
    • C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口。
    • D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

单机伪分布式搭建

伪分布式安装就是在同一台pc上安装,安装时使用同一个zookeeper包,多个配置文件分别配置为不同的端口。我这里配置 3 个伪服务。

复制 3 份配置文件

将 zookeeper 默认参考配置文件,即 zoo_sample.cfg 文件复制三份,并命名为:zoo1.cfg、zoo2.cfg、zoo3.cfg

创建 3 份 data 及 log 目录

在 zookeeper 根目录创建三份 data 及 log 目录,笔者为了方便管理,均创建在了Cluster目录下:

并在 data1,data2,data3 文件夹中创建myid文件,文件内容依次为:1,2,3

修改 3 份配置文件

分别对 zoo1.cfg、zoo2.cfg、zoo3.cfg 文件中的 data、log、端口号进行设置:

zoo1.cfg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tickTime=2000

initLimit=10

syncLimit=5

dataDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\data1
dataLogDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\logs1

clientPort=2181

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

zoo2.cfg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tickTime=2000

initLimit=10

syncLimit=5

dataDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\data2
dataLogDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\logs2

clientPort=2182

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

zoo3.cfg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tickTime=2000

initLimit=10

syncLimit=5

dataDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\data3
dataLogDir=C:\\programs\\apache-zookeeper-3.6.0-bin\\cluster\\logs3

clientPort=2183

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

假设把配置文件表示为:zoo{num}.cfg,server.{num}=ip/domain:Port1:Port2

其中 num:表示数字表示第几号服务器;ip/domain :是服务器域名或者 ip 地址。

Port1:表示这个服务器和集群中的 Leader 服务器交换信息的端口。

Port2:表示万一集群中的Leader服务器挂了,需要一个端口重新进行选举,选出一个新的Leader,这个端口就是用来执行选举时服务器相互通信的端口。

由于我们是伪集群,所以 ip 或者域名是一样的,所以要分配不同的端口号。

复制 3 份启用服务脚本

将默认的启动文件复制三份,并命名为:zkServer1.cmd、zkServer2.cmd、zkServer3.cmd

分别修改上述启动脚本,设置成上述的启动配置脚本:

zkServer1.cmd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOO_LOG_FILE=zookeeper-%USERNAME%-server-%COMPUTERNAME%.log

set ZOOCFG=C:\programs\apache-zookeeper-3.6.0-bin\conf\zoo1.cfg

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

zkServer2.cmd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOO_LOG_FILE=zookeeper-%USERNAME%-server-%COMPUTERNAME%.log

set ZOOCFG=C:\programs\apache-zookeeper-3.6.0-bin\conf\zoo2.cfg

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

zkServer3.cmd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set ZOO_LOG_FILE=zookeeper-%USERNAME%-server-%COMPUTERNAME%.log

set ZOOCFG=C:\programs\apache-zookeeper-3.6.0-bin\conf\zoo3.cfg

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

博文参考

Windows里如何正确安装Zookeeper以服务运行

Windows下以后台服务的方式配置ZooKeeper

Windows 下 Zookeeper 单机模式和伪分布式模式安装

updated updated 2020-04-06 2020-04-06
本文结束感谢阅读

本文标题:zookeeper window环境安装、集成为windows服务、单机伪集群搭建

本文作者:木鲸鱼

微信公号:木鲸鱼 | woodwhales

原始链接:https://woodwhales.cn/2020/04/06/065/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%