使用Ansible自动化部署Hadoop集群(含源码)--环境准备

发布于:2025-09-07 ⋅ 阅读:(14) ⋅ 点赞:(0)

现在我们有5台虚拟机,已经配置好了主机名和网络

我们的目标是通过Ansible实现自动化部署hadoop集群。在此之前,我们先编写一个shell脚本来配置hadoop集群的环境,包括安装软件、安装配置Ansible(一个主节点+四个工作节点)、实现节点间的免密访问、配置hdfs yarn zookeeper等角色分组,为后续自动化部署hadoop集群做准备。

#!/bin/bash
# 指定使用 Bash 作为脚本解释器

set -ueo pipefail
# 设置安全选项:
# -u: 未定义变量时报错
# -e: 命令执行失败时立即退出
# -o pipefail: 管道命令中任意失败视为整个管道失败

# 统一 echo 函数定义
echo() {
    printf '%s\n' "$1"  # 使用 printf 确保输出一致性
}

# 检查 root 权限
if [ "$(id -u)" -ne 0 ]; then
    echo 'Please run as root!'  # 非 root 用户提示
    exit 127  # 返回错误代码
fi

# 安装必要软件包函数
install_packages() {
    dnf install -y sshpass ansible tar vim open-vm-tools  # 使用 dnf 安装关键工具
    # 配置 Ansible 禁用主机密钥检查
    if ! (grep -qF 'host_key_checking' /etc/ansible/ansible.cfg); then
        cat << 'EOT' >> /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False  # 禁用 SSH 主机密钥验证
deprecation_warnings = False  # 关闭弃用警告
EOT
    fi
}

# 配置 Ansible 主机清单
install_inventory() {
    cat << 'EOT' >> /etc/ansible/hosts
# Hadoop 集群分组配置
[NameNode]
hadoop1
hadoop2

[DataNode]
hadoop1-hadoop5(共5个节点)

[ZKFC]  # Zookeeper 故障转移控制器
hadoop1
hadoop2

# 其他组配置(JournalNode/NodeManager/ResourceManager/ZooKeeper)...
EOT
}

# 配置主机名解析
install_hosts() {
    cat << 'EOT' >> /etc/hosts
# Hadoop 集群 IP 映射
192.168.30.121 hadoop1
192.168.30.122 hadoop2
...(共5个节点)
EOT
}

# 配置 SSH 免密登录
install_root_ssh_key() {
    ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa  # 生成 RSA 密钥对
    # 为所有节点配置免密登录
    for i in {1..5}; do
        sshpass -p 'hadoop' ssh-copy-id -o StrictHostKeyChecking=no root@hadoop$i
    done
}

# 主执行流程
install_packages     # 1. 安装软件
install_inventory    # 2. 配置 Ansible
install_hosts        # 3. 设置主机映射
install_root_ssh_key # 4. 配置 SSH 免密


网站公告

今日签到

点亮在社区的每一天
去签到