跳转到内容

ZooKeeper分布式集群安装部署

课程介绍

接下来我们学习ZooKeeper集群的安装部署。ZooKeeper是分布式协调服务,用于Hadoop、Kafka等分布式系统的协调管理。安装ZooKeeper需要先准备好JDK和集群环境。下载安装包后,解压并创建软链接。然后修改zoo.cfg配置文件,设置数据目录、端口、集群节点列表等。配置完成后,启动集群,用jps验证进程是否正常运行。ZooKeeper是分布式系统的重要组件,为后续学习Hadoop、Kafka等分布式系统打下基础。

2. ZooKeeper概述

ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Hadoop和HBase的重要组件。它为分布式应用提供一致性服务,主要功能包括:

  • 配置维护
  • 域名服务
  • 分布式同步
  • 主节点选举
  • 集群管理

应用场景:

  • 为Hadoop和HBase提供协调服务
  • 作为Kafka的分布式状态一致性依赖
  • 在各种分布式系统中提供协调服务

NOTE

ZooKeeper在大数据体系和分布式应用开发中扮演着至关重要的角色,凡是涉及分布式状态一致性的场景,都能看到它的身影。


3. 安装前准备

环境要求

  • 集群服务器:至少3台Linux服务器(本课程使用node1、node2、node3)
  • JDK环境:已安装JDK 1.8或以上版本
  • 网络配置
    • 三台服务器之间可以互相通信
    • 已配置主机名映射
    • 已配置SSH免密登录
  • 目录结构
    • 已创建/export/server/目录用于安装软件

检查环境

bash
# 检查JDK版本
java -version

# 检查主机名映射
cat /etc/hosts

# 测试SSH免密登录
ssh node2
ssh node3

4. ZooKeeper安装步骤

步骤1:下载ZooKeeper安装包

在node1服务器上执行:

bash
# 切换到安装目录
cd /export/server/

# 下载ZooKeeper安装包
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

步骤2:解压安装包

bash
# 解压安装包
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz

# 查看解压结果
ls -l

步骤3:创建软链接

为了方便后续操作,创建一个指向ZooKeeper安装目录的软链接:

bash
# 创建软链接
ln -s apache-zookeeper-3.5.9-bin zookeeper

# 验证软链接
ls -l

5. 集群配置

步骤1:修改核心配置文件

bash
# 进入ZooKeeper配置目录
cd /export/server/zookeeper/conf/

# 复制示例配置文件为正式配置文件
mv zoo_sample.cfg zoo.cfg

# 编辑配置文件
vim zoo.cfg

配置文件内容修改:

properties
# 基本时间单位,以毫秒为单位
# 它是服务器之间或客户端与服务器之间维持心跳的时间间隔
# 也就是每个 tickTime 时间就会发送一个心跳
# 最小的 session 过期时间为 2*tickTime
tickTime=2000

# 允许 follower 连接并同步到 leader 的初始化连接时间,以 tickTime 为单位
# 当初始化连接时,允许 follower 连接并同步到 leader 的时间
# 如果该值为5,则表示允许 5*tickTime 时间,即 5*2000=10 秒
initLimit=5

# follower 与 leader 之间发送消息,请求和应答的时间长度
# 如果 follower 在设置时间内不能与 leader 进行通信,那么此 follower 将被丢弃
# 如果该值为2,则表示允许 2*tickTime 时间,即 2*2000=4 秒
syncLimit=2

# 数据目录,用于存储内存数据库快照和事务日志文件
# 注意:请确保此目录存在
dataDir=/export/server/zookeeper/data

# 客户端连接端口
clientPort=2181

# 集群配置:server.序号=主机名:LF通信端口:选举端口
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

步骤2:创建数据目录和myid文件

bash
# 创建数据目录
mkdir -p /export/server/zookeeper/data

# 创建并编辑myid文件
vim /export/server/zookeeper/data/myid

在node1的myid文件中写入:1

步骤3:将配置复制到其他节点

bash
# 复制ZooKeeper到node2
scp -r /export/server/apache-zookeeper-3.5.9-bin/ node2:/export/server/

# 复制ZooKeeper到node3
scp -r /export/server/apache-zookeeper-3.5.9-bin/ node3:/export/server/

步骤4:配置其他节点的软链接和myid

在node2上执行:

bash
# 创建软链接
ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper

# 创建数据目录
mkdir -p /export/server/zookeeper/data

# 编辑myid文件,写入2
vim /export/server/zookeeper/data/myid

在node3上执行:

bash
# 创建软链接
ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper

# 创建数据目录
mkdir -p /export/server/zookeeper/data

# 编辑myid文件,写入3
vim /export/server/zookeeper/data/myid

6. 集群启动与验证

启动ZooKeeper集群

需要在所有节点上分别执行启动命令:

在node1上:

bash
/export/server/zookeeper/bin/zkServer.sh start

在node2上:

bash
/export/server/zookeeper/bin/zkServer.sh start

在node3上:

bash
/export/server/zookeeper/bin/zkServer.sh start

验证集群启动状态

查看单个节点状态:

bash
# 在任意节点执行
/export/server/zookeeper/bin/zkServer.sh status

验证ZooKeeper服务:

bash
# 连接到ZooKeeper客户端
/export/server/zookeeper/bin/zkCli.sh

# 在客户端中执行命令
ls /

预期输出:

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

参数名作用说明
tickTime基本时间单位,用于心跳机制和超时计算
initLimit允许follower连接并同步到leader的初始化连接时间
syncLimitfollower与leader之间发送消息、请求和应答的时间长度
dataDir数据目录,存储内存数据库快照和事务日志
clientPort客户端连接端口,默认2181
server.id集群节点配置,格式:server.id=主机名:LF通信端口:选举端口

7. 命令总结表

功能描述命令示例
下载ZooKeeperwget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
解压安装包tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz
创建软链接ln -s apache-zookeeper-3.5.9-bin zookeeper
修改配置文件vim /export/server/zookeeper/conf/zoo.cfg
创建数据目录mkdir -p /export/server/zookeeper/data
编辑myid文件vim /export/server/zookeeper/data/myid
复制到其他节点scp -r /export/server/apache-zookeeper-3.5.9-bin/ node2:/export/server/
启动ZooKeeper/export/server/zookeeper/bin/zkServer.sh start
查看状态/export/server/zookeeper/bin/zkServer.sh status
连接客户端/export/server/zookeeper/bin/zkCli.sh
关闭ZooKeeper/export/server/zookeeper/bin/zkServer.sh stop

8. 常见问题与解决方案

问题描述可能原因解决方案
启动时报错:No such file or directory数据目录不存在检查并创建dataDir指定的目录
集群无法正常工作myid配置错误检查每个节点的myid文件,确保与zoo.cfg中的配置一致
连接客户端时超时防火墙未关闭或端口未开放关闭防火墙或开放相关端口
节点无法加入集群网络连接问题或配置错误检查网络连接和配置文件中的服务器地址










扩展阅读

NOTE

课后请完成所有练习,并尝试搭建一个ZooKeeper集群,为后续学习Hadoop、Kafka等分布式系统做好准备。


课程总结

这节课我们学了ZooKeeper分布式集群的安装和部署。

安装步骤:

  1. 下载ZooKeeper安装包
  2. 解压到/export/server目录
  3. 创建数据目录和日志目录
  4. 复制配置文件zoo.cfg并修改

集群配置(zoo.cfg):

  • tickTime=2000 - 心跳间隔
  • dataDir - 数据目录
  • clientPort=2181 - 客户端端口
  • server.1=node1:2888:3888 - 集群节点配置
  • server.2=node2:2888:3888
  • server.3=node3:2888:3888

myid文件: 每个节点的dataDir下创建myid,值为节点编号(1/2/3)

启动命令: zkServer.sh start - 启动ZooKeeper zkServer.sh status - 查看状态

ZooKeeper是分布式协调服务,用于维护配置信息、命名服务、分布式同步和组服务。

课后练习

  • 基础练习:在三台服务器上独立安装ZooKeeper并配置成集群。

  • 进阶练习:修改ZooKeeper的客户端端口为2182,重新启动集群并验证。

  • 综合练习:模拟ZooKeeper节点故障,观察集群的自动恢复能力。


评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径