如何在多台机器上部署程序

如何在多台机器上部署程序

我需要在大约 40 台 Kubuntu 13.04 机器上安装一些程序,并且想知道我必须采取哪些选项才能尽可能高效地完成安装。

编辑:我已经设置了存储库,并且机器都是相同的克隆,没有 LDAP 身份验证或集中式服务器。

答案1

任何配置管理软件都可以,这就是它们的用途,我建议看看厨师。这是他们网页上的简介:

Chef 是一个将基础设施转换为代码的自动化平台。停止考虑物理和虚拟服务器。对于 Chef,您真正的资产是使这些服务器及其提供的服务变得栩栩如生的代码。自动化基础设施可以加快您的上市时间,帮助您管理规模和复杂性,并保护您的系统。

无论您的网络是在云端、现场还是混合网络中,Chef 都可以自动化您配置、部署和扩展服务器和应用程序的方式,无论您管理 5 台服务器、5,000 台服务器还是 500,000 台服务器。难怪 Facebook 和 Amazon 等公司选择 Chef 来应对关键任务挑战。

这个视频会有很大帮助: http://www.youtube.com/watch?v=0UXh5EnFZrM

主页: http://www.opscode.com/chef/

答案2

只是为了扩展拉胡尔的非常好的答案,您可以使用这种方法轻松地设置对每台计算机的无密码访问:

  1. 安装sshpass在您的本地计算机上:

    sudo apt-get install sshpass
    

    这将允许您将密码作为命令行参数传递:

     sshpass -p '<password>' ssh user@server
    
  2. 创建 ssh 密钥

    ssh-keygen -t rsa
    

    您可以通过允许空密码来简化事情(这个答案的其余部分将假设您已经这样做了,如果您的安全考虑禁止这样做,请告诉我,我将进行相应修改)。

  3. 创建一个文件,其中包含您感兴趣的所有 IP 及其各自的用户名和密码,每行一个:

    1.2.3.4 bob bobs_password
    11.22.33.44 hary harrys_password 
    

    现在,使用sshpass复制您的密钥文件,并且——只要您使用了空密码——允许对所有计算机进行无密码访问:

    while read ip user pass; do 
      sshpass -p "$pass" ssh ssh-copy-id -i ~/.ssh/id_rsa.pub $user@$ip;
    done < ips.txt
    
  4. 现在您已经设置了无密码访问,请在每台计算机上安装您的软件(假设可以$user运行apt-get,基本上就是$userroot

     while read ip user pass; do 
       ssh $user@$ip "apt-get install package; 
     done < ips.txt
    

答案3

为了长期目标

如果您想要自动化工具来集中管理网络上运行的各种 *nix 风格并管理配置的各个方面,那么您可以查看:

  1. 木偶
  2. 厨师
  3. cfengine3

对于短期目标

apt-get如果您想要临时解决方案只是通过或安装某些软件包yum,那么您可以使用 shell 或 perl、python 脚本。

如果您已经设置了无密码身份验证,那么您可以只使用以下脚本:

#!/usr/bin/env bash

Servers_list=/opt/servers_list
PackageName="package-name"

for Host in $(< $Servers_list )
do
    echo "Installing package on $Host"
    ssh "${Host}"  apt-get -y install "${PackageName}"

done

如果您没有无密码身份验证,那么您可以使用python 中的expect工具或模块。paramiko

相关内容