自动化服务器部署

我发现我经常为几个客户设置几乎相同的服务器和VPS,这可能非常耗时。 通常情况下,每个部署之间唯一的变化是要提供的不同网站。 有没有一种简单的方法来自动化所有这些,并采取无聊的单调设置56个相同的服务器?

到目前为止,我已经部署的服务器只有Ubuntu,但可能我开始使用其他Linux操作系统甚至Windows。 到目前为止,我已经看过Capistrano,但它似乎专注于写小ruby程序来完成这项工作,而且我根本不知道

傀儡听起来很适合你要做的事情,但是从现在开始,Windows不支持Windows。

在你的情况下,你可以根据所有机器上相同的包来定义一个服务器节点。 然后,将单个主机定义为从服务器inheritance的节点,并为其设置特定的唯一事物。

木偶是声明性的 – 它允许你用每个盒子的资源来描述你的盒子。 所以如果你想要ssh ,你需要为这个资源编写一个类,而在这个类里你可以包含关于ssh在FreeBSD和Ubuntu上稍有不同的逻辑。 它也知道在Redhat中使用yum在基于Debian的发行版中使用apt-get ,在BSD中使用ports 。 现在在你的服务器节点中,你只需要一个像include ssh这样的行 – 而puppet会做正确的事情,把SSH放在机器上,而不必记得是Ubuntu还是Redhat或者FreeBSD。

最棒的是所有的服务器都在同一个地方 – 如果你在任何时候添加到服务器节点定义中,所有的机器都会相应地更新它们的configuration。

现在,我只使用Puppetpipe理三个盒子 – 但已经付清了。 花了一周的时间设置一个盒子,我们将在实验中用于刺激演示,结果发现显卡驱动程序在我放置的Ubuntu(8.04)版本中太老了。 我不得不安装最新的Ubuntu(9.04),但是之后我只需要apt-get和run puppet,我花了一周的时间就恢复了。

木偶有一点点的学习曲线,但我已经成功地避免了学习Ruby – 我知道我正在使用它,因为这是木偶写入的 – 但到目前为止,我已经成功修改了这些例子维基上的文档和配方 。 另一个缺点是,木偶花了一点时间,第一次做事情。 好处是,所有机器上的所有变化都存储在一个地方 – 这是将您的木偶configuration保存在版本控制系统中的标准做法 – 所以您可以随时回顾过去,看看过去如何设置服务器 – 或者回滚一些不成功的更改。

最后,这是一个简单的木偶演示,让我快速开始的快速video。

我们使用Cobbler和Puppet来实现真实和虚拟机的构build和configuration自动化。

Cobbler将DHCP,PXE启动和Kickstart捆绑在一起,只需添加一台机器configuration文件并打开电源button即可进行部署。 对于虚拟机, koan命令执行(在我们的情况下)Xen魔法来启动安装 – 在dom0我只是键入:

 koan --system vps.fqdn --server cobbler --no-gfx 

然后virsh console观看VPSbuild设没有任何交互。

我们使用RHEL,并设置了一些configuration文件来分区磁盘,configurationnetworking并为不同的服务器类安装基础包。 补鞋匠支持Debian和Ubuntu的品种,但我从来没有尝试过。 另外:Cobbler的其他有趣用途包括运行memtest ISO和HP固件更新。

一旦我们的系统是用Cobbler构build的,Puppet接pipeconfiguration应用程序,系统守护进程,在RHN中注册这个框。Puppet作为守护进程运行,定期检查系统的configuration是否与定义的清单相匹配 – 你知道你的更新已经消失到所有的服务器。 这也是一个很好的方法,确保一个已经closures的盒子在返回到现场服务之前具有正确的configuration。

木偶真的很棒。 你不需要在你的configuration的控制下完成所有的任务,只需要简单的pipe理你需要在每个盒子上configuration的东西( sudoers就是这个规范的例子),然后从这里开始。 确保你的Puppet清单也是版本化的; 没有什么比简单地回滚到一个已知的好的configuration更好,而不必记住要调整什么。

目前我在工作的地方,我们必须pipe理我们的服务器群的Linux部分,它只有300多台Linux服务器。 其中主要包括HP Proliants,其次是IBM 3850,一些IBM刀片,VMware ESX和一些KVM,用于内部pipe理服务器。

皮匠

我们看了一下皮匠,但是那个皮匠的问题是RHEL / Red Hat。 我们需要至less支持RHEL和SLES,而Ubuntu则是下一个。

木偶

我们确实考虑过傀儡,但后来决定反对,因为它取决于Ruby,这意味着Ruby的升级可能会破坏我们的pipe理系统。

热线

Hotwire是我们使用的(内部开发的,但是是开源的),并且在过去的几年中已经这样做了。 首先是对即将build设的系统进行清点,即盘点数据中心,机架,硬件,操作系统,networking等,其次是快速构build和部署。 一旦系统build成,hotwire的自动库存保持库存同步,而cfengine维护它们。 Hotwire通过使用python-dmidecode与Bios中的SMBIOS / DMI数据通信来了解服务器硬件。

奖励点在于它将库存和构build过程合并为一个,所以pipe理较less,而实时库存function非常好,因为我们知道某些事情是不是很正确。

缺点是用户界面仍然需要抛光,而且这里和那里都存在一些问题,但是开发还是比较热的,而且报告的bug也相对较快。

cfengine的

我们使用cfengine,因为除了它和木偶,没有别的。 它实际上一个好工具,但是“好”只是作为你的政策有多好的一个function – 如果你制定了危险的政策,那么一个小小的错误就会造成很大的损失。 例如,通过政策,我们不“修改”文件,我们要么replace它们,要么不replace。 另外,所有replace的文件都有一个标题,使得任何人都可以编辑它,知道它将在下一次运行时被replace(它通过每小时一次的cron运行)。

cfengine推送到服务器的configuration和所有文件也保存在一个SCM中,如果可能的话,使用post-commit钩子检查语法,如果失败,则提交被拒绝。 对于像Apache这样的好的应用程序来说,这很容易,但是对于大多数企业应用程序来说这并不容易

我已经与木偶成功了。 厨师是一个新的出现。 有关选项和比较图表的更长列表,请参阅Wikipedia文章“ 开源configurationpipe理软件的比较”

根据目标系统自动安装:

  • Debian / Ubuntu:FAI或di preseeding
  • RedHat / Fedora:Kickstart
  • Novell / openSuSE:AutoYaST
  • Solaris:Jumpstart
  • Windows:unattended.sourceforge.net

对于我build议使用木偶的configurationpipe理。

我在Puppet方面取得了很大的成功,但是你必须写很多configuration。

另一个投票在这里木偶。 我们广泛使用它来执行所有服务器和应用程序的安装和configurationpipe理。 200多个节点和计数。 Windows支持显然是在开发中,但在什么状态,我不知道。

我们仍在研究最初的操作系统bootstrap的一面,但正如上面提到的,Cobbler看起来很有趣。 我们目前正在使用Debian / Ubuntu预安装的PXE引导混合,但这并不是最佳的。