关于自动化部署

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

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

如果纯人工,那么可能需要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 <<EOF
set timeout 20
spawn scp /home/work/.ssh/id_rsa.pub $1:~
expect {
    "password:" {
        send "your_password\r"
        expect eof
    }
    "*continue connecting*" {
        exec sleep 1
        send "yes\r"
        expect  "password:" {
        exec sleep 1
        send "your_password\r"
        expect eof
    }
    }
}
EOF
}

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

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

installRsaKey()
{
expect <<EOF
set timeout 100
spawn ssh $1
expect {
    "password:"
    {
       send "your_password\r"
       expect "*"
       send "cat id_rsa.pub >> .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 <<EOF
set timeout 100
spawn ssh $1
expect {
    "Last login" {
    send "$2\r"
    expect "*"
    send "exit\r"
    expect eof

    }
}
EOF
}
时间: 2024-11-04 20:19:44

关于自动化部署的相关文章

构建iOS持续集成平台(三)CI服务器与自动化部署

CI服务器 写到这儿,对于iOS开发者来说,需要准备好: 一个比较容易获取的源代码仓库(包含源代码) 一套自动化构建脚本 一系列围绕构建的可执行测试 接下来就需要一个CI服务器来根据源代码的变更触发构建,监控测试结果.目前,业界比较流行的,支持iOS构建的CI服务器有Travis CI和Jenkins Travis CI Travis CI[20]是一个免费的云服务平台,主要功能就是为开源社区提供免费的CI服务,对于商业用户可以使用Travis Pro版本,其基本上支持所有目前主流的语言,Obj

简述WebSphere Commerce Search Web 服务器的自动化部署和配置

WebSphere Commerce Search Web 服务器自动化部署配置概述功能概述 在 Version 7 Feature Pack 5 之前,用户在启动 foundation 功能部件之后需要手动地执行一些配置步骤以完成对 WebSphere Commerce Search Web 服务器的部署和配置工作.以 IBM HTTP Server(IHS) Web 服务器为例,用户需要手动完成以下对 Search Web 服务器的部署配置工作:创建 Search Web 服务器的 http

SharePoint自动化部署:如何利用PowerShell 导出/导入AD中的用户

这几个月一直在帮客户改需求,部署.我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User.在基于SharePoint平台开发时,利用AD来进行人员的管理,一般会建组织单元(OrganizationalUnit)来对用户进行管理.当最终部署到客户的服务器上时,怎样把本地AD中的用户数据同步到服务器上呢,要知道如果手动输入人员是一件麻烦的事.幸运的事,PowerShell可以帮我们解决这个麻烦的问题. 导出A

基于AWS的自动化部署实践

1. 背景 在过去几年里,社交.移动和云计算深刻改变了整个互联网的格局.作为设计软件领域的全球领导厂 商,Autodesk也与2009年正式开始从传统桌面设计软件提供商向在线服务.协作和移动端设计转型.在 这次转型中,公司充分利用现代云计算的巨大优势给客户带来了大大超过传统桌面软件的处理能力.用 户体验和性价比.其中AWS是目前公司服务的主要运行平台,每年在此投入千万美金级别. 1.1. 传统软件交付的挑战 在过去的30多年里,Autodesk拥有了非常多的桌面设计软件(如AutoCAD,May

使用IBM Rational Application Framework for WebSphere进行资源自动化部署

使用IBM Rational Application Framework for WebSphere进行资源自动化部署,第1部分 IBM Rational Application Framework for WebSphere 为对 IBM WebSphere Application Server 与 IBM WebSphere Portal Server 自动化安装与补丁,配置管理与程序部署提供了一个基础.本文提供了对一些基本资源管理概念的介绍,例如资源配置如何存储在 XML 文件中,命令行语

在Docker中自动化部署Ruby on Rails的教程

  这篇文章主要介绍了在Docker中部署Ruby on Rails的教程,Docker是当下最火的虚拟机,而本文所介绍的Ruby on Rails的部署则充分利用了Ruby中的rake这一炫酷的实现自动化的方法,需要的朋友可以参考下 基本的Rails应用程序 现在让我们启动一个基本的Rails应用.为了更好的展示,我使用Ruby 2.2.0和Rails 4.1.1 在终端运行: ? 1 2 $ rvm use 2.2.0 $ rails new && cd docker-test 创建一

公有云环境下应用程序的自动化部署与水平扩展问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1690176 先介绍了一下公有云计算环境下的一些特点,再根据这些特点探讨一下作为云计算用户而言,如何对应用程序做好自动化部署和水平扩展(弹性计算)的问题.阅读本文需要有一定的云计算知识.开发运维知识. 公有云环境的优势及其特点 公有云为企业用户或个人用户(以下统称为用户)可提供三种服务,基础服务.应用服务和运维服务.

Apache Ant 实现自动化部署

Apache Ant 实现自动化部署 http://www.netkiller.cn/journal/java.ant.html Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890 <netkiller@msn.com> 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明. 文档出处: http://netkiller.github.io http://netki

Fabric-Python知名批量自动化部署/测试模块

Fabric Python知名开源自动化部署模块Fabric,强烈推荐给各位!(运维,测试-均可以用它实现无比具有想象力的任务)他主要用于对设备/服务器批量执行任务(同时更换500台服务器的密码.同时更新或者重启500台虚拟机)安装和使用也极其方便,没有什么中间代码,没有架构,没有内幕! 或许对于批量自动化部署而言,这是一个很大很大的福音. 我们来看一个VPSee提供的案例: #!/usr/bin/python # -- coding: utf-8 -- from fabric.api impo

WebHook 自动化部署和运维工具 git-webhook

Git WebHook 一个使用 Python Flask + SQLAchemy + Celery + Redis + React 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维系统,支持:Github / GitLab / GitOsc. 技术栈简单,部署容易; 代码简洁易懂,二次开发毫无压力; 支持 Github / GitLab / GitOsc; 使用 SSH 方式,支持多服务配置; Online DEMO Website: http://webhook.hust.cc