【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装

文章目录

1.基本原理

ZooKeeper 是一个分布式协调服务,用于分布式系统中管理配置信息、命名、同步和集群服务。它提供了一种简单的接口来访问存储在其文件系统中的数据,同时为复杂的分布式系统提供了高可用性和一致性保障。以下是 ZooKeeper 的基本原理:

1 . 数据模型和 ZNode

  • 数据模型:ZooKeeper 以分层命名空间的方式存储数据,类似于文件系统。每个节点称为一个 ZNode。
  • ZNode :ZNode 是 ZooKeeper 中的基本数据单元,可以存储少量数据。它有两种类型:
    • 持久节点(Persistent ZNode):即使客户端断开连接或系统重启,节点数据也会一直存在。
    • 临时节点(Ephemeral ZNode):客户端会话结束时自动删除。
    • 顺序节点(Sequential ZNode):自动在名称末尾附加一个单调递增的数字。

2 . 一致性保证

ZooKeeper 提供了一致性保障,确保以下条件:

  • 原子性:操作要么成功,要么失败,没有中间状态。
  • 顺序一致性:所有操作按照它们的执行顺序进行。
  • 单一系统映像:所有客户端无论连接到哪个 ZooKeeper 服务器,看到的数据都是一致的。
  • 耐久性:一旦操作成功执行,数据将被持久化,不会丢失。
  • 及时性:在合理的时间内,客户端可以看到最近的系统状态。

3 . Leader 选举和复制

  • 集群角色:ZooKeeper 集群由多个服务器(节点)组成,其中一个节点是 Leader,其余是 Follower。
  • Leader 选举:在集群启动或 Leader 故障时,ZooKeeper 使用选举算法(如基于 ZAB 协议的选举)选举新的 Leader。
  • 数据复制:Leader 负责处理所有的写请求,并将更新同步到所有 Follower,从而保持数据一致性。读请求可以由任何 Follower 处理。
  1. 会话和 Watcher
  • 会话:客户端与 ZooKeeper 服务器之间的连接称为会话。会话有超时机制,如果客户端在指定时间内没有发送心跳包,ZooKeeper 将认为会话结束。
  • Watcher:ZooKeeper 提供了一种监控机制,称为 Watcher。客户端可以在 ZNode 上设置 Watcher,当节点状态发生变化时,ZooKeeper 会通知客户端。这种机制常用于配置管理、命名服务和分布式锁等场景。

5 . 高可用性和容错

  • 高可用性:ZooKeeper 依赖于集群的多台服务器提供服务,即使部分节点故障,也能继续提供服务。
  • 容错性:ZooKeeper 能容忍少数节点的故障,而无需停止服务。只要集群中的活跃节点数量超过总节点数的一半(即超过多数节点),ZooKeeper 就能继续正常工作。

6 . ZAB 协议

ZooKeeper 使用的 ZAB 协议(ZooKeeper Atomic Broadcast)是一种基于投票的协议,确保了事务的顺序一致性和数据的复制。它包括两部分:选举阶段 (用于选举 Leader)和 广播阶段(用于复制数据)。

7 . 典型应用

ZooKeeper 常用于分布式系统中的服务注册和发现、分布式锁、配置管理、分布式消息队列等。其高可用性和一致性特性使其成为这些场景中的关键组件。

总之,ZooKeeper 通过提供可靠的分布式协调机制和数据一致性保障,为分布式系统的构建和管理提供了强有力的支持。

2.下载并解压ZooKeeper

1 . 环境准备

hostname ip
ubuntu1 172.16.167.131
ubuntu2 172.16.167.132
ubuntu3 172.16.167.133

2 . 下载ZooKeeper 3.7.1(或其他兼容版本)的二进制文件

shell 复制代码
https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/

3 . 解压缩文件并将其移动到适当的目录:

shell 复制代码
tar -xzf apache-zookeeper-3.7.1-bin.tar.gz
mv apache-zookeeper-3.7.1-bin /usr/local/zookeeper

3.配置环境变量

1 . 编辑/etc/profile文件,添加ZooKeeper的环境变量:

shell 复制代码
vim /etc/profile

2 . 添加以下内容:

shell 复制代码
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

3 . 刷新环境变量:

shell 复制代码
source /etc/profile

4 . 将环境变量分发到其他节点并刷新

4.配置ZooKeeper

1 . 进入ZooKeeper的配置目录:

shell 复制代码
cd /usr/local/zookeeper/conf

2 . 复制zoo_sample.cfgzoo.cfg

shell 复制代码
cp zoo_sample.cfg zoo.cfg

3 . 编辑zoo.cfg文件,进行基本配置:

shell 复制代码
vim zoo.cfg

根据你的集群环境修改以下内容,目录一定要注意:

properties 复制代码
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=10
syncLimit=5

server.1=ubuntu1:2888:3888
server.2=ubuntu2:2888:3888
server.3=ubuntu3:2888:3888
  • tickTime:ZooKeeper中两个心跳之间的基本时间单位,以毫秒为单位。
  • dataDir:存储快照的目录。
  • clientPort:客户端连接到ZooKeeper服务器的端口。
  • initLimit:允许追随者(Follwer)在连接并同步到Leader之前可以进行的心跳数。
  • syncLimit:Leader与Follower之间发送消息、请求和响应时间的数量。
  • server.X:ZooKeeper集群中服务器的配置,ubuntu1, ubuntu2, ubuntu3是你的服务器主机名或IP地址。
  • 用scp命令,将zookeeper分发到所有节点。

5.创建数据目录并初始化myid

1 . 在每个ZooKeeper节点上创建数据目录:

shell 复制代码
mkdir -p /var/lib/zookeeper
chmod -R 755 /var/lib/zookeeper

2 . 在每个节点的数据目录中创建myid文件,并写入对应的服务器编号(1,2,3):

shell 复制代码
echo "1" > /var/lib/zookeeper/myid  # 在ubuntu1上
echo "2" > /var/lib/zookeeper/myid  # 在ubuntu2上
echo "3" > /var/lib/zookeeper/myid  # 在ubuntu3上

6.启动ZooKeeper

1 . 在每个节点上启动ZooKeeper服务:

shell 复制代码
zkServer.sh start

2 . 验证每个节点ZooKeeper是否正常启动:

shell 复制代码
zkServer.sh status

7.配置ZooKeeper集成到Hadoop

1 . 修改Hadoop的core-site.xml文件,添加ZooKeeper的Quorum配置:

shell 复制代码
vim $HADOOP_HOME/etc/hadoop/core-site.xml

2 . 添加以下内容:

xml 复制代码
<property>
  <name>ha.zookeeper.quorum</name>

  <value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value>
</property>

8.重启Hadoop

1 . 重新启动Hadoop集群以应用新的配置:

shell 复制代码
stop-all.sh
start-all.sh

9.ZooKeeper状态检查

  • 使用ZooKeeper命令行客户端检查ZooKeeper的状态:
shell 复制代码
zkCli.sh -server ubuntu1:2181
  • 在ZooKeeper命令行客户端中,可以输入以下命令来检查集群状态:
shell 复制代码
ls /
stat

创建一个新的节点:

shell 复制代码
create /mytest "testdata"

验证节点创建:

shell 复制代码
ls /

删除节点:

shell 复制代码
delete /mytest
相关推荐
Leinwin5 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382505 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇5 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7596 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣6 小时前
智能体选型实战指南
运维·人工智能
yy55276 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ7 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔9 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密9 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20159 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑