Configuration 使用厨师/木偶并管理手工更改

Configuration 使用厨师/木偶并管理手工更改,configuration,chef-infra,puppet,provisioning,Configuration,Chef Infra,Puppet,Provisioning,我正在为一个事实上的高可用性服务运行一个复杂的服务器设置。到目前为止,我花了大约两天的时间来设置所有内容,因此我希望能够自动化资源调配 然而,我对(正在运行的)服务器做了很多手动更改。一个典型的例子是改变防火墙配置以应对各种黑客企图、数据包泛滥等。能够在活动节点上快速工作非常重要。此外,服务器还维护大量活动的TCP连接,并且不必为简单的配置更改而丢失这些连接 我不明白是厨师还是木偶设计来处理这个问题。一旦我更改了一些系统配置,我想将它存储在某个地方,并在配置下一个实例时使用它。我应该坚持使用这些

我正在为一个事实上的高可用性服务运行一个复杂的服务器设置。到目前为止,我花了大约两天的时间来设置所有内容,因此我希望能够自动化资源调配

然而,我对(正在运行的)服务器做了很多手动更改。一个典型的例子是改变防火墙配置以应对各种黑客企图、数据包泛滥等。能够在活动节点上快速工作非常重要。此外,服务器还维护大量活动的TCP连接,并且不必为简单的配置更改而丢失这些连接


我不明白是厨师还是木偶设计来处理这个问题。一旦我更改了一些系统配置,我想将它存储在某个地方,并在配置下一个实例时使用它。我应该坚持使用这些工具中的一种,还是选择另一种?

手工更改和资源调配不会牵手。他们甚至不一起喝茶

在工作中,我们使用puppet来管理所有Arquit体系结构,由于性能瓶颈、攻击等原因,我们需要立即进行手动更改

我们首先要做的是确保puppet能够设置Arquit体系结构的每一个部分,以便在不进行任何特定调优的情况下交付

然后,当我们需要手动更改时,如果您不在匆忙中处理puppet管理的文件,就没有风险,如果它是puppet管理的文件,我们需要更改,那么我们只需停止puppet代理并执行我们需要的任何操作

匆忙结束后,我们继续进行如下工作:

这些更改是否应应用于具有相同症状的所有服务器

如果是这样,那么您可以开发puppet称之为“事实”的代码,即它在每次运行时在代理上运行的代码,并将结果保存在所有puppet模块中可用的变量中,因此,例如,如果您因为防火墙无法处理所有连接而更改了ip conntrack max值,您可以轻松地(十行代码)在puppet中,每次运行一个具有当前conntrack计数值的变量,然后告诉puppet设置一个与当前使用相关的最大值。然后,所有其他服务器都将受益于此tunning,并且您可能不再需要处理conntrack问题(只要您继续以默认的短频率运行puppet)

在特定的紧急情况下,应始终手动应用这些更改

若配置是由puppet管理的,那个么找到一种方法使配置包含其他文件,并告诉puppet忽略它。这是最简单的方法,但并不总是可行的(例如/etc/网络/接口不支持include)。如果这是不可能的,那么您必须在紧急情况下停止puppet代理,以便能够更改puppet文件,而不会在下次puppet运行时被删除

这些更改是否仅适用于此主机,而其他主机将永远不需要它

把它添加到木偶中!如果$fqdn==my.very.specific.host,则放置一个sweet,并放入所需内容。即使是在单一情况下,将您所做的所有更改迁移到服务器上也总是有益的(而且非常耗时),因为如果您的服务器因某种原因崩溃到不可恢复状态(例如硬件问题),您可以完全恢复服务器设置

总之:


对我来说,处理手工修改的诀窍就是花大量精力去推理你是如何决定做修改的,在紧急情况结束后,将这种逻辑转移到木偶中。如果您觉得有问题,因为对于给定的软件插槽,所有插槽都已使用,但服务器上仍有可用的可用内存,因此为了应对流量峰值,允许运行更多插槽是合理的,那么请花一些时间将该逻辑移到puppet中。当然,要非常小心,而且要花费大量的时间来测试您的体系结构上的不同场景,但最终它非常,非常值得。

我想完成Valor的优秀答案

puppet是执行配置的工具。所以你必须这样想:

  • 在我运行木偶的机器上
  • 我问木偶客户
  • 要确保当前计算机的配置
  • 是在puppet配置中指定的
  • 从puppet服务器或直接从一堆puppet文件中获取(更简单)
因此,为了回答您的一个问题,puppet不需要重新启动机器或服务。但是,如果您使用puppet设置的配置文件中的更改需要重新启动相应的服务/守护进程/应用程序,则无法避免。puppet中有一种方法可以告诉您,在配置更改的情况下需要重新启动服务。当然,如果puppet发现没有任何变化,它不会重新启动服务

Valor假设您以客户机/服务器的方式使用puppet,例如,puppet客户机每小时轮询一个puppet服务器进行配置。但也可以将您的puppet文件从一台机器移动到另一台机器,例如使用git,并手动启动puppet。这条路是:

  • 远比客户机/服务器技术简单(身份验证是一个令人头痛的问题)
  • 仅当您明确要求更改配置时才强制更改配置,从而避免覆盖手动更改
  • 如果您管理很多机器,这显然不是使用puppet的最佳方式,但这可能是一个良好的开端或良好的过渡


    而且,木偶在有趣的层面上很难学习。我花了两周的时间才能够从头开始自动安装AWS服务器。我不后悔,但如果你必须说服老板给你分配时间,你可能想知道这个事实。

    厨师的情况也很类似另外,您可以将配置包含到/etc/network/interfaces:)(在中查找“源代码”)或将配置添加到/etc/network/if-(up | down).d/目录:)