Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署

文章目录

  • 前言
  • 一、Zookeeper完全分布式部署(手动部署)
    • [1. 下载Zookeeper](#1. 下载Zookeeper)
    • [2. 上传安装包](#2. 上传安装包)
    • [2. 解压zookeeper安装包](#2. 解压zookeeper安装包)
    • [3. 配置zookeeper配置文件](#3. 配置zookeeper配置文件)
      • [3.1 创建 zoo.cfg 配置文件](#3.1 创建 zoo.cfg 配置文件)
      • [3.2 修改 zoo.cfg 配置文件](#3.2 修改 zoo.cfg 配置文件)
      • [3.3 创建数据持久化目录并创建myid文件](#3.3 创建数据持久化目录并创建myid文件)
    • [4. 虚拟机hadoop2安装并配置Zookeeper](#4. 虚拟机hadoop2安装并配置Zookeeper)
    • [5. 虚拟机hadoop3安装并配置Zookeeper](#5. 虚拟机hadoop3安装并配置Zookeeper)
    • [6. 配置Zookeeper系统环境变量](#6. 配置Zookeeper系统环境变量)
      • [4.1 配置虚拟机hadoop1的Zookeeper环境变量](#4.1 配置虚拟机hadoop1的Zookeeper环境变量)
      • [4.2 配置虚拟机hadoop2的Zookeeper环境变量](#4.2 配置虚拟机hadoop2的Zookeeper环境变量)
      • [4.3 配置虚拟机hadoop3的Zookeeper环境变量](#4.3 配置虚拟机hadoop3的Zookeeper环境变量)
    • [5. 启动Zookeeper集群](#5. 启动Zookeeper集群)
    • [6. 查看Zookeeper集群状态](#6. 查看Zookeeper集群状态)
  • 二、使用shell脚本自动部署Zookeeper完全分布式(选看)
    • [1. 下载Zookeeper](#1. 下载Zookeeper)
    • [2. 上传安装包](#2. 上传安装包)
    • [3. 使用shell脚本自动部署Zookeeper完全分布式](#3. 使用shell脚本自动部署Zookeeper完全分布式)
      • [3.1 创建 hadoop1_zookeeper_install_config.sh 脚本文件并添加脚本内容](#3.1 创建 hadoop1_zookeeper_install_config.sh 脚本文件并添加脚本内容)
      • [3.2 添加可执行权限](#3.2 添加可执行权限)
      • [3.3 执行脚本](#3.3 执行脚本)
    • [4. 加载环境变量](#4. 加载环境变量)
    • [5. 启动Zookeeper集群](#5. 启动Zookeeper集群)
    • [6. 查看Zookeeper集群状态](#6. 查看Zookeeper集群状态)

前言

  1. 介绍在虚拟机hadoop1、hadoop2和hadoop3部署完全分布式Zookeeper
  2. 配置zookeeper配置文件
  3. 配置zookeeper环境变量
  4. 启动zookeeper及查看zookeeper集群状态
  5. 提供shell脚本自动化安装zookeeper完全分布式

一、Zookeeper完全分布式部署(手动部署)

1. 下载Zookeeper

点击下载zookeeper3.7.0安装包:https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

2. 上传安装包

通过拖移的方式将下载的zookeeper安装包apache-zookeeper-3.7.0-bin.tar.gz上传至虚拟机hadoop1的/export/software目录。

2. 解压zookeeper安装包

虚拟机hadoop1上传完成后将zookeeper安装包通过解压方式安装至/export/servers目录。

shell 复制代码
tar -zxvf /export/software/apache-zookeeper-3.7.0-bin.tar.gz -C /export/servers/

重命名

虚拟机hadoop1把解压后的安装目录apache-zookeeper-3.7.0-bin重命名为zookeeper-3.7.0,重命名是为了简化路径,其次是为了标准化命名。

shell 复制代码
mv /export/servers/apache-zookeeper-3.7.0-bin /export/servers/zookeeper-3.7.0

3. 配置zookeeper配置文件

3.1 创建 zoo.cfg 配置文件

虚拟机hadoop1通过复制Zookeeper的模板配置文件zoo_sample.cfg创建配置文件zoo.cfg。

shell 复制代码
cp /export/servers/zookeeper-3.7.0/conf/zoo_sample.cfg /export/servers/zookeeper-3.7.0/conf/zoo.cfg

3.2 修改 zoo.cfg 配置文件

虚拟机hadoop1修改 zoo.cfg 配置文件,执行如下命令修改和添加配置文件内容。

shell 复制代码
cat >/export/servers/zookeeper-3.7.0/conf/zoo.cfg <<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/data/zookeeper/zkdata
clientPort=2181

server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
EOF

3.3 创建数据持久化目录并创建myid文件

虚拟机hadoop1创建数据持久化目录并创建myid文件。

shell 复制代码
mkdir -p /export/data/zookeeper/zkdata
echo 1 > /export/data/zookeeper/zkdata/myid

虚拟机hadoop2创建数据持久化目录并创建myid文件。

shell 复制代码
mkdir -p /export/data/zookeeper/zkdata
echo 2 > /export/data/zookeeper/zkdata/myid

虚拟机hadoop3创建数据持久化目录并创建myid文件。

shell 复制代码
mkdir -p /export/data/zookeeper/zkdata
echo 3 > /export/data/zookeeper/zkdata/myid

4. 虚拟机hadoop2安装并配置Zookeeper

虚拟机hadoop1使用scp命令把虚拟机hadoop1的zookeeper的安装目录复制到虚拟机hadoop2的相同目录下,就相当于在hadoop2安装并配置了zookeeper。

shell 复制代码
scp -r /export/servers/zookeeper-3.7.0/ hadoop2:/export/servers/

5. 虚拟机hadoop3安装并配置Zookeeper

虚拟机hadoop1使用scp命令把虚拟机hadoop1的zookeeper的安装目录复制到虚拟机hadoop3的相同目录下,就相当于在hadoop3安装并配置了zookeeper。

shell 复制代码
scp -r /export/servers/zookeeper-3.7.0/ hadoop3:/export/servers/

6. 配置Zookeeper系统环境变量

4.1 配置虚拟机hadoop1的Zookeeper环境变量

虚拟机hadoop1 使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

shell 复制代码
echo >> /etc/profile
echo 'export ZK_HOME=/export/servers/zookeeper-3.7.0' >> /etc/profile
echo 'export PATH=$PATH:$ZK_HOME/bin' >> /etc/profile

配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用Zookeeper的环境变量生效。

shell 复制代码
source /etc/profile

4.2 配置虚拟机hadoop2的Zookeeper环境变量

虚拟机hadoop2 使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

shell 复制代码
echo >> /etc/profile
echo 'export ZK_HOME=/export/servers/zookeeper-3.7.0' >> /etc/profile
echo 'export PATH=$PATH:$ZK_HOME/bin' >> /etc/profile

配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用Zookeeper的环境变量生效。

shell 复制代码
source /etc/profile

4.3 配置虚拟机hadoop3的Zookeeper环境变量

虚拟机hadoop3 使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

shell 复制代码
echo >> /etc/profile
echo 'export ZK_HOME=/export/servers/zookeeper-3.7.0' >> /etc/profile
echo 'export PATH=$PATH:$ZK_HOME/bin' >> /etc/profile

配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用Zookeeper的环境变量生效。

shell 复制代码
source /etc/profile

5. 启动Zookeeper集群

虚拟机hadoop1执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

虚拟机hadoop2执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

虚拟机hadoop3执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

6. 查看Zookeeper集群状态

虚拟机hadoop1执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

虚拟机hadoop2执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

虚拟机hadoop3执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

如果集群启动正常如上图所示,会有一个领导者leader,两个跟随者follower。
若要停止Zookeeper集群运行 ,依次在虚拟机hadoop1、hadoop2和hadoop3执行如下命令停止Zookeeper服务。

shell 复制代码
zkServer.sh stop

二、使用shell脚本自动部署Zookeeper完全分布式(选看)

1. 下载Zookeeper

点击下载zookeeper3.7.0安装包:https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

2. 上传安装包

通过拖移的方式将下载的zookeeper安装包apache-zookeeper-3.7.0-bin.tar.gz上传至虚拟机hadoop1的/export/software目录。

3. 使用shell脚本自动部署Zookeeper完全分布式

3.1 创建 hadoop1_zookeeper_install_config.sh 脚本文件并添加脚本内容

虚拟机hadoop1 上创建hadoop1_zookeeper_install_config脚本文件

shell 复制代码
touch /export/shell/hadoop1_zookeeper_install_config.sh

添加如下内容:

shell 复制代码
#!/bin/bash

# 定义常量
ZK_VER="3.7.0"
ZK_BIN_TAR="apache-zookeeper-${ZK_VER}-bin.tar.gz"
ZK_DATA_DIR="/export/data/zookeeper/zkdata"
DATA_DIR="/export/data"
SOFTWARE_DIR="/export/software"
SERVERS_DIR="/export/servers"

# 如果数据持久化目录存在则删除
if [ -d "${ZK_DATA_DIR}" ]; then
  echo "删除 Hadoop1 的数据持久化目录 ${ZK_DATA_DIR}..."
  rm -rf ${ZK_DATA_DIR}
fi

ssh root@hadoop2 \
"
if [ -d \"${ZK_DATA_DIR}\" ]; then
  echo \"删除 Hadoop2 的数据持久化目录 ${ZK_DATA_DIR}...\"
  rm -rf ${ZK_DATA_DIR}
fi
exit
"

ssh root@hadoop3 \
"
if [ -d \"${ZK_DATA_DIR}\" ]; then
  echo \"删除 Hadoop3 的数据持久化目录 ${ZK_DATA_DIR}...\"
  rm -rf ${ZK_DATA_DIR}
fi
exit
"

# 检查zookeeper是否已解压
if [ -d "${SERVERS_DIR}/apache-zookeeper-${ZK_VER}-bin" ]; then
  echo "zookeeper安装程序已存在,正在删除原安装程序目录..."
  rm -rf "${SERVERS_DIR}/apache-zookeeper-${ZK_VER}-bin"
fi
if [ -d "${SERVERS_DIR}/zookeeper-${ZK_VER}" ]; then
  echo "zookeeper安装程序已存在,正在删除原安装程序目录..."
  rm -rf "${SERVERS_DIR}/zookeeper-${ZK_VER}"
fi

# 检查zookeeper安装包是否存在
if [ -f ${SOFTWARE_DIR}/${ZK_BIN_TAR} ]; then
  echo "zookeeper安装包存在,正在解压安装包..."
  # 解压zookeeper安装包
  tar -zxvf ${SOFTWARE_DIR}/${ZK_BIN_TAR} -C ${SERVERS_DIR}
  echo "解压 ${SOFTWARE_DIR}/${ZK_BIN_TAR} 到 ${SERVERS_DIR} 目录成功"
else
  echo "zookeeper安装包不存在,请先上传安装包到 ${SOFTWARE_DIR} 目录"
  exit 1
fi

# 重命名
mv ${SERVERS_DIR}/apache-zookeeper-${ZK_VER}-bin ${SERVERS_DIR}/zookeeper-${ZK_VER}
if [ $? -eq 0 ]; then
  echo "${SERVERS_DIR}/apache-zookeeper-${ZK_VER}-bin 重命名为 ${SERVERS_DIR}/zookeeper-${ZK_VER} 成功"
else
  echo "${SERVERS_DIR}/apache-zookeeper-${ZK_VER}-bin 重命名为 ${SERVERS_DIR}/zookeeper-${ZK_VER}失败,请检查"
  exit 1
fi

# 创建zoo.cfg配置文件
cp ${SERVERS_DIR}/zookeeper-${ZK_VER}/conf/zoo_sample.cfg ${SERVERS_DIR}/zookeeper-${ZK_VER}/conf/zoo.cfg
if [ $? -eq 0 ]; then
  echo "ZooKeeper 配置文件 zoo.cfg 创建成功"
else
  echo "ZooKeeper 配置文件 zoo.cfg 创建失败,请检查"
  exit 1
fi

# 修改zoo.cfg配置文件内容
cat >${SERVERS_DIR}/zookeeper-${ZK_VER}/conf/zoo.cfg <<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/data/zookeeper/zkdata
clientPort=2181

server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
EOF
echo "${SERVERS_DIR}/zookeeper-${ZK_VER}/conf/zoo.cfg 配置文件修改成功"

# 创建数据持久化目录并创建myid文件
mkdir -p /export/data/zookeeper/zkdata
echo 1 > /export/data/zookeeper/zkdata/myid
if [ $? -eq 0 ]; then
  echo 'Hadoop1 创建数据持久化目录并创建 myid 文件成功'
else
  echo 'Hadoop1 创建数据持久化目录并创建 myid 文件失败,请检查'
  exit 1
fi

ssh root@hadoop2 \
"
mkdir -p /export/data/zookeeper/zkdata
echo 2 > /export/data/zookeeper/zkdata/myid
if [ $? -eq 0 ]; then
  echo 'Hadoop2 创建数据持久化目录并创建 myid 文件成功'
else
  echo 'Hadoop2 创建数据持久化目录并创建 myid 文件失败,请检查'
fi
exit
"

ssh root@hadoop3 \
"
mkdir -p /export/data/zookeeper/zkdata
echo 3 > /export/data/zookeeper/zkdata/myid
if [ $? -eq 0 ]; then
  echo 'Hadoop3 创建数据持久化目录并创建 myid 文件成功'
else
  echo 'Hadoop3 创建数据持久化目录并创建 myid 文件失败,请检查'
fi
exit
"

# 配置ZooKeeper系统环境变量
if [ -n "$ZK_HOME" ]; then
  echo "Hadoop1 ZooKeeper 环境变量已配置:$ZK_HOME"
else
  echo >> /etc/profile
  echo 'export ZK_HOME=/export/servers/zookeeper-3.7.0' >> /etc/profile
  echo 'export PATH=$PATH:$ZK_HOME/bin' >> /etc/profile
  echo "Hadoop1 ZooKeeper 环境变量配置成功"
fi

# 分发环境变量配置文件到hadoop2
scp /etc/profile root@hadoop2:/etc/
if [ $? -eq 0 ]; then
  echo "分发 /etc/profile 到 hadoop2 的 /etc 目录成功"
else
  echo "分发 /etc/profile 到 hadoop2 的 /etc 目录失败,请检查"
  exit 1
fi

# 分发环境变量配置文件到hadoop3
scp /etc/profile root@hadoop3:/etc/
if [ $? -eq 0 ]; then
  echo "分发 /etc/profile 到 hadoop3 的 /etc 目录成功"
else
  echo "分发 /etc/profile 到 hadoop3 的 /etc 目录失败,请检查"
  exit 1
fi

# 分发安装程序到hadoop2
scp -r ${SERVERS_DIR}/zookeeper-${ZK_VER} root@hadoop2:${SERVERS_DIR}/
if [ $? -eq 0 ]; then
  echo "分发 ${SERVERS_DIR}/zookeeper-${ZK_VER} 到 hadoop2 的 ${SERVERS_DIR} 目录成功"
else
  echo "分发 ${SERVERS_DIR}/zookeeper-${ZK_VER} 到 hadoop2 的 ${SERVERS_DIR} 目录失败,请检查"
  exit 1
fi

# 分发安装程序到hadoop3
scp -r ${SERVERS_DIR}/zookeeper-${ZK_VER} root@hadoop3:${SERVERS_DIR}/
if [ $? -eq 0 ]; then
  echo "分发 ${SERVERS_DIR}/zookeeper-${ZK_VER} 到 hadoop3 的 ${SERVERS_DIR} 目录成功"
else
  echo "分发 ${SERVERS_DIR}/zookeeper-${ZK_VER} 到 hadoop3 的 ${SERVERS_DIR} 目录失败,请检查"
  exit 1
fi

echo -e "\n-----zookeeper 完全分布式安装配置完成-----\n"
echo -e "1. 依次在虚拟机Hadoop1、Hadoop2和Hadoop3执行命令 \e[31msource /etc/profile\e[0m 加载环境变量\n"
echo -e "2. 依次在虚拟机Hadoop1、Hadoop2和Hadoop3启动ZooKeeper服务:\e[31mzkServer.sh start\e[0m\n"
echo -e "3. 依次在虚拟机Hadoop1、Hadoop2和Hadoop3查看ZooKeeper服务状态:\e[31mzkServer.sh status\e[0m\n"
echo -e "若要停止ZooKeeper集群运行,依次在虚拟机Hadoop1、Hadoop2和Hadoop3停止ZooKeeper服务: \e[31mzkServer.sh stop\e[0m"

exit 0

3.2 添加可执行权限

虚拟机hadoop1 上给脚本文件/export/shell/hadoop1_hadoop_install_config.sh添加可执行权限。

shell 复制代码
chmod +x /export/shell/hadoop1_zookeeper_install_config.sh

3.3 执行脚本

虚拟机hadoop1上执行脚本文件自动化安装配置zookeeper完全分布式。

shell 复制代码
/export/shell/hadoop1_zookeeper_install_config.sh

执行完成如下图所示。

4. 加载环境变量

根据使用shell脚本自动安装完成后的提示依次在虚拟机hadoop1、hadoop2和hadoop3执行如下命令加载环境变量。

shell 复制代码
source /etc/profile

5. 启动Zookeeper集群

虚拟机hadoop1执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

虚拟机hadoop2执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

虚拟机hadoop3执行如下命令启动zookeeper。

shell 复制代码
zkServer.sh start

6. 查看Zookeeper集群状态

虚拟机hadoop1执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

虚拟机hadoop2执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

虚拟机hadoop3执行如下命令查看Zookeeper集群状态是否正常。

shell 复制代码
zkServer.sh status

如果集群启动正常如上图所示,会有一个领导者leader,两个跟随者follower。
若要停止Zookeeper集群运行 ,依次在虚拟机hadoop1、hadoop2和hadoop3执行如下命令停止Zookeeper服务。

shell 复制代码
zkServer.sh stop
相关推荐
zcmodeltech4 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
wWYy.5 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc
笨蛋不要掉眼泪5 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
发量惊人的中年网工5 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
段一凡-华北理工大学6 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
斯普润布特7 小时前
Kafka KRaft 三节点 ARM64 Docker 部署
分布式·kafka
笨蛋不要掉眼泪7 小时前
RabbitMQ消息队列:交换机机制
java·分布式·rabbitmq
zcmodeltech7 小时前
智慧农业沙盘模型物联网控制系统设计:基于STM32与Modbus RTU的传感器-执行器闭环方案
服务器·分布式·stm32·嵌入式硬件·物联网·能源
想你依然心痛7 小时前
HarmonyOS 5.0智慧农业开发实战:构建分布式农业物联网与区块链农产品溯源系统
人工智能·分布式·物联网·区块链·智慧农业·harmonyos·开发实战