Linux系列:shell编程之集群自动部署!
1、什么是“集群自动部署”?
2、把需要安装的东西放到http服务器上面去。
# 以安装jdk-8u73-linux-x64.tar.gz为例子,进行说明
# 你需要经历如下几步:
1)虚拟机的httpd服务是否开启。你目前可以一直设置开机自启
[root@image1 ~]# chkconfig --level 35 httpd on
2) 虚拟机的防火墙是否关闭。你目前可以一直设置开机关闭
[root@image1 ~]# chkconfig --level 35 iptables off
3)把jdk-8u73-linux-x64.tar.gz这个安装包,放置到http服务器上面去。
[root@image1 ~]# cp jdk-8u73-linux-x64.tar.gz /var/www/html/
4)检验。你可以去浏览器上打开你自己的http网页,看看是否可以下载。
检验结果如下:这样证明我们是可以下载的。
3、先讲解几个知识点:wget、EOF、expect人机交互
1)wget
wget是一个从网络上自动下载文件的自由工具。它支持HTTP、HTTPS和FTP协议,可以使用HTTP代理。
由于我们在第二步就配置好了我们的http服务。因此,当我们把安装软件放到http服务器的时候,我们就可以使用wget,从我们的http服务器上,自动下载我们想要安装的软件。
1)安装wget
[root@image1 ~]# yum install wget
2)从http服务器上面下载,我们放置的安装软件jdk-8u73-linux-x64.tar.gz
[root@image1 ~]# wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"
2)EOF
# EOF语法如下
-----------------------------
<<EOF //开始标志
....
在这里写入内容
....
EOF //结束标志
-----------------------------
执行脚本的时候,需要往一个文件里自动输入多行内容。如果是少数的几行内容,
还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得
愚蠢之极了!这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
Ⅰ EOF配合cat使用:要么追加,要么覆盖原内容。
Ⅱ 使用echo追加内容,少数几行还可以,多了这样写的话太麻烦了。
Ⅲ 使用cat + EOF的方式。
3)expect人机交互
这里你可以去百度学习以下:就不详细演示了。
当我们操作某个命令的时候,有时候提示我们人工输入一些东西,或者“直接回车”,以远程登陆其他虚拟机来说,当我们执行“ssh 192.168.2.102”这个操作的时候,系统会提示你是否想要登陆,然后你就要输入yes;接着就又会让你输入登陆密码password,你又要输入密码。
当然,你肯定不希望,我们使用脚本进行自动部署的时候,还一边要人工操作吧!这个时候,就需要“人机交互”,让系统模拟人工操作。
具体内容,可以百度学习一下,不是太难。
4、进行“集群自动部署”脚本的编写。
1)原理说明
第一个是自动安装的脚本“autoInstall.sh”,在这个shell脚本中,写了一系列的步骤:下载、解压、配置环境变量、重新加载配置文件、测试是否安装成功、删除安装包等。我们只需要将这个脚本发送到不同节点的机器上,执行即可。这就是下面要说的第二个shell脚本,远程发送的脚本。
第二个脚本是远程发送文件,执行文件的脚本“send.sh”,在这个shell脚本中,使用scp远程发送的功能,使用了ssh远程登陆并执行“autoInstall.sh”的功能。但是这一切都依赖于【免密登录】,这就是下面要写的第三个shell脚本。
第三个脚本是免密登录的脚本“key.sh”,在这个shell脚本中,实现了生成密钥对、发送公钥到其他机器的授权池等一系列的人机交互。
2)自动安装的脚本:autoInstall.sh
#!/bin/bash
# 1)下载
wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"
# 2)创建目录并解压解压
mkdir -p /usr/local/java
tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local/java
# 3)配置:利用she'l'l脚本,往配置文件中追加内容
cat>>/etc/profile<<EOF
export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
# 4)重新加载
source /etc/profile
# 5)测试
java -version
# 6)删除安装包
rm -rf /root/jdk-8u73-linux-x64.tar.gz
# 7)测试程序是否执行到了最后一行
echo "我已经执行到最后一行了"
3)发送autoInstall.sh安装脚本到image2和image3这两台机器的脚本:send.sh
发送安装脚本的前提是:配置免密登录。只有在配置免密登录的前提下,才可以实现不用输入密码,进行远程登陆 和 远程发送文件。
#!/bin/bash
services=(192.168.2.102 192.168.2.103)
# yum install -y expect
for service in ${services[*]}
do
scp -r autoInstall.sh root@$service:/root
ssh $service sh autoInstall.sh
# 人机交互
expect -c "
expect {
\"~]#\" {send \"exit\r\";exp_continue;}
}
"
echo "${service} 退出登录"
done
4)免密登录的脚本:key.sh
#!/bin/bash
expect -c "
spawn echo "我要开始生成密钥对了"
spawn ssh-keygen
expect {
\"/root/.ssh/id_rsa):\" {send \"\r\";exp_continue;}
\"(empty for no passphrase):\" {send \"\r\";exp_continue;}
\"passphrase again:\" {send \"\r\";exp_continue;}
}
"
services=(192.168.2.101 192.168.2.102 192.168.2.103)
for service in ${services[*]}
do
# 人机交互
expect -c "
spawn ssh-copy-id $service
expect {
\"yes/no)?\" {send \"yes\r\";exp_continue;}
\"password:\" {send \"123456\r\";exp_continue;}
}
"
done
- 点赞
- 收藏
- 关注作者
评论(0)