我们有一个应用程序在几个(大约 5 个,并且会越来越多)机器上运行。所有机器的硬件都相同,理想情况下软件也应该相同。到目前为止,我一直手动管理它们,不想再这样做了(静态 IP 地址、禁用所有必要的服务、安装所需的软件包……)。有人能权衡以下选项的利弊吗,或者建议一些更智能的方法?
1:在所有机器上单独安装 centos,并使用 chef/cfengine/puppet 管理配置。这很好,因为我一直想找个借口学习使用其中一个应用程序,但我不知道这是否真的是最好的解决方案。
2:使一个盒子完美无缺并对其进行映像处理。通过 PXE 提供映像,每当我想进行修改时,我都可以从新映像重新启动盒子。集群人员通常如何处理诸如 /etc/sysconfig/network-scripts/ifcfg* 文件中的 mac 地址之类的事情?我们也使用 infiniband,如果 hwaddr 错误,它也会拒绝启动。这些可以在启动时正确生成吗?
我倾向于 PXE 解决方案,但我认为使用 munin 或 nagios 进行监控会稍微复杂一些。有人遇到过这种问题吗?
所有服务器均配备 SSD,速度快、功能强大。
谢谢,马特。
答案1
您的集群听起来更像是 HPC 集群,而不是像我的 OLTP 集群,但我认为我使用的设置也适合您。我称之为“mpdehaan trifecta”,因为这是编写或管理这三个工具的人的 ircnick。
1.)皮匠用于基础构建配置。Cobbler 是一个旨在成为您的 kickstart、pxe、yum-repo、dhcp、dns 等系统交汇点的项目。它是迄今为止启动和运行 kickstart 设置的最简单方法,您可以根据需要扩展其他功能。
2.)木偶用于配置管理。理想情况下,你的 cobbler 构建的主机是非常简单配置,知道只是足以在启动时将信息回传到您的 Puppet 服务器。然后,Puppet 将应用您的配置设置,并永久保持它们在您的环境中的一致性。
3.)功能用于向多台机器并行执行临时命令。例如“部署代码的新 svn checkout 并重新启动 apache”。使用 func 在一组服务器上调用相同的 bash 命令非常容易,就像 cluster-ssh 一样。如果您真的想深入了解它,您可以使用一些非常简单的 python 为其编写自己的模块。
所有这三种工具都有良好的 wiki 和活跃的 irc 频道,可在 freenode 上提供帮助。
答案2
概述
从某种程度上来说,你这里有两个问题……
- 如何构建和维护标准服务器?
- 如何维护标准配置并在稍后进行更改?
我在下面将我的答案分开讨论这两件事,但它们密切相关。我在这里讨论的是技术解决方案,而不是任何相关的最佳实践,例如变更控制。
如果这不涵盖您的问题范围,请澄清,我很乐意详细说明。这是必要的基础,对于运行良好的技术基础设施至关重要。
构建服务器
我不喜欢 UNIX 世界中的图像;这更像是 Windows 风格的方法。甚至一些 Windows 用户现在似乎也重新关注标准构建的脚本。
Satellite 在 RHEL 世界中似乎越来越受欢迎。Spacewalk 是其开源版本。您必须完全接受 RHEL 的方法才能使用它。它既可用于服务器构建,也可用于配置管理。
理想情况下,您希望在文件服务器上为所有必要的软件建立本地镜像和存储库。
首先,利用发行版构建自动化,例如 RHEL/CentOS 中的 Kickstart。Kickstart 是一个基准,可根据您的需要进行更改。Kickstart 构建可以从 PXE 服务器启动。
对于构建的更高级部分以及任何不适合 Kickstart 文件的部分,您可以编写自己的自定义脚本。但是,您可能会发现 puppet 或 cfengine 比自定义脚本更适合您。我发现自定义脚本是最灵活的,并且不限于任何单一方法。
如果您选择编写自己的脚本,我建议您编写一个用于通用配置的核心脚本。这包括安全配置、强化以及适用于所有版本的所有内容。然后是最终脚本,用于确定服务器角色。例如,Web 服务器或数据库服务器。
维持标准
您所描述的也属于维护配置。构建标准、软件更新和其他事项与构建相关,但在很多方面是分开的。
如果您选择依赖系统包,而不是为最重要的服务器角色创建自己的基于源代码的版本,那么很多内容都可以使用本机系统实用程序进行维护。这可以像脚本一样简单,for
针对服务器列表运行循环并运行yum -y update package
.
对于配置管理,这是 puppet、cfengine 和其他配置管理实用程序开始发挥作用。这些实用程序非常有用,可提供必要的基础,而无需从头编写自己的脚本。
当您更新服务器的配置标准时,将其填充到标准服务器构建中非常重要。
答案3
我最近完成了一个大项目,在 $WORK 上推出了一个集中式构建/配置和配置管理系统。我们运行的是 CentOS。
我的设计恰好让我非常喜欢,它为我们提供了几乎一键式(嗯,一个 Web GUI 页面)的构建过程,使用一些自定义 PHP 脚本通过简单但有效的 Web UI 将所有内容联系在一起。
一般理论是:
- 从单个、统一、简约的 KickStart 文件进行所有安装(好吧,一个用于 x86,一个用于 x86-64,但仍然,几乎相同的文件具有最少的软件包选择)。
- KickStat 后安装脚本引导 Puppet。
- Puppet 应用所有节点/主机特定的配置、包安装等。
我同意图像不是 Unix 的做事方式......它们实际上更适合 Windows 世界,因为脚本/自动安装和配置并不那么简单。
您可以用任何其他符合要求的配置管理系统替换 Puppet,但我碰巧喜欢 Puppet 的声明性及其融合概念。
该系统有诸多好处:
- Puppet 处理通用基础安装之后的所有内容,因此所有必需的包和配置都集中在一个地方。
- Puppet 清单是低级文档的附加来源。
- 只要你坚持使用 Puppet(即不进行本地配置更改,或将其合并回 Puppet),构建机器的副本就很简单。
- 由于所有主机都是从通用基础构建的,因此您可以预先安装带有基础(KickStart)软件包的硬件或虚拟机,然后只需根据需要添加类即可将它们转变为功能节点。
- Puppet 允许“标记”主机用于生产或开发,因此可以非常轻松地构建主机的开发/测试副本、升级软件包或根据需要进行配置更改、测试,然后合并回生产。
答案4
如果你选择 pxe 路线,请务必查看
http://etherboot.org/wiki/index.php
Gpxe 将为您提供更多的启动目标灵活性。启动 aoe blade 非常容易,没有什么比从远程 http 服务器启动内核更简单的了!!!!!!!!!! :-)。
您需要什么服务器启动时间?
创建一个完美的映像是不可能的,因为你总是需要应用安全补丁和软件升级。如果它们是面向互联网的,你就不能忽略补丁。
在 pxe 方面,您有几个选项,具体取决于集群的文件 I/O。只需启动内核并通过 aoe 或 iscsi 远程安装磁盘即可。
您还可以利用写入时复制映像来做一些非常巧妙的事情。这对于升级和回滚任何可能有问题的更改非常有用。
我也使用 nfs root 和集群 nfs 解决方案成功过。您可以根据客户端地址指定要提供的不同文件。
再次强调,您必须检查您的应用程序是否喜欢在 nfs 上运行。它并不适合所有工作负载。
集群 nfs 服务器可以包含 192.168.0.1:/etc/hostname 192.168.0.2:/etc/hostname
因此,每个客户端都引用相同的文件,但会获得与客户端相关的文件。这非常令人印象深刻,但并不简单!
如果您将文件系统集中在网络存储上,所有这些都将为您提供更快的推出时间。通过网络将操作系统映像到远程磁盘需要时间!!!!
如果您使用其中任何一种解决方案,请确保您拥有设计良好且具有容错能力的网络层,并且您的 nfs/SAN 服务器设计良好且安全!
失去与 NFS/SAN 的连接会对服务器健康造成不利影响。:-(
为 tftp/pxe 编写一些脚本来控制启动过程非常容易。
如果我更多地了解您实际尝试聚类的内容,我或许可以想到一个更适合您的解决方案。