Zookeeper环境搭建
安装
由于 Zookeeper 集群的运行需要Java运行环境,所以需要首先安装 JDK。安装完 JDK 后再进行下面的步骤:
官网下载:https://zookeeper.apache.org/
历史版本下载:https://archive.apache.org/dist/zookeeper/
以 zookeeper-3.4.10 为例,下载 .tar.gz 包后解压即可,解压目录即为安装目录, 使用%ZK_HOME%来代表安装目录。
# Linux
tar -zxvf zookeeper-xxx.tar.gz
单机部署
修改配置文件:
将 %ZK_HOME%/conf/zoo_sample.cfg 这个模板文件复制一份进行修改:cp conf/zoo_sample.cfg conf/zoo.cfg,添加以下内容:
# 基础时间单位(毫秒)
tickTime=2000
# 初始化同步阶段最长心跳数
initLimit=10
# 发送请求和获得响应之间最长心跳数
syncLimit=5
# 数据目录
dataDir=/home/zs/zookeeper/zookeeper1/data
# 日志目录
dataLogDir=/home/zs/zookeeper/zookeeper1/log
# 客户端连接端口
clientPort=2181
server.1=IP1:2888:3888
# 最大客户端连接数
maxClientCnxns=60
# 自动快照保留数量
autopurge.snapRetainCount=3
# 自动清理间隔(小时)
autopurge.purgeInterval=1
相关操作
# 启动zookeeper服务
./bin/zkServer.sh start
# 关闭Zookeeper服务
bin/zkServer.sh stop
配置脚本
Windows:
@echo off
:: 设置变量
set ZK_HOME=D:/Develop/Tools/zookeeper-3.4.10
set DATA_DIR=%ZK_HOME%\data
set LOG_DIR=%ZK_HOME%\logs
mkdir "%DATA_DIR%"
mkdir "%LOG_DIR%"
rem 创建配置文件
(
echo tickTime=2000
echo dataDir=%DATA_DIR%
echo dataLogDir=%LOG_DIR%
echo clientPort=2181
echo maxClientCnxns=60
) > %ZK_HOME%\conf\zoo.cfg
Linux:
#!/bin/bash
# 设置 Zookeeper 的安装目录
ZK_HOME="/opt/zookeeper"
DATA_DIR="/var/lib/zookeeper"
LOG_DIR="/var/lib/zookeeper"
# 创建数据目录
mkdir -p $DATA_DIR
mkdir -p $DATA_DIR
# 创建配置文件
cat <<EOL > $ZK_HOME/conf/zoo.cfg
tickTime=2000
dataDir=$DATA_DIR
dataLogDir=$LOG_DIR
clientPort=2181
maxClientCnxns=60
EOL
验证是否启动成功
要验证服务器有没有启动成功,可以 telnet到 ZooKeeper 的端口,然后发送 stat 命令来验证
有时虽然执行完启动命令后,显示STARTED,但ZooKeeper并没有真正运行,可以对应状态进行检测。在执行启动命令的目录下会生成Logs目录,记录启动的日志,若未成功启动,可在Logs目录查找原因。
使用zkServer.sh status命令,查看ZooKeeper服务器的状态
执行zkServer.cmd status时报错
ERROR [main:ZooKeeperServerMain@55] - Invalid arguments, exiting abnormally
java.lang.NumberFormatException: For input string: "D:\Develop\Tools\zookeeper-3.4.10\bin..\conf\zoo.cfg"
查看监听的端口
# Linux
netstat -anput | grep java # 确定端口在监听
# Windows
➜ netstat -ano | findstr "java"
➜ netstat -ano | findstr "2181"
TCP 0.0.0.0:2181 0.0.0.0:0 LISTENING 12316
TCP [::]:2181 [::]:0 LISTENING 12316
集群部署
集群模式和单机模式的配置区别在于:单机模式下的 zoo.cfg 配置文件中,只需要配置一个 server 地址,而且不需要在 dataDir 目录下配置myid 文件。
单机伪集群
ZooKeeper 支持在一台服务器上启动多个ZooKeeper的实例,相互组成一个集群。不需要拷贝多个ZooKeeper的目录,就是使用同一份Zookeeper程序目录,配置多个 zoo.cfg 文件,每个实例使用各自的配置文件即可。
每个配置文件的clientPort、dataDir、dataLogDir这 3 个配置绝对不能相同,还需要在dataDir中创建myid文件来指定该dataDir对应的zk实例。
windows版本
@echo off
set ZOOKEEPER_HOME=C:\zookeeper
set DATA_DIR=C:\zookeeper\data
rem 创建数据目录
mkdir %DATA_DIR%
rem 创建配置文件
(
echo tickTime=2000
echo dataDir=%DATA_DIR%
echo.
echo initLimit=5
echo syncLimit=2
echo clientPort=2181
echo maxClientCnxns=60
echo server.1=127.0.0.1:2888:3888
echo server.2=127.0.0.1:2889:3889
echo server.3=127.0.0.1:2890:3890
) > %ZOOKEEPER_HOME%\conf\zoo.cfg
rem 创建 myid 文件
echo 1 > %DATA_DIR%\myid
linux版本
#!/bin/bash
# 设置 Zookeeper 的安装目录
ZOOKEEPER_HOME="/opt/zookeeper"
DATA_DIR="/var/lib/zookeeper"
# 创建数据目录
mkdir -p $DATA_DIR
# 创建配置文件
cat <<EOL > $ZOOKEEPER_HOME/conf/zoo.cfg
tickTime=2000
dataDir=$DATA_DIR
# 伪集群配置
initLimit=5
syncLimit=2
clientPort=2181
maxClientCnxns=60
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
EOL
# 创建 myid 文件
echo "1" > $DATA_DIR/myid
多机集群部署
相关配置
- tickTime:该参数单位是毫秒ms,用于配置ZooKeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。
- initLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器在启动过程中,会与Leader建立连接并完成对数据的同步,从而确定自己对外提供服务的起始状态。Leader服务器允许Follower在initLimit时间内完成这个工作。
- syncLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。
- dataDir:用于配置ZooKeeper服务器存储快照文件的目录。默认情况下,如果没有配置参数dataLogDir,那么事务日志也会存储在这个目录中。考虑到事务日志的写性能直接影响ZooKeeper整体的服务能力,因此建议同时通过参数dataLogDir来配置ZooKeeper的事务日志的存储目录。
- dataLogDir:用于配置ZooKeeper服务器存储事务日志文件的目录。dataDir和dataLogDir都要确保有读写权限。
- clientPort:用于配置当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接。
- server.id=host:port:port:该参数用于配置组成ZooKeeper集群的机器列表,其中id即为ServerID,与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信。在ZooKeeper服务器启动的时候,其会根据myid文件中配置的ServerID来确定自己是哪台服务器,并使用对应配置的端口来时行启动。如果在实际使用过程中,需要在同一台服务器上部署多个ZooKeeper实例来构成伪集群的话,那么这些端口都需要配置成不同。

浙公网安备 33010602011771号