1 配置主机名和 IP

2.1 配置静态 IP(所有节点)

Ubuntu/Debian - 编辑 
"/etc/netplan/01-netcfg.yaml":

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:  # 网卡名称,使用 ip addr 查看
      dhcp4: no
      addresses: [192.168.1.10/24]  # 根据节点修改 IP
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

应用配置:

sudo netplan apply

CentOS/RHEL - 编辑 
"/etc/sysconfig/network-scripts/ifcfg-ens33":

TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8

重启网络:

sudo systemctl restart network

2.2 配置主机名(所有节点)

设置主机名:

# 主节点执行
sudo hostnamectl set-hostname hadoop-master

# 从节点1执行
sudo hostnamectl set-hostname hadoop-slave1

# 从节点2执行
sudo hostnamectl set-hostname hadoop-slave2

2.3 配置 hosts 文件(所有节点)

编辑 
"/etc/hosts":

sudo vim /etc/hosts

# 添加以下内容
192.168.1.10 hadoop-master
192.168.1.11 hadoop-slave1
192.168.1.12 hadoop-slave2

验证配置:

ping hadoop-master
ping hadoop-slave1
ping hadoop-slave2

3. SSH 配置和免密登录

3.1 安装 SSH(所有节点)

# Ubuntu/Debian
sudo apt update
sudo apt install openssh-server openssh-client -y

# CentOS/RHEL
sudo yum install openssh-server openssh-clients -y

启动 SSH 服务:

sudo systemctl start sshd
sudo systemctl enable sshd

3.2 生成 SSH 密钥对(所有节点)

# 生成 RSA 密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 或者使用 ed25519(更安全)
ssh-keygen -t ed25519 -P '' -f ~/.ssh/id_ed25519

3.3 配置免密登录

方法一:主节点到所有节点的免密登录

1. 在主节点上拷贝公钥到所有节点:

# 拷贝到本机(主节点自身)
ssh-copy-id hadoop-master

# 拷贝到从节点1
ssh-copy-id hadoop-slave1

# 拷贝到从节点2
ssh-copy-id hadoop-slave2

# 如果 ssh-copy-id 不可用,手动操作:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

方法二:手动配置 authorized_keys

1. 在所有节点上收集公钥:

# 在每个节点上查看公钥
cat ~/.ssh/id_rsa.pub

2. 在主节点上创建统一的 authorized_keys:

# 在主节点上操作
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 将从节点的公钥添加到主节点的 authorized_keys
echo "slave1-public-key" >> ~/.ssh/authorized_keys
echo "slave2-public-key" >> ~/.ssh/authorized_keys

3. 分发 authorized_keys 到所有节点:

scp ~/.ssh/authorized_keys hadoop-slave1:~/.ssh/
scp ~/.ssh/authorized_keys hadoop-slave2:~/.ssh/

4. 设置正确的权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

3.4 测试免密登录

# 从主节点测试连接到各个节点
ssh hadoop-master "hostname; date"
ssh hadoop-slave1 "hostname; date"
ssh hadoop-slave2 "hostname; date"

# 应该不需要输入密码就能直接登录

4. SSH 安全配置(可选)

4.1 配置 SSH 增强安全

编辑 
"/etc/ssh/sshd_config":

sudo vim /etc/ssh/sshd_config

# 修改以下配置
Port 22
PermitRootLogin no
PasswordAuthentication no  # 禁用密码登录,只允许密钥登录
PubkeyAuthentication yes
AllowUsers hadoop  # 指定允许登录的用户

重启 SSH 服务:

sudo systemctl restart sshd

4.2 创建 Hadoop 专用用户(所有节点)

# 创建用户
sudo useradd -m -s /bin/bash hadoop
sudo passwd hadoop  # 设置密码

# 添加到 sudo 组
sudo usermod -aG sudo hadoop

# 切换到 hadoop 用户
su - hadoop

5. 验证集群连通性

5.1 网络连通性测试

# 在各节点上互相 ping 测试
ping -c 3 hadoop-master
ping -c 3 hadoop-slave1
ping -c 3 hadoop-slave2

5.2 SSH 免密登录测试

# 在主节点上测试到所有节点的免密登录
ssh hadoop@hadoop-master 'echo "Master OK"'
ssh hadoop@hadoop-slave1 'echo "Slave1 OK"'
ssh hadoop@hadoop-slave2 'echo "Slave2 OK"'

5.3 创建测试脚本

创建集群验证脚本 
"cluster-test.sh":

#!/bin/bash
nodes=("hadoop-master" "hadoop-slave1" "hadoop-slave2")

echo "=== 开始集群连通性测试 ==="

for node in "${nodes[@]}"; do
    echo "测试节点: $node"
    
    # 测试 ping
    if ping -c 1 $node &> /dev/null; then
        echo "  ✓ Ping 测试通过"
    else
        echo "  ✗ Ping 测试失败"
    fi
    
    # 测试 SSH 连接
    if ssh $node "echo 'SSH 连接成功'" &> /dev/null; then
        echo "  ✓ SSH 免密登录通过"
    else
        echo "  ✗ SSH 免密登录失败"
    fi
    echo "---"
done

echo "=== 测试完成 ==="

给脚本执行权限并运行:

chmod +x cluster-test.sh
./cluster-test.sh

6. 常见问题解决

6.1 SSH 连接失败

# 检查 SSH 服务状态
sudo systemctl status sshd

# 检查防火墙
sudo ufw status  # Ubuntu
sudo firewall-cmd --state  # CentOS

# 查看 SSH 连接日志
tail -f /var/log/auth.log

6.2 免密登录仍然需要密码

# 检查文件权限
ls -la ~/.ssh/

# 重新设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa

# 检查 SELinux(CentOS)
getenforce
setenforce 0  # 临时禁用

6.3 主机名解析失败

# 检查 /etc/hosts 配置
cat /etc/hosts

# 检查 DNS 解析
nslookup hadoop-master

# 重启网络服务
sudo systemctl restart systemd-resolved  # Ubuntu
sudo systemctl restart network  # CentOS

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐