系统环境

服务 版本 ip地址 主机名 系统版本 内核版本 myid 备注
ZooKeeper v3.8.4 192.168.3.137 vm007-ubuntu2404 Ubuntu 24.04 LTS 6.8.0-31-generic 1 -
ZooKeeper v3.8.4 192.168.3.136 vm006-ubuntu2404 Ubuntu 24.04 LTS 6.8.0-31-generic 2 -
ZooKeeper v3.8.4 192.168.3.135 vm005-ubuntu2404 Ubuntu 24.04 LTS 6.8.0-31-generic 3 -

Zookeeper 简介

ZooKeeper 是一个开源的分布式协调服务,旨在为分布式应用程序提供高性能、高可用性和一致性的服务。以下是 ZooKeeper 的一些关键特点和用途:

  1. 分布式协调:ZooKeeper 提供了一个可靠的协调服务,用于在分布式系统中实现诸如选举、配置管理、命名服务、分布式锁等功能。

  2. 高性能:ZooKeeper 是针对读取操作进行优化的,具有低延迟和高吞吐量,适用于需要快速响应的分布式应用程序。

  3. 一致性:ZooKeeper 提供了强一致性的数据模型,确保在分布式环境中对数据的读取和写入操作是一致的。

  4. 可靠性:ZooKeeper 使用多数派选举算法来保证服务的可用性和容错性,即使在部分节点故障的情况下仍能正常运行。

  5. 轻量级:ZooKeeper 的设计简单轻量,适用于部署在各种环境中,不会对系统性能产生过大的负担。

  6. 开源:ZooKeeper 是一个开源项目,由 Apache 软件基金会进行维护和发展,用户可以免费使用和定制。

  7. 应用场景:ZooKeeper 在分布式系统中被广泛应用,例如用于协调分布式数据库、分布式消息队列、分布式计算等系统。

总的来说,ZooKeeper 是一个可靠、高性能的分布式协调服务,为分布式应用程序提供了一种简单而强大的方式来实现一致性和协调。

zoookeeper 集群安装配置

Zookeeper 安装

1.从 zoookeeper 官网下载 zookeeper 二进制压缩包到服务器的 /usr/local/src/ 目录下:

1
$ sudo wget -O /usr/local/src/apache-zookeeper-3.8.4-bin.tar.gz https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz

2.原地解压:

1
$ sudo tar -zxf /usr/local/src/apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local/src/

3.将解压出来的 zookeeper 目录移动到 /usr/local/ 目录下并重命名为 zookeeper:

1
$ sudo mv /usr/local/src/apache-zookeeper-3.8.4-bin /usr/local/zookeeper

zookeeper 配置

1.创建 zookeeper 数据存放目录:

1
$ sudo mkdir -p /data/zookeeper/data

2.将 zookeeper 安装目录和数据存放目录所属主和组都修改为当前用户:

1
$ sudo chown -R ${USER}:${USER} /usr/local/zookeeper/  /data/zookeeper

3.为每个节点指定 唯一ID 号,且必须存在在配置文件 zoo.cfg 中指定的 dataDir 目录下的 myid 文件中

节点:192.168.3.137

1
$ echo 1 > /data/zookeeper/data/myid

节点:192.168.3.136

1
$ echo 2 > /data/zookeeper/data/myid

节点:192.168.3.135

1
$ echo 3 > /data/zookeeper/data/myid

注意:切记修改其它节点的 myid 时,一定要与 zoo.cfg 中的 server.n 这里的 n 对应

4.复制 zookeeper 配置模板文件 zoo_sample.cfg 为 zoo.cfg

1
$ cd /usr/local/zookeeper/ && cp conf/zoo_sample.cfg conf/zoo.cfg

5.重新配置 zookeeper,内容如下:

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
$ cat << EOF > /usr/local/zookeeper/conf/zoo.cfg
# 客户端与服务端或者服务端和服务端之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳,
# 通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制follower和Leader的通信时间,
#默认情况下FL(Follower和Leader)的会话通常是心跳间隔的两倍,单位为毫秒。
tickTime=2000

# 集群中的follower服务器与Leader服务器之间的初始连接时能容忍的最多心跳数量
initLimit=10

# 集群中的follower服务器与leader服务器之间的请求和回答最多能容忍的心跳数量
syncLimit=5

# 目录地址,用来存放myid信息和一些版本、日志、服务器唯一ID等信息
dataDir=/data/zookeeper/data

# 监听客户端连接的端口
clientPort=2181

# n:代表的是一个数字,表示这个服务器的标号
# 192.168.3.137:服务器IP
# 2888:zookeeper 服务器之间的通信端口
# 3888:Leader 选举的端口
server.1=192.168.3.137:2888:3888
server.2=192.168.3.136:2888:3888
server.3=192.168.3.135:2888:3888
EOF

zookeeper 启动

1.在 /lib/systemd/system/ 目录下新建 zookeeper 启动脚本文件 zookeeper.service, 内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo bash -c "cat << EOF >/lib/systemd/system/zookeeper.service
[Unit]
Description=Apache Zookeeper
Documentation=http://zookeeper.apache.org
After=network.target

[Service]
User=veazhi
Group=veazhi
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_401
WorkingDirectory=/usr/local/zookeeper
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
PIDFile=/data/zookeeper/data/zookeeper_server.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF"

2.执行命令 systemctl daemon-reload 加载 zookeeper 启动脚本:

1
$ sudo systemctl daemon-reload

3.启动每个节点上的 zookeeper 服务并将其设置为开机启动:

1
2
$ sudo systemctl enable --now zookeeper.service 
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /usr/lib/systemd/system/zookeeper.service.

4.执行命令 systemctl status zookeeper.service --no-pager 查看 zookeeper 启动状态

节点状态

节点:192.168.3.137

1
2
3
4
5
$ cd /usr/local/zookeeper && ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

节点:192.168.3.136:

1
2
3
4
5
$ cd /usr/local/zookeeper && ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

节点:192.168.3.135:

1
2
3
4
5
6
$ cd /usr/local/zookeeper && ./bin/zkServer.sh status
/usr/local/jdk1.8.0_401/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower