1. 下载 Zookeeper
使用 wget 下载:
wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2. 解压资源
# 解压资源到指定目录下
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
# 资源目录重命名
mv apache-zookeeper-3.7.0-bin/ zookeeper
# 移动到你想要安装的目录
mv zookeeper /usr/local
3. 启动 Zookeeper
Zookeeper 依赖 Java 环境,所以启动之前请配置好 JDK 或者 JRE
# 进入到之前解压后的zookeeper资源目录
cd /usr/local/zookeeper
# 重命名 Zookeeper 的配置文件
cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
# 启动 Zookeeper
./bin/zkServer.sh start
注意:Zookeeper在启动时会找 conf 下的 zoo.cfg 作为默认配置文件
4. 检查 Zookeeper 是否成功启动
ps -ef |grep zookeeper
# 如果可以查询到 Zookeeper 的进程,则说明成功启动了
# 需要注意的是,这样启动 Zookeeper 并不是开机自启的服务。
5. 设置 Zookeeper 服务开机自启
# 配置开机自启时,需要先停用 zookeeper
./bin/zkServer.sh stop
cd /etc/systemd/system
# 在该目录下创建 zookeeper.service
vi zookeeper.service
# 在 zookeeper.service 输入以下内容,注意 zookeeper 的安装路径
[Unit]
Description=zookeeper.service
After=network.target
[Service]
Type=forking
Environment=/usr/local/zookeeper
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart
[Install]
WantedBy=multi-user.target
# 保存并退出 vi
# 重新加载服务配置
systemctl daemon-reload
# 设置开机自启
systemctl enable zookeeper.service
# 启动 zookeeper
systemctl start zookeeper.service
查看 zookeeper 状态
systemctl status zookeeper.service
关闭 zookeeper
systemctl stop zookeeper.service
关闭开机自启
systemctl disable zookeeper.service
6. 基础配置说明
Zookeeper 提供了一个简单的配置文件示例:zoo_simple.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
zookeeper 启动的时候默认会去加载 conf 目录下的 zoo.cfg 这个配置文件
zookeeper 可以指定配置文件启动,就是启动命令后面接配置文件路径,eg:zkServer.sh start ../conf/zoo_sample.cfg
参数说明
| 配置项 | 说明 |
|---|---|
tickTime | 默认值 2000,单位 ms,必要配置 心跳检测时间间隔 也是 zookeeper 中的基本时间单位,关于时间配置该是该配置的倍数 |
initLime | 默认值 5,代表5次心跳,也就是 5 * 2000 ms 初始通信时限,集群中的 follower 节点与 leader 节点之间初始连接时限 |
syncLimit | 默认值 2 同步时限,follower 节点超过该时限未与 leader 通信,则认为该节点下线 |
dataDir | 默认值 /tmp/zookeeper,必要配置保存数据的目录,默认情况下也是事务日志的存储目录 zookeeper 的数据以类目录树的结构存储,每间隔一段时间生成快照(shapshot) |
clientPort | 默认值 2181,必要配置监听客户端连接的端口 |
7. zookeeper 集群搭建
zookeeper 有三种搭建模式:
- 单机模式(单机单实例,可参考 CentOS 7.9 部署 zookeeper-3.7.0)
- 伪集群搭建(单机多实例)
- 集群搭建(多机多实例)
集群的搭建注意 clientPort、dataDir、dataLogDir的配置保持区分
dataLogDir:事务日志的存储目录,默认在dataDir配置的目录下。配置后可以有效避免数据快照与日志记录之间的竞争,所以建议配置
在上述配置文件的基础上添加集群节点的相关配置:
# 格式:server.id=host:port1:port2
# 其中 id 为server id,对应myid
# host 为 ip 或主机名称
# port1 为用于 followers 连接到 leader 的端口
# port2 为 leader 选举时使用的端口
server.1=127.0.0.1:2287:3387
server.2=127.0.0.1:2288:3388
server.3=127.0.0.1:2289:3389
在对应 zookeeper 实例配置文件中的 dataDir 目录下创建 myid 文件并记录对应的 server id,以 server.1 为例:
echo "1" > /usr/local/zookeeper/data1/myid
完整的配置文件示例如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data1
dataLogDit=/usr/local/zookeeper/log1
clientPort=2181
server.1=127.0.0.1:2287:3387
server.2=127.0.0.1:2288:3388
server.3=127.0.0.1:2289:3389
多个 zookeeper 实例的配置文件一定要区分 clientPort、dataDir、dataLogDir
最后,逐一指定配置文件启动 zookeeper 实例即可
更细致的配置参数可以参考官方文档