1. 安装与配置
zookeeper下载地址:
https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.7.0/
zookeeper解压到目标位置:
修改zookeeper配置文件:
在zookeeper包目录下的conf文件夹下创建一个zoo.cfg配置文件或者复制z_sample.cfg文件并进行修改
// 心跳间隔
tickTime=2000
// 镜像数据位置
dataDir=D:\\apache-zookeeper-3.7.0-bin\\data1
// 日志输出位置
dataLogDir=D:\\apache-zookeeper-3.7.0-bin\\log1
// 客户端链接端口
clientPort=2181
initLimit = 5
syncLimit = 2
创建对应的数据存储目录与日志输出目录
两个文件夹的位置必须与配置文件中的一致。
2. 运行测试
启动测试
进入到bin目录
运行zkService.cmd
使用JPS测试查看进程:
运行后可以查看到QuorumPeerMain的进程,zookeeper启动成功!
3.伪集群配置
上述内容为zookeeper的单个应用搭建。一下内容将实现zookeeper的单机集群搭建。
所谓单机搭建zookeeper集群其实就是在一台机器上启动多个zookeeper,在启动每个zookeeper时分别使用不同的配置文件zoo.cfg来启动,每个配置文件使用不同的配置参数(clientPort端口号、dataDir数据目录、dataLogDir数据日志目录)在同一台机器上启动多次。
3.1配置zoo文件
首先在zookeeper配置目录下创建需要集群数量的zoo.cfg文件(以2个为例)分别为:zoo1.cfg,zoo2.cfg
配置内容设置
zoo1.cfn配置
tickTime=2000
dataDir=D:\\apache-zookeeper-3.7.0-bin\\data1
dataLogDir=D:\\apache-zookeeper-3.7.0-bin\\log1
clientPort=2181
initLimit = 5
syncLimit = 2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
zoo2.cfn配置
tickTime=2000
dataDir=D:\\apache-zookeeper-3.7.0-bin\\data2
dataLogDir=D:\\apache-zookeeper-3.7.0-bin\\log2
clientPort=2182
initLimit = 5
syncLimit = 2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
- tickTime: 基本事件单元,以毫秒为单位。这个时间是作为zookeeper服务器之间或客户端与服务器间维持心跳的时间。也就是每隔tickTime时间就会发送一个心跳
- dataDir: 存储内存中数据库快照的位置,就是zookeeper保存数据的目录,默认情况下,zookeeper将数据的日志问也保存在这个目录里
- clientPort: 客户端连接zookeeper服务器的端口,默认是2181,zookeeper会监听这个端口,接收客户端的访问请求
- initLimit: 这个配置项是用来配置zookeeper接收客户端初始化连接能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(tickTime)长度后,zookeeper服务器还没有接收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000 = 20 秒
- syncLimit: 这个配置项标识Leader和Follower之间发送消息,请求和应答的长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是 5 * 2000 = 10秒
- server.myid=IP:Port1:Port2, myid是服务器的编号,一个正整数,port1表示的是服务器与集群中的Leader服务器交换信息的端口,一般用2288(具体自己定义),Port2表示的是万一集群中的Leader服务器宕机了,需要一个端口来重新进行宣讲,选出一个新的Leader,一般用3388(具体自己定义)
3.2配置log与data目录
分别在zookeeper目录下创建data1,data2,log1,log2文件夹,并在data目录下创建myid文件,用于服务启动运行时通过服务编码找到数据存放位置。所以myid中的编码与对应配置文件中的服务编号为一致。
data1/myid
1
data2/myid
2
3.3 配置zookeeper服务启动器
在此处将创建两个zookeeper服务启动器,并分别绑定到对应的服务上。
zkServer1.cmd配置
setlocal
call "%~dp0zkEnv.cmd"
set ZOOCFG=D:/apache-zookeeper-3.7.0-bin/conf/zoo1.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
zkServer2.cmd配置
setlocal
call "%~dp0zkEnv.cmd"
set ZOOCFG=D:/apache-zookeeper-3.7.0-bin/conf/zoo2.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
到此配置完毕
4.伪集群测试
分别启动上述两个服务
.\skServer1.cmd
.\skServer2.cmd
使用jsp测试: