任务5:shell脚本一键实现主机名、 IP等基础配置并在多台VM上实现(Hadoop部署10.11)
·
用一条命令(Shell 脚本)代替手工逐台配主机名、IP、SSH等重复劳动,把“配环境”从体力活变成一键自动化,为后续实验省下时间。
1.查询本机网络接口号
ifconfig

由上图: 接口名:ens33
当前 IP:192.168.88.131
2.编写 setup_cluster.sh 脚本实现以下功能:
cat > setup_cluster.sh << 'EOF'
#!/bin/bash
set -e
NETWORK_CARD="ens33"
GATEWAY="192.168.88.2"
DNS1="8.8.8.8"
BASE_IP_PREFIX="192.168.88.13"
TOTAL_NODES=3
HADOOP_PASS="123456"
[ "$(id -u)" -ne 0 ] && echo "Please run with sudo" && exit 1
[ -z "$1" ] && echo "Usage: $0 <node number 1-3>" && exit 1
NODE_NUM=$1
HOSTNAME="node${NODE_NUM}"
IP_ADDR="${BASE_IP_PREFIX}${NODE_NUM}"
[ "$NODE_NUM" -lt 1 ] || [ "$NODE_NUM" -gt "$TOTAL_NODES" ] && echo "Number out of range" && exit 1
echo "Start config $HOSTNAME ($IP_ADDR)"
hostnamectl set-hostname "$HOSTNAME"
echo "127.0.0.1 $HOSTNAME localhost" >>/etc/hosts
DEV=$NETWORK_CARD
nmcli con delete "$DEV" 2>/dev/null || true
nmcli con add type ethernet ifname "$DEV" con-name "$DEV" ip4 "$IP_ADDR/24" gw4 "$GATEWAY" ipv4.dns "$DNS1" ipv4.method manual
nmcli con up "$DEV"
systemctl disable --now firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
id hadoop &>/dev/null || (useradd hadoop && echo "$HADOOP_PASS" | passwd --stdin hadoop)
[ ! -f /root/.ssh/id_rsa ] && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
echo "$HOSTNAME finished"
EOF
给脚本添加执行权限
chmod +x setup_cluster.sh
执行脚本配置节点1
sudo ./setup_cluster.sh 1


3.检查是否配置成功
hostname #检查主机名
ip addr show ens33 #检查IP地址
ls -la /root/.ssh/ #检查SSH密钥
注:上面权限不够是正常的,说明root的SSH目录已创建
4.克隆
node1完成后,将其克隆,得到node2、node3

从 node1 复制到其他节点:
scp setup_cluster.sh xjw@192.168.88.132:~ #从 node1 复制到 node2
scp setup_cluster.sh xjw@192.168.88.133:~ #从 node1 复制到 node3
注:一定要确保node2、node3开机


然后在各节点执行如下:
# node2
chmod +x setup_cluster.sh
sudo ./setup_cluster.sh 2
# node3
chmod +x setup_cluster.sh
sudo ./setup_cluster.sh 3


5.配置SSH免密登录
1)切换到hadoop用户
su - hadoop
2)生成SSH密钥(在hadoop用户下)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -q
3)配置互相免密
#在node1上执行(hadoop用户)
for h in node1 node2 node3; do
ssh-copy-id -o StrictHostKeyChecking=no hadoop@$h
done
#在node2上执行(hadoop用户)
for h in node1 node2 node3; do
ssh-copy-id -o StrictHostKeyChecking=no hadoop@$h
done
#在node3上执行(hadoop用户)
for h in node1 node2 node3; do
ssh-copy-id -o StrictHostKeyChecking=no hadoop@$h
done
输出如下


4)测试免密登录
# 在任何节点执行(hadoop用户)
for h in node1 node2 node3; do
ssh hadoop@$h "hostname; date"
done

更多推荐


所有评论(0)