本文是大数据系列第 3 篇,讲解 Hadoop 集群 SSH 免密登录配置,以及编写文件分发脚本,为集群群起做准备。
为什么需要免密登录
Hadoop 集群启动时,主节点会通过 SSH 连接到各从节点执行启动命令。如果没有免密,每次都需要手动输入密码,集群无法自动化启动。
/etc/hosts 配置(重要)
配置不好的话集群之间会互相不认证,所有节点需要在 /etc/hosts 中互相映射:
# 每台机器的 /etc/hosts 都要加上这三行
<h121的IP> h121.wzk.icu h121
<h122的IP> h122.wzk.icu h122
<h123的IP> h123.wzk.icu h123
公网云服务器注意:hostname 对应的 IP 填公网 IP,不要用 127.x.x.x。
SSH 免密配置步骤
1. 三台节点都生成 RSA 密钥
ssh-keygen -t rsa -b 4096
# 一路回车,不要设置密码
生成后在 ~/.ssh/ 目录下有:
id_rsa:私钥id_rsa.pub:公钥
2. 将公钥分发到所有节点
在每台节点上执行,将自己的公钥分发到三台机器(包括自身):
ssh-copy-id h121.wzk.icu
ssh-copy-id h122.wzk.icu
ssh-copy-id h123.wzk.icu
3. 验证免密登录
ssh h122.wzk.icu
# 不需要输密码即成功
集群文件分发脚本
在集群运维中,经常需要将配置文件同步到所有节点,编写一个 rsync 脚本放到 /usr/local/bin 中全局可用:
#!/bin/bash
# 脚本:xsync,用法:xsync <文件或目录>
# 放到 /usr/local/bin/xsync 并 chmod +x
pcount=$#
if((pcount==0)); then
echo "No args..."
exit
fi
p1=$1
fname=$(basename $p1)
pdir=$(cd -P $(dirname $p1); pwd)
echo "------sync $pdir/$fname------"
for host in h121.wzk.icu h122.wzk.icu h123.wzk.icu; do
echo "-------- $host --------"
rsync -rvl $pdir/$fname $host:$pdir
done
安装:
sudo cp xsync /usr/local/bin/
sudo chmod +x /usr/local/bin/xsync
使用:
xsync /opt/servers/hadoop-2.9.2/etc/hadoop/
常见踩坑
- 权限问题:
~/.ssh目录权限必须是 700,~/.ssh/authorized_keys权限必须是 600 - 防火墙:公网云服务器要放行 22 端口(通常已开放)
- 首次登录提示:第一次 ssh 连接会提示 “Are you sure…”,手动输 yes 确认后才能免密