使用一个命令将更改传播到多个 Linux 服务器

使用一个命令将更改传播到多个 Linux 服务器

我有十几台 CentOS Linux 服务器。总体来说,它们的配置基本相同。

有时我需要添加额外的 cron 作业(/etc/cron.d/ 中的单独 crontab 文件),和/或将新的 BASH/Perl 脚本复制到 10 多个服务器,或者运行 sed 表达式对基本上存在于每 10 多个服务器上的脚本进行微小更改。

我很快就厌倦了在单个主机上做这件事。那么,你们是如何应对这一挑战的?你们有什么秘诀吗?有什么我应该知道的软件吗(免费且可靠)?

我正在寻找通过 SSH 执行此操作的方法,但我也对其他方法很好奇。

答案1

你正在打开一个巨大的麻烦。:) 对于这个(非常常见的)问题,有很多不同的方法和解决方案。它可以是一些基本的东西,比如并行-ssh。但你真正想要的(但还不知道;)是配置管理系统。两个越来越受欢迎的竞争产品/项目是:木偶厨师。还有许多其他产品最终可以让你完成同样的任务。我最近发现了Ansible而且看起来确实很有前景。如果正确实施,所有这些解决方案将使您能够更好地管理更多系统。维基百科有一篇文章列出了此类产品http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software

答案2

您需要配置管理,例如木偶或者厨师。有一个相当长的学习曲线(习惯命令式幂等风格需要一点时间),但是一旦你克服了最初的困难,它对于管理大量类似配置的服务器以及保持其配置保持最新非常有用。

您还可以使用以下方法编写脚本织物- 一个 Python 框架,可以通过 ssh 执行命令,以及将文件复制到服务器和从服务器复制文件。并且主机变量可以有一个主机列表,使操作更加简单。非常值得研究。

然后是- 一个扩展性非常好的远程执行引擎。

但我只会选择配置管理工具并运行它。

答案3

我自己会做的是创建一个需要运行命令的服务器列表。在运行命令的机器和运行命令的服务器之间设置 ssh 证书。然后将需要运行的命令添加到脚本中,并让脚本循环遍历运行命令的服务器列表。您可能想要想出一个日志系统,但是错误可能会导致头痛。

IE:

服务器列表:

10.0.0.1
10.0.0.2
10.0.0.3

运行命令的脚本

#!/bin/bash
for server in `cat servers.lst`
do
ssh server some-command >> log.txt
done

答案4

CF引擎正是出于这个目的,它已经存在很长时间了。

如果您需要以下最佳配置管理解决方案:

  • 最快、最具可扩展性的解决方案
  • 了解系统的实际状态
  • 具有最佳安全记录的解决方案
  • 充分的灵活性和精细的控制
  • 成熟且适合企业的解决方案

相关内容