我发现我经常为我的许多客户设置几乎相同的服务器和 VPS,这可能非常耗时。通常,每次部署之间唯一变化的是要服务的不同网站。有没有一种简单的方法可以自动完成所有这些工作,并摆脱设置 56 台相同服务器的无聊单调?
到目前为止我部署的服务器只有 Ubuntu,但我可能会开始使用其他 linux 操作系统甚至 Windows。到目前为止,我已经看过 Capistrano,但它似乎专注于编写小的 ruby 程序来完成这项工作,而我根本没有任何知识
我发现我经常为我的许多客户设置几乎相同的服务器和 VPS,这可能非常耗时。通常,每次部署之间唯一变化的是要服务的不同网站。有没有一种简单的方法可以自动完成所有这些工作,并摆脱设置 56 台相同服务器的无聊单调?
到目前为止我部署的服务器只有 Ubuntu,但我可能会开始使用其他 linux 操作系统甚至 Windows。到目前为止,我已经看过 Capistrano,但它似乎专注于编写小的 ruby 程序来完成这项工作,而我根本没有任何知识
Puppet听起来非常适合您尝试做的事情,但需要注意的是,目前尚不支持 Windows。
在您的情况下,您将根据所有机器上相同的包来定义一个服务器节点。然后,您将各个主机定义为从 Server 继承的节点,并为其设置特定的独特事物。
Puppet 是声明性的——它允许你根据每个盒子应该拥有的资源来描述你的盒子。因此,如果您愿意
ssh
- 您为该资源编写一个类 - 在该类中您可以包含有关如何在 FreeBSD 和 Ubuntu 上调用 ssh 略有不同的逻辑。它还知道yum
在 Redhat 和apt-get
基于 Debian 的发行版以及ports
BSD 中使用。现在,在您的服务器节点中,您将有一行类似include ssh
- 并且 puppet 会做正确的事情并将 SSH 放在机器上,而您不必记住那是 Ubuntu、Redhat 还是 FreeBSD。好的是所有服务器的东西都放在一个地方——如果你在任何时候添加到服务器节点定义,所有机器都会相应地更新它们的配置。
现在,我只使用 Puppet 管理三个盒子 - 但它已经得到了回报。在花了一周时间设置了一个我们将在实验中用于刺激演示的盒子后,结果发现显卡驱动程序在我安装的 Ubuntu 版本(8.04)中太旧了。我必须安装最新的 Ubuntu (9.04),但之后我只需要 apt-get 并运行 puppet - 我花了一周时间设置的所有东西都恢复了。
Puppet 确实有一点学习曲线,但我成功地避免了学习 Ruby——我知道我正在使用它,因为那是 puppet 的编写方式——但到目前为止,我已经成功地修改了中的示例wiki 上的文档和食谱。另一个缺点是 puppet 第一次做事确实需要更长的时间。好处是您在所有机器上更改的所有内容都存储在一个位置 - 将 puppet 配置保存在版本控制系统中是标准做法 - 因此您可以随时回顾并查看过去是如何设置服务器的- 或回滚一些不成功的更改。
最后,这是一个快速视频,它做了一个简单的木偶演示,让我快速入门。
我们使用Cobbler和Puppet来构建和配置真实机器和虚拟机的自动化。
Cobbler 将 DHCP、PXE 引导和 Kickstart 结合在一起,使部署只不过是添加机器配置文件并按下电源按钮。对于虚拟机,该
koan
命令执行(在我们的例子中)Xen 魔法来开始安装——dom0
我只需输入:然后
virsh console
在没有任何交互的情况下观看 VPS 建筑物。我们使用 RHEL 并设置了一组配置文件来对磁盘进行分区、配置网络并为不同的服务器类安装基础包。Cobbler 支持 Debian 和 Ubuntu 品种,但我从未尝试过。顺便说一句:Cobbler 的其他有趣用途包括运行memtest ISO 和HP 固件更新。
一旦使用 Cobbler Puppet 构建了我们的系统,就会接管配置应用程序、系统守护进程、向 RHN 注册盒子等。Puppet 作为守护进程运行,它会定期检查系统的配置是否与定义的清单匹配——您知道您的更新已经消失到所有服务器。这也是一个很好的方法,可以确保在您将其恢复为实时服务之前,已经停机进行维护的盒子具有正确的配置。
木偶真的很厉害 您不需要将配置的每个方面都置于其控制之下——首先让它管理您需要在每个盒子上配置的一些简单的东西(
sudoers
这是典型的示例)并从那里获取它。确保你的 Puppet 清单也是版本化的;没有什么比能够轻松回滚到已知良好的配置而无需记住要调整什么更好的了。我现在工作的地方,我们必须管理我们服务器场的 Linux 部分,它有 300 多台 Linux 服务器。这主要包括 HP Proliants,其次是 IBM 3850、一些 IBM 刀片、VMware ESX 和一些用于我们内部管理服务器的 KVM。
皮匠
我们查看了 cobbler,但问题在于 cobbler 非常特定于 RHEL/Red Hat。我们至少需要支持 RHEL 和 SLES,接下来是 Ubuntu。
木偶
我们确实考虑过 puppet,但后来决定反对它,因为它依赖于 Ruby,这意味着升级 Ruby 可能会破坏我们的管理系统。
热线
Hotwire 是我们使用的(内部开发,但是是开源的),并且在过去几年中一直这样做。它首先盘点将要构建的系统,即盘点数据中心、机架、硬件、操作系统、网络等,然后执行快速构建和部署。系统构建完成后,hotwire 的自动库存会保持库存同步,而 cfengine 会维护它们。Hotwire 通过python-dmidecode与 Bios 中的 SMBIOS/DMI 数据交谈,了解服务器硬件。
好处是它将库存和构建过程合二为一,因此需要管理的东西更少,而且我们知道如果某些事情不太正确,实时库存功能非常棒。
缺点是用户界面还需要打磨,bug时有发生,但开发依然火爆,bug修复速度比较快。
cfengine
我们使用 cfengine 是因为除了它和 puppet,没有别的东西。它实际上是一个很好的工具,但“好”仅取决于您的政策有多好——如果您制定了危险的政策,那么一个小错误可能会造成很大的损害。例如,根据政策,我们不会“修改”文件,我们要么替换它们,要么不替换它们。此外,所有被替换的文件都有一个标题,使任何编辑它的人都知道它将在下次运行时被替换(它通过 cron 每小时运行一次)。
cfengine 推送到服务器的配置和所有文件也保存在 SCM 中,并使用提交后挂钩,在可能的情况下,我们检查语法,如果失败,则拒绝提交。这对于 Apache 等优秀的应用程序来说很容易,但对于大多数企业应用程序来说却不是那么容易。
我在Puppet上取得了成功。 厨师是一个新出现的人。有关更长的选项列表和比较图表,请参阅 Wikipedia 文章,开源配置管理软件的比较。
根据目标系统自动安装:
对于最重要的配置管理,我建议使用 puppet。
我在Puppet方面取得了很大的成功,但是您确实必须编写很多配置。
在这里再次为 Puppet 投票。我们广泛使用它来执行所有服务器和应用程序安装和配置管理。200 多个节点并且还在增加。Windows 支持显然正在开发中,但我不确定处于什么状态。
我们仍在研究最初的操作系统引导方面,但如上所述,Cobbler 看起来很有趣。我们目前正在混合使用 PXE 引导和 Debian/Ubuntu 预置,但这并不是最优的。