在多个服务器上pipe理应用程序,或PXE与cfEngine / Chef / Puppet

我们有一个应用程序正在运行几个(5左右,将增长)框。 所有机器的硬件都是相同的,理想情况下软件也是一样的。 我一直在pipe理他们,直到现在,不想再(静态IP地址,禁用所有必要的服务,安装所需的软件包…)。 任何人都可以平衡以下选项的利弊,或者build议更聪明的东西?

1:单独在所有的盒子上安装centos,并与厨师/ cfengine / puppetpipe理configuration。 这样做会很好,因为我想借口学习使用其中一个应用程序,但是我不知道这是否是最好的解决scheme。

2:使一个盒子完美,并形象化。 通过PXE服务映像,每当我想修改,我可以重新启动一个新的形象的框。 群集家伙通常如何处理/ etc / sysconfig / network-scripts / ifcfg *文件中的mac地址? 我们也使用infiniband,如果hwaddr错误,它也拒绝启动。 这些可以在启动时正确生成吗?

我倾向于PXE解决scheme,但我认为与munin或nagios的监控将会更复杂一点。 任何人都有这种types的问题的经验?

所有服务器都有固态硬盘,速度快而且function强大。

谢谢,马特。

你的集群听起来更像是一个HPC集群,而不是像我这样的OLTP集群,但我认为我使用的设置也适用于你。 我把它称为“mpdehaan trifecta”,因为那是编写或pipe理这三种工具的人的责任。

1.) 补鞋匠基地build设供应。 Cobbler是一个旨在成为您的kickstart,pxe,yum-repo,dhcp,dns等系统交集的项目。 它是迄今为止获得kickstart设置和运行的最简单的方法,并且您可以根据需要发展到其他function。

2.) Puppet进行configurationpipe理。 理想情况下,你的修鞋匠build立的主机是非常准系统configuration, 只是知道刚刚启动电话回家给你的木偶服务器。 然后Puppet将应用您的configuration设置并永久保持您的环境一致。

3.)针对并行的多个机器的ad-hoc命令。 例如“部署一个新的svn签出代码并重新启动Apache”。 只需使用func就可以像在cluster-ssh上那样在一组服务器上调用相同的bash命令。 如果你真的想进入它,你可以用一些非常简单的Python编写你自己的模块。

所有这三个工具都有很好的wiki和主动irc频道来帮助freenode。

概观

在某些方面,你有两个问题在这里..

  • 我如何构build和维护标准服务器?
  • 如何维护标准configuration并稍后进行更改?

我在下面把我的答案分开来解决这两个问题,但是它们是非常密切相关的。 我正在处理这里的技术解决scheme,而不是相关的最佳实践,比如变更控制。

如果这不包括您的问题的范围,请澄清,我会很乐意详细说明。 这是必要的基础,这对于运行良好的技术基础设施至关重要。

build筑服务器

我不喜欢UNIX世界中的图像; 这更像是一种Windows风格的方法。 即使是一些Windows用户,现在似乎也重新关注了标准构build的脚本。

卫星似乎在RHEL世界中越来越受欢迎。 太空行走是开源的对口。 你一定要购买RHEL的方法才能使用它。 这既可以用作服务器构build,也可以用作configurationpipe

理想情况下,您需要在文件服务器上为所有必要的软件build立本地镜像和存储库。

首先,利用您的发行版本自动化,例如RHEL / CentOS中的Kickstart。 Kickstart将是一个具有变化的基线,取决于您的需求。 Kickstart构build可以从PXE服务器启动。

对于构build的更高级的部分和任何不适合Kickstart文件的东西,你可以写自己的自定义脚本。 但是,您可能会发现傀儡或cfengine适合您,而不是自定义脚本。 我发现自定义脚本是最灵活的,不限于任何单一的方法。

如果您select编写您自己的脚本,我推荐一个用于通用configuration的核心脚本。 这将是安全configuration,强化,以及适用于所有版本的任何内容。 然后最后一个脚本来完成服务器angular色。 例如,一个Web服务器或一个数据库服务器。

维护标准

您所描述的内容也属于维护configuration。 构build标准,软件更新和其他东西都与构build有关,但在很多方面是分开的。

如果您select依赖系统软件包,而不是为最重要的服务器angular色创build自己的基于源码的版本,则可以使用本地系统实用程序维护很多版本。 这可以是一个简单的脚本来运行一个for循环对您的服务器列表并运行yum -y update package

对于configurationpipe理来说,这是puppet,cfengine和其他configurationpipe理工具的作用。 这些是非常有用的实用程序,并提供必要的基础,而无需从头编写自己的脚本。

当您更新服务器的configuration标准时,重要的是将其填充到标准服务器版本中。

我最近完成了一个大项目,在$ WORK上推出集中式构build/configuration和configurationpipe理系统。 我们正在运行CentOS。

我碰巧喜欢的devise给了我们一个简单的(一个Web GUI页面)构build过程,使用一些自定义的PHP脚本通过一个简单而有效的Web UI将所有东西联系在一起。

一般理论是:

  1. 从一个单一的,统一的,最小化的KickStart文件(好的,一个用于x86,一个用于x86-64,但是仍然是几乎相同的文件,只有最less的包select)安装。
  2. KickStat postinstall脚本bootstraps Puppet。
  3. Puppet应用所有节点/主机特定的configuration,软件包安装等。

我同意图像不是Unix-y的做事方式……它们更适合于脚本/自动安装和configuration不那么简单的Windows世界。

您可以用任何符合法案的configurationpipe理系统来replacePuppet,但是我碰巧喜欢Puppet的声明性和融合的概念。

这个系统带来许多好处:

  • Puppet处理通过一般基本安装的所有东西,因此所有必需的软件包和configuration都在一个地方。
  • 木偶清单作为低级文档的额外来源。
  • 只要你坚持使用Puppet(也就是说,不要进行本地configuration更改,或者将它们合并回Puppet),那么构build一个机器的副本是很简单的。
  • 由于所有主机都是从一个公共基础构build而成的,因此可以预先安装具有基本(KickStart)软件包集的硬件或虚拟机,然后根据需要添加类,然后将它们转换为function节点。
  • Puppet允许“标记”主机进行生产或开发,因此,构build主机的开发/testing副本,升级软件包或根据需要进行configuration更改,testing并重新合并到生产中非常简单。

如果你走下去的路线,一定要看看

http://etherboot.org/wiki/index.php

Gpxe将为您提供更多的启动目标的灵活性。 启动一个aoe刀片是很容易的,没有什么比从远程http服务器启动一个内核!!!!!!!!!! :-)。

你需要什么样的服务器运行时间?

由于您总是需要应用安全补丁和软件升级,因此无法创build完美的映像。 如果他们是面向互联网,你不能忽视补丁。

在pxe方面,您有几个选项,具体取决于您的文件I / O群集。 无论是启动一个内核,并通过aoe或iscsi远程挂载磁盘。

你也可以做一些非常聪明的东西与复制写图像。 升级和回滚任何可能有问题的更改都是非常好的。

我也用nfs root成功地使用了nfs集群解决scheme。 您可以根据其客户端地址指定要提供的不同文件。

再次,您必须检查您的应用程序是否喜欢使用nfs。 这不适合每一个工作量。

群集nfs服务器可以包含192.168.0.1:/etc/hostname 192.168.0.2:/etc/hostname

所以,每个客户端引用相同的文件,但得到与客户端相关的文件。 这是非常令人印象深刻的东西,但它并不简单!

如果您将文件系统集中到networking存储上,所有这些都将使您可以更快地展开时间。 通过networking将操作系统映像到远程磁盘需要时间!

如果您使用任何这些解决scheme,请确保您有一个devise良好的容错networking层,并且您的nfs / SAN服务器devise得很好+安全!

失去连接你的NFS / SAN将会损坏服务器的健康。 🙁

为tftp / pxe制作一些脚本来控制引导过程是很容易的。

如果我知道你实际上想要聚类的东西,我可能会想到一个更适合你的解决scheme。