Linux Cluster环境下批量分发执行补丁
转自:http://blog.csdn.net/napolunyishi/article/details/18219867
这两天做了一个需求,因为上一个版本的/tmp空间默认只分配了5G,而升级程序上传解压路径也是/tmp,且解压过程要占用5G左右的空间,这样 就导致/tmp空间占满,解压失败,升级无法进行。后来想了一个办法,就是从/var建了一个软链接到/tmp,这样实际上升级文件上传解压到/var路 径下了,解决了/tmp路径空间不足的问题。但是因为客户那里是一个cluster环境,由6个node组成,最好能够在一个机器上执行一次补丁,所有 node都生效。
经过几次尝试,写了两个shell脚本,一个run.sh负责调度和分发补丁,另外一个doFix.sh,真正给系统打补丁的脚本。这里只介绍调度分发的部分
基本思路就是从主node上将doFix.sh脚本分发到其他各个node上,然后再从主node上ssh到各node执行补丁脚本。
调度脚本run.sh:
#!/bin/bash
#check version
cat /etc/issue | grep "V3.5"
if [ $? -ne ]; then
echo "This is not V3.5, exit!"
exit
fi
ISFABRIC=
ADMPW=""
echo
read -rsn1 -p "Is this a fabric with same admin password? [y/n]"
echo
if [ "$REPLY" = "y" -o "$REPLY" = "Y" ]; then
ISFABRIC=
read -esp "Please input the password: " ADMPW
else
echo "Please run the script doFix.sh manually"
exit
fi
echo
echo
echo "Patch current node..."
sh ./doFix.sh
NODEIP=$(ifconfig eth0 | grep 'inet addr' | cut -d':' -f2 | awk '{print $1}')
echo "Begin to patch other nodes..."
echo
egrep "MAGICNODE-" /etc/hosts | awk '{print $1}' | sort | uniq | while read LINE
do
if [ "$NODEIP" = "$LINE" ]; then
continue
fi
echo "Patching node $LINE"
# scp doFix.sh to remote node
./scpExpect $ADMPW./doFix.sh admin@$LINE:/tmp/
if [ $? -ne ]; then
echo "SCP script to node $LINE failed! skip"
continue
fi
# execute patch script
./sshExpectSudo admin $ADMPW $LINE "sudo bash /tmp/doFix.sh"
if [ $? -ne ]; then
echo "Remote patch node $LINE failed! skip"
continue
fi
echo
echo
done
echo "Patch finished."
从/etc/hosts文件中获取cluster环境的所有node IP,然后将doFix.sh脚本通过scp送过去,再执行ssh打补丁。
这里两个关键点是scpExpect和sshExpect,何为Expect文件?请参考http://expect.sourceforge.net/,网上有很多Expect的介绍文章,归结一句话就是一种实现自动化交互的脚本语言,从TCL扩展出来。
scpExpect
#!/usr/bin/expect -f
# usage: scpExpect user password ip file target system "rm -rf ~/.ssh/known_hosts"
set password [lindex $argv ]
set from [lindex $argv ]
set to [lindex $argv ]
set timeout # now connect to remote UNIX box (ipaddr) with given script to execute
spawn scp -r -o StrictHostKeyChecking=no $from $to
match_max
expect {
"*assword:*" {
send -- "$password\r"
set timeout -
expect {
"*assword:*" {
exit
}
}
} "yes/no)?" {
send "yes\r"
set timeout -
} -re . {
exp_continue
} timeout {
exit
} eof {
exit
}
}
sshExpect
#!/usr/bin/expect -f
# usage: ssh user password ipaddre command target
# set Variables
set user [lrange $argv ]
set password [lrange $argv ]
set ipaddr [lrange $argv ]
set command [lrange $argv ]
set target [lrange $argv ]
set timeout - # now connect to remote UNIX box (ipaddr) with given script to execute
spawn ssh -o StrictHostKeyChecking=no $user@$ipaddr $command $target
match_max
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof
Linux Cluster环境下批量分发执行补丁的更多相关文章
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Linux单机环境下HDFS伪分布式集群安装操作步骤v1.0
公司平台的分布式文件系统基于Hadoop HDFS技术构建,为开发人员学习及后续项目中Hadoop HDFS相关操作提供技术参考特编写此文档.本文档描述了Linux单机环境下Hadoop HDFS伪分 ...
- Linux centos7环境下安装MySQL的步骤详解
Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
https://blog.csdn.net/shinesun001/article/details/54312402 在centos 7环境下搭建好Lnmp环境之后,发现安装的php有好多扩展都没有安 ...
- linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦
linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(一) 一.Linux下安装MySQL 1.下载 下载地址:http://dev.mysql.co ...
- 在 Windows 和 Linux(Gnome) 环境下 从命令界面打开网页的方式
1.在 Windows 中 通过命令 可以打开网页是很简单的: start http://www.baidu.com 或 start iexplorer http://www.baidu.com 第二 ...
- linux网络环境下socket套接字编程(UDP文件传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- 如何在Linux桌面环境下自动启动程序?
大多数Linux桌面环境有各自的图形用户界面(GUI),让用户可以配置针对特定用户的自动启动程序或服务.本文将介绍如何在各种Linux桌面环境下,自动启动某个程序的方法. AD:WOT2014:用户标 ...
- Linux centos7环境下安装JDK的步骤详解
Linux centos7环境下安装JDK的步骤详解 测试root用户下JAVA版本 输入命令: java –version 1.先到Oracle官网里下载好jdk,网址如下: http://ww ...
随机推荐
- 37 The Benefits of Cutting Salt 减少盐分摄取量的益处
The Benefits of Cutting Salt 减少盐分摄取量的益处 ①Just when you had figured out how to manage fat in your die ...
- python调用dll方法
在python中调用dll文件中的接口比较简单,实例代码如下: 如我们有一个test.dll文件,内部定义如下: extern "C"{ int __stdcall test( v ...
- Dalvik虚拟机java方法执行流程和Method结构体分析
Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息. Method结构体是怎样定义的? 此结构体在不同的andr ...
- Scala包和引用
1.包 Scala包的命名方式有两种.一种和Java一样,通过把package子句放在文件顶端的方式,把整个文件的内容放进包里.如: package scala.actors.Actor 另一种方式可 ...
- iOS 5 故事板进阶(2)
让我们回到游戏排行窗口Ranking.创建一个 UITableViewController子类,命名为 RankingViewController. 编辑 RankingViewController. ...
- hibernate 一对一 one to one的两种配置方式
hibernate中one-to-one两种配置方式 标签: hibernateHibernateone-to-one 2013-02-19 17:44 11445人阅读 评论(1) 收藏 举报 分 ...
- Paul and Joyce are going to a movie(More listening of Unit 2)
Paul: Hurry up, Joyce. We need to leave now if we're going to get to the theater a half hour befor ...
- DevOps Workshop 研发运维一体化(广州站)
第一天对软件开发的需求管理.项目计划和源代码管理进行的全面而深入的介绍,并且为到会的所有开发人员提供现场动手实验的机会,大家兴致高涨,按照我们的操作手册完成了所有实验课题. 第二天主要介绍了最新的自动 ...
- 3D空间中射线与轴向包围盒AABB的交叉检测算法【转】
引言 在上一节中,我讲述了如何实现射线与三角形的交叉检测算法.但是,我们应该知道,在游戏开发中,一个模型有很多的三角形构成,如果要对所有的物体,所有的三角形进行这种检测,就算现在的计算机运算能力,也是 ...
- <mvc:annotation-driven />到底帮我们做了啥
一句 <mvc:annotation-driven />实际做了以下工作:(不包括添加自己定义的拦截器) 我们了解这些之后,对Spring3 MVC的控制力就更强大了,想改哪就改哪里. s ...