一.安装

1.1 下载zookeeper

https://zookeeper.apache.org/releases.html#download

我用的是apache-zookeeper-3.6.2-bin.tar.gz

注意:zookeeper的安装路径不要有中文,建议也不要有空格,比如Program Files这样的路径

 

 

1.2 生成并修改zoo.cfg

在zookeeper的conf目录下复制一份zoo_sample.cfg文件,并重命名为zoo.cfg

修改zoo.cfg文件里面的路径(data,logs为新建目录)

# 存放内存数据库快照的目录
dataDir=D:\\Tools\\apache-zookeeper-3.6.2-bin\\data
# 存放事务日志目录
dataLogDir=D:\\Tools\\apache-zookeeper-3.6.2-bin\\logs
# AdminServer端口
admin.serverPort=7070

如果出现闪退,检查jdk的环境变量是否安装正确.路径中不要有中文

这要注意一点,zookeeper服务启动时会启动一个AdminServer的服务,端口会占用8080,如果你有启动别的项目占了8080端口就会报错无法启动,所以在这添加配置 admin.serverPort=7070 来将启动端口修改(7070随便填的,不冲突就行)。

问题记录:配置中路径是双斜杠,如果是单斜杠,启动时会出现下面两个文件夹,双斜杠或/不会出现

参数说明:

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

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

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

dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

到这就基本安装完成了

1.3 启动服务

进入bin目录下,双击zkServer.cmd

1.4 验证是否安装成功

在bin目录下双击zkCli.cmd,打开客户端(此时的服务端zkServer的dos窗口不要关闭),出现"欢迎"字样,说明安装成功!

二.在windows系统中生成zookeeper服务

每次启动使用都得去运行zkServer.cmd脚本,如果觉的麻烦,可以把启动脚本注册成系统服务。
下载的Zookeeper是.cmd的批处理命令运行的,默认没有提供以windows服务的方式运行的方案。
为此,本文下载prunsrv 来作为zookeeper的服务管理,将zookeeper做成 windows 服务,避免每次关闭后,再启动还需要使用cmd。

2.1 下载prunsrv 

apache官网下载地址:http://archive.apache.org/dist/commons/daemon/binaries/windows/,找到并下载commons-daemon-1.0.15-bin-windows.zip

解压之后将prunmgr.exe(监控服务配置及运行的程序)和prunsrv.exe(做服务的执行程序 )2个可执行文件复制到zookeeper的bin目录下

注意:64位机器用amd64/prunsrv.exe

2.2 配置环境变量

添加ZOOKEEPER_SERVICE, ZOOKEEPER_HOME两个环境变量

//服务名称(不要有中文)
ZOOKEEPER_SERVICE:zkServer
//设置到zookeeper安装目录
ZOOKEEPER_HOME:D:\Tools\apache-zookeeper-3.6.2-bin

 

 

2.3 新建install.bat脚本

在zookeeper的bin目录下新建一个install.bat文件,用于注册服务

prunsrv.exe "//IS//%ZOOKEEPER_SERVICE%" ^
        --DisplayName="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
        --Description="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
        --Startup=auto --StartMode=exe ^
        --StartPath=%ZOOKEEPER_HOME% ^
        --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd ^
        --StopPath=%ZOOKEEPER_HOME%\ ^
        --StopImage=%ZOOKEEPER_HOME%\bin\zkServerStop.cmd ^
        --StopMode=exe --StopTimeout=5 ^
        --LogPath=%ZOOKEEPER_HOME% --LogPrefix=zookeeper-wrapper ^
        --PidFile=zookeeper.pid --LogLevel=Info --StdOutput=auto --StdError=auto

2.4 新建zkServerStop.cmd脚本

在zookeeper的bin目录下新建一个zkServerStop.cmd文件,用于停止服务

@echo off
setlocal
TASKLIST /svc | findstr /c:"%ZOOKEEPER_SERVICE%" > %ZOOKEEPER_HOME%\zookeeper_svc.pid
FOR /F "tokens=2 delims= " %%G IN (%ZOOKEEPER_HOME%\zookeeper_svc.pid) DO (
    @set zkPID=%%G
)
taskkill /PID %zkPID% /T /F
del %ZOOKEEPER_HOME%/zookeeper_svc.pid
endlocal

2.5 启动服务

以管理员运行cmd,进入zookeeper的bin目录下D:\Tools\apache-zookeeper-3.6.2-bin\bin,运行install.bat,(注意:运行前请确保zookeeper服务已经关闭)


下图表示服务已经安装成功

右击启动即可

 

问题记录:如果右击停止,会出现下面的提示,服务已经停止了

查看日志,网上有说是权限问题,有说要强制杀死进程,但是停止脚本zkServerStop.cmd中已经有/f选项

taskkill /PID %zkPID% /T /F

Commons Daemon procrun stderr initialized
错误: 无法终止 PID 6268 (属于 PID 12848 子进程)的进程。

原因: 该进程无法自行终止。

2.6 删除服务

以管理员运行cmd,输入sc delete zkServer回车即可删除服务。

 

 

 

 

参考:

https://blog.csdn.net/woshiwangdaye/article/details/89708810

https://www.cnblogs.com/zlslch/p/8561791.html

https://www.cnblogs.com/fps2tao/p/13869428.html

https://blog.csdn.net/love_spinach/article/details/78569373

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐