Linux集群软件安装实战
一、需求和思路
1. 需求描述
公司有N个节点的集群,需要统一安装一个软件(jdk)
需要开发一个脚本程序,实现对集群中的N个节点批量自动下载、安装jdk
2. 思路
1)编写一个启动脚本,用来发送一个软件安装脚本到一台机器
2)然后启动每台机器上的软件安装脚本来执行软件下载和安装
3. 步骤
1)搭建web服务器 存放jdk软件
httpd /var/www/html/jdk.1.7.0.67.tar.gz
2) scp 分发一个软件安装脚本install.sh给所有机器
3) 然后启动每台机器的install.sh(ssh 目标机器 /root/install.sh)
install.sh负责
下载jdk,解压缩到指定目录,修改配置文件
问题:使用scp命令远程拷贝文件时,会有人机交互的过程,如何让脚本完成人机交互
方法:使用expect 软件(记得安装哦)
用法示例:先观察 ssh localhost 的过程,在看expect 的功能
#!/bin/bash/expect ## exp_test.sh # 设置超时时间为永久 set timeout -1 spawn ssh localhost; expect{ "(yes/no)" {send "yes\r";exp_continue;} "password:" {send "hadoop\r";exp_continue} eof {exit:0;} }
执行:expect -f exp_test.sh
二、准备内网软件下载服务器
选择一台服务器(hdp01)作为软件源服务器
1.安装httpd
- 查看http是否安装: netstat -nltp
- 设置自启动:chkconfig httpd on
- 设置本次启动:service httpd on
- 查看http是否启动成功: netstat -nltp
将jdk 放到web服务器下 (将需要的软件放在web服务器下)
- yum install -y httpd
- service httpd start
- chkconfig --level 35 httpd on
2.设置配置文件
1)在hdp01机器中
vi /etc/hosts
## 设置所有机器的映射 192.168.33.101 hdp01 192.168.33.102 hdp02
2)将此文件拷贝到其他机器
scp /etc/hosts hdp02:/etc
3) 将配置文件拷贝到其他机器上
- 用户软件放在 /var/www/html/soft/
- 系统软件放在 /var/www/html/centos/
挂载软件库:mount -t iso9660 -o loop /dev/cdrom /var/www/html/centos/
修改配置文件:
cd /etc/yum.repos.d/
vi localnet.repo
## 设置下载地址: baseurl=http://hdp01/centos ##(通过浏览器:http://hdp01/centos可访问)
scp localnet.repo hdp03:/etc/yum.repos.d/
4) 查看yum仓库地址
yum repolist
三、软件自动安装脚本
1.启动脚本
vi boot.sh
#!/bin/bash SERVICES="hdp02 hdp03" PASSWORD=hadoop BASE_SERVICE=192.168.33.101 ## 实现免密登录配置的函数 auto_ssh_copy_id(){ ## 用expect命令进行解析 expect -c "set timeout -1; spawn ssh-copy-id $1; expect{ *(yes/no)*{send --yes\r;exp_continue;} *assword:*{send --$2\r;exp_continue;} eof {exit 0;} } " } ssh_copy_id_to_all(){ for SERVICE in $SERVICES do auto_ssh_copy_id $SERVICE $PASSWORD done } ## 调用免密登录配置函数,实现母鸡到各仔鸡的免密登录配置 ssh_copy_id_to_all ## 完成分发install.sh 到各仔鸡的操作 ## 并让仔鸡启动install.sh for SERVICE in $SERVICES do ## 将install.sh拷贝到service的root目录下 scp install.sh root@SERVICE:/root ## 远程执行远程机器上的install.sh上的脚本文件 ## ssh root@$SERVICE /root/install.sh ## ssh root@$SERVICE "sh /root/install.sh" 或 ssh root@$SERVICE "chmod +x /root/install.sh;/root/install.sh" done
2.安装执行脚本
vi install.sh
#!/bin/bash BASE_SERVICE=192.168.33.91 ## 为本机安装wget命令 -y 免提示 yum install -y wget ## 使用wget从母鸡的web服务器上下载jdk压缩包 wget $BASE_SERVICE/soft/jdk-7u67-linux-x64.gz ## 将下载的压缩包解压缩 tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local ## 修改profile配置文件 注意两个EOF之间指定重定向输入内容,通过cat命令追加到执行文件中 cat>>/etc/profile<<EOF export JAVA_HOME=/usr/local/jdk1.7.0_67 export PATH=\$PATH;\$JAVA_HOME/bin EOF
3.执行命令
在hdp01机器上执行:
##设置执行权限
chmod +x boot.sh install.sh
## 生成密钥
ssh-keygen
## 执行免密登录脚本
./boot.sh
在hdp02机器上查看安装情况:
cd /usr/local/
cat /ect/profile