关于自动化部署

关于自动化部署对于大规模的集群 相信都有一整套比较完善的自动化部署方案 自动化部署有很多问题值得思考 比如如何均衡的利用每个节点的资源 保证整个集群的负载打散 如果方便的加入新机器 如何在机器物理故障时下线它 然后将部署的任务迁移到其他的备机 有点资源管理的意味了 本文不会讨论这些问题 只涉及一个很简单的场景 如何将应用部署到一定数量的机器 然后启动它 比如你在上线前 需要压力测试 需要评测性能 都可能需要人工的部署几十台机器 如果纯人工 那么可能需要 scp 或者 wget 或者 hadoopclient 将应用下载到

对于大规模的集群,相信都有一整套比较完善的自动化部署方案。自动化部署有很多问题值得思考,比如如何均衡的利用每个节点的资源,保证整个集群的负载打散;如果方便的加入新机器,如何在机器物理故障时下线它,然后将部署的任务迁移到其他的备机,有点资源管理的意味了。

本文不会讨论这些问题。只涉及一个很简单的场景:如何将应用部署到一定数量的机器,然后启动它。比如你在上线前,需要压力测试,需要评测性能,都可能需要人工的部署几十台机器。

如果纯人工,那么可能需要scp,或者wget,或者hadoop client,将应用下载到目标机器,然后解压,然后启动它。本文的目的就是脚本化上述操作。


1. 最简单

我们知道,ssh可以远程执行一些命令

ssh hostname "command lines"


可能唯一的障碍就是需要输入密码。当然了你可能说可以设置ssh免密码登陆,那么你至少要每台机器操作一下吧,还是没有绕过输入密码。

使用sshpass 可以解决输入密码的问题。

$ sshpass Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) -e Password is passed as env-var "SSHPASS" With no parameters - password will be taken from stdin -h Show help (this screen) -V Print version information

sshpass不是默认安装的。

接下来的工作就很简单了,

sshpass -p your_password ssh "command1; command2;..."

那设置ssh 密码登陆来说,实际上就是先wget 中控机的id_rsa.pub, 然后加到目标机的authorized_keys即可。几条命令的罗列。

如果你可以通过上述命令解决你的问题,那么恭喜你,否则,接着向下看吧。

2. 人工交互不可避免怎么办

有时候逻辑的确是复杂,有的应用还是需要人工交互才能搞定。。。我们需要完全人工化,那么使用expect可以满足你的要求。

相信大家都熟悉awk,sed等一众非常有用的linux 命令,那么expect也是。下面以设置ssh密码登陆为例,讲解expect的用法。

uploadRsaKey() { expect < 
   

第7行实际上是一个模糊匹配的过程,如果当前的交互中出现password,那么send 你的密码过去,注意一定要以\r结尾。当然了如果是continue connecting,那么首先发送yes,然后再发送密码过去。使用exec sleep 1,可以sleep 1 秒。

现在只是将key上传到额目标机器上了,那么如何install rsa key呢?

installRsaKey() { expect < 
    
      > .ssh/authorized_keys\r" expect "*" send "exit\r" expect eof } "Last login" { send "exit\r" expect eof } } EOF } 
    

当然了,要注意.ssh 的权限要设置为700, .ssh/authorized_keys的权限是600;如果权限不对,系统是不会让你免密码登陆的。

最后给出一个通用的执行一个命令的函数吧:

exec_shell() { expect < 
     











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226967.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:15
下一篇 2026年3月16日 下午10:16


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号