主题
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 node34. 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 -l5. 集群配置
步骤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/myid6. 集群启动与验证
启动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的初始化连接时间 |
| syncLimit | follower与leader之间发送消息、请求和应答的时间长度 |
| dataDir | 数据目录,存储内存数据库快照和事务日志 |
| clientPort | 客户端连接端口,默认2181 |
| server.id | 集群节点配置,格式:server.id=主机名:LF通信端口:选举端口 |
7. 命令总结表
| 功能描述 | 命令示例 |
|---|---|
| 下载ZooKeeper | wget 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分布式集群的安装和部署。
安装步骤:
- 下载ZooKeeper安装包
- 解压到/export/server目录
- 创建数据目录和日志目录
- 复制配置文件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节点故障,观察集群的自动恢复能力。