介绍
作为更广泛的主题,配置管理(CM)是指以随着时间保持完整性的方式系统地处理对系统的改变的过程。 尽管这个过程中未起源于IT行业,该术语广义地用于指服务器的配置管理 。
自动化在服务器配置管理中起着至关重要的作用。 它是用于使服务器达到理想状态的机制,以前由使用工具的特定语言和功能的供应脚本定义。 自动化是,事实上,配置管理服务器的心脏,这就是为什么它是常见的需要参阅配置管理工具, 自动化工具或IT自动化工具 。
用来描述配置管理工具实现的自动化功能另一种常见的词是Server业务流程或IT业务流程 ,因为这些工具通常能够从中央控制器机管理一个到数百台服务器的。
市场上有许多配置管理工具可用。 Puppet,Ansible,Chef和Salt是受欢迎的选择。 尽管每个工具都有其自己的特征并且以略微不同的方式工作,但它们都由相同的目的驱动:确保系统的状态与供应脚本描述的状态匹配。
配置管理对服务器的好处
尽管配置管理的使用通常比手动系统管理需要更多的初始规划和工作,但是除了最简单的服务器基础设施之外,所有其他服务器基础设施都将通过其提供的好处得到改进。 举几个例子:
快速配置新服务器
每当需要部署新服务器时,配置管理工具都可以为您自动完成大部分(如果不是全部)配置过程。 自动化使得配置更快更高效,因为它允许繁琐的任务比任何人更快更准确地执行。 即使有正确和彻底的文档,例如,手动部署Web服务器可能需要几个小时,而配置管理/自动化则需要几分钟。
从关键事件快速恢复
使用快速配置还有另一个好处:从关键事件快速恢复。 当服务器由于未知情况而脱机时,可能需要几个小时才能正确审核系统并查明发生了什么。 在这种情况下,部署替换服务器通常是使服务重新联机的最安全的方法,同时在受影响的服务器上进行详细检查。 通过配置管理和自动化,这可以以快速可靠的方式完成。
没有更多的雪花服务器
乍一看,手动系统管理似乎是部署和快速修复服务器的简单方法,但它往往带来一个代价。 随着时间的推移,当过程不是自动化时,可能变得非常难以准确地知道安装在服务器上的内容以及进行了哪些改变。 手动修补程序,配置调整和软件更新可以将服务器整合到独特的雪花 ,难以管理,甚至难以复制。 通过使用配置管理工具,启动新服务器或更新现有服务器所需的过程将在配置脚本中记录。
服务器环境的版本控制
将服务器设置转换为一组配置脚本后,您将能够在服务器环境中应用通常用于软件源代码的许多工具和工作流程。
版本控制工具(如Git)可用于跟踪对配置所做的更改,并为脚本的旧版本维护单独的分支。 您还可以使用版本控制来实现对配置脚本,其中的任何变化应该被接受之前提交一个pull请求,并由项目负责人批准的代码审查政策。 这种做法将为您的基础设施设置增加额外的一致性。
复制环境
配置管理使得使用完全相同的软件和配置复制环境变得简单。 这使您能够有效地构建一个多阶段生态系统,包括生产,开发和测试服务器。 您甚至可以使用本地虚拟机进行开发,使用相同的配置脚本构建。 这种做法将最小化由于将应用程序部署到生产环境或在具有不同机器设置(不同操作系统,软件版本和/或配置)的同事之间共享时经常发生的环境差异导致的问题。
配置管理工具概述
尽管每个CM工具都有其自身的条件,哲学和生态系统,它们通常有许多共同的特点,并有类似的概念。
大多数配置管理工具使用控制器/主节点/代理模型。 本质上,该控制器指示节点的配置的基础上,一系列中的供应脚本定义的指令或任务 。
下面您可以找到大多数服务器配置管理工具中最常见的功能:
自动化框架
每个CM工具提供了一个特定的语法和一组可用于编写配置脚本的功能。 大多数工具将具有使其语言类似于常规编程语言的特征,但是以简化的方式。 变量,循环和条件是提供的常见功能,以便于创建更多功能的配置脚本。
幂等行为
配置管理工具跟踪资源的状态,以避免重复之前执行的任务。 如果已经安装了软件包,该工具将不会尝试再次安装。 目标是在每次配置运行后,系统达到(或保持)所需的状态,即使您多次运行它。 这是什么特点这些工具为具有幂等行为 。 这种行为不一定在所有情况下都强制执行。
系统事实
配置管理工具通常提供有关正在配置的系统的详细信息。 此数据可通过全局变量,被称为事实 。 它们包括网络接口,IP地址,操作系统和分发。 每个工具将提供一组不同的事实 。 它们可用于使供应脚本和模板对于多个系统更具适应性。
模板系统
大多数CM工具将提供一个内置的模板系统,可用于方便设置配置文件和服务。 模板通常支持变量,循环和条件,可用于最大化多样性。 例如,您可以使用模板轻松地在Apache中设置新的虚拟主机,同时为多个服务器安装重复使用相同的模板。 相反,只具有硬编码,静态值,模板应包含的值可以从主机切换到主机,如占位符NameServer
和DocumentRoot
。
可扩展性
即使供应脚本可以非常专用于特定服务器的需求和需求,但在许多情况下,您具有类似的服务器设置或可在多个服务器之间共享的设置的部分。 大多数配置工具将提供方法,您可以轻松地重用和共享较小的配置设置块作为模块或插件。
第三方模块和插件通常很容易在Internet上找到,特别是用于常见的服务器设置,如安装PHP Web服务器。 CM工具通常围绕它们建立强大的社区,并鼓励用户共享他们的自定义扩展。 使用其他用户提供的扩展可以节省大量时间,同时还可以作为一种极好的方式来了解其他用户如何使用您选择的工具解决常见问题。
选择配置管理工具
市场上有许多可用的CM工具,每个都有一组不同的功能和不同的复杂性级别。 最受欢迎的选择包括Chef,Ansible和Puppet。 第一个挑战是选择一个适合您需要的工具。
在做出选择之前,您应该考虑以下几点:
基础设施复杂性
大多数配置管理工具需要最小的层次结构,包括控制器机器和将由其管理的节点。 Puppet,例如,要求在每个节点上安装代理程序,并要在控制器机器上安装一个主应用。 另一方面,Ansible具有分散的结构,不需要在节点上安装附加软件,而是依靠SSH来执行配置任务。 对于较小的项目,简化的基础设施可能看起来更好,但是重要的是考虑可扩展性和安全性等方面,这可能不是由工具强制。
一些工具可能具有更多的组件和移动部件,这可能会增加基础架构的复杂性,影响学习曲线并可能增加实施的总成本。
学习曲线
如本文前面所述,CM工具提供了自定义语法,有时使用域特定语言(DSL)和一组包含其自动化框架的功能。 与传统的编程语言一样,一些工具将需要掌握更高的学习曲线。 基础设施要求还可能影响工具的复杂性,以及您将能够快速看到投资回报。
成本
大多数CM工具提供免费或开放源代码版本,以及付费订阅高级功能和服务。 一些工具将比其他工具有更多的限制,因此,根据您的具体需求和您的基础设施的增长,您可能最终不得不支付这些服务。 你也应该考虑培训作为一个潜在的额外成本,不仅是在货币方面,而且还需要时间,使你的团队加快与你最终选择的工具。
高级工具
如前所述,大多数工具提供的付费服务可以包括支持,扩展和高级工具。 分析您的特定需求,基础架构的大小以及是否需要使用这些服务非常重要。 例如,管理面板是这些工具提供的一种常见服务,它们可以极大地方便从中心点管理和监控所有服务器的过程。 即使你不需要这样的服务,考虑可能的未来必要性的选项。
社区和支持
一个强大和热情的社区可以非常丰富的支持和文档,因为用户通常很乐意与其他用户分享他们的知识和他们的扩展(模块,插件和配置脚本)。 这有助于加快你的学习曲线,并通过付费支持或培训避免额外成本。
热门工具概述
下面的表格可以让您快速了解目前市场上最常用的三种配置管理工具之间的主要区别:Ansible,Puppet和Chef。
Ansible | Puppet | Chef | |
---|---|---|---|
脚本语言 | YAML | 基于Ruby的自定义DSL | Ruby |
基础设施 | 控制器机器通过SSH在节点上应用配置 | Puppet Master在Puppet节点上同步配置 | Chef Workstations将配置推送到Chef Server,Chef Nodes将从该服务器更新 |
需要专门的节点软件 | 没有 | 是 | 是 |
提供集中控制点 | 不。任何计算机都可以是控制器 | 是的,通过Puppet Master | 是的,通过Chef服务器 |
脚本术语 | Playbook /角色 | 清单/模块 | Recipe/Recipe |
任务执行顺序 | 顺序 | 非序列 | 顺序 |
下一步
到目前为止,我们已经看到了配置管理如何为服务器工作,以及在选择用于构建配置管理基础架构的工具时应考虑什么。 在本系列的后续指南中,我们将有三个流行的配置管理工具的实践经验:Ansible,Puppet和Chef。
为了给你一个机会自己比较这些工具,我们将使用一个简单的服务器设置示例,应该由每个工具完全自动化。 此设置包含一个运行Apache以运行简单网页的Ubuntu 14.04服务器。
结论
配置管理可以通过提供流程自动化和跟踪系统环境所做的更改的框架,显着提高了时间服务器的完整性。 在接下来的引导在这个系列中,我们将看到如何使用落实在实践中配置管理策略Ansible的工具。