使用Chef/Puppet并管理手工更改

til*_*lda 5 configuration provisioning puppet chef-infra

我正在为事实上的高可用性服务运行复杂的服务器设置.到目前为止,我需要大约两天的时间来设置所有内容,因此我希望自动化配置.

但是我对(运行)服务器做了很多手动更改.一个典型的例子是更改防火墙配置以应对各种黑客攻击,数据包泛滥等.能够快速处理活动节点非常重要.此外,服务器维护了许多活动的TCP连接,并且为简单的配置更改而丢失它们是不可能的.

我不明白Chef或Puppet是否可以解决这个问题.一旦我更改了一些系统配置,我想将它存储在某个地方,并在配置下一个实例时使用它.我应该坚持使用其中一种工具还是选择其他工具?

Val*_*lor 4

手工更改和配置不需要手工操作。他们甚至不一起喝茶。

在工作中我们使用puppet来管理所有的架构,而像你一样,由于性能瓶颈、攻击等原因,我们需要匆忙地进行手工更改。

我们要做的首先是确保 puppet 能够设置架构的每个部分,准备好交付,而无需任何特定的调整。

然后,当我们需要进行手动更改时,如果匆忙,只要不弄乱由木偶管理的文件,就没有风险,如果它是我们需要更改的木偶管理文件,那么我们只需停止木偶代理并执行任何操作我们需要。

匆忙结束后,我们进行如下操作:

这些更改应该应用于具有相同症状的所有服务器吗?

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

在特定的紧急情况下,这些变化应该始终手动应用吗?

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

此更改是否仅适用于该主机,其他主机将不需要它?

无论如何将其添加到木偶中!放置一个甜 if $fqdn == my.very.spec.host 并放入您需要的任何内容。即使对于单一情况,将您所做的所有更改迁移到服务器总是有益的(并且耗时),因为如果由于某种原因您的服务器崩溃到不可恢复的状态(例如硬件),您可以完全恢复服务器设置。问题)

总之:

对我来说,处理手工更改的技巧是投入大量精力来推理你​​决定如何进行更改,并在紧急情况结束后将逻辑转移到傀儡中。如果您觉得有问题,因为对于给定的软件插槽,所有插槽都已被使用,但服务器上仍然有可用内存,因此处理流量峰值是合理的,允许运行更多插槽,然后花一些时间将该逻辑移至木偶中。当然,要非常小心,并且与您想要测试的架构上不同场景的数量一样耗时,但最终它是非常非常有价值的。

  • Chef 非常相似。_______ 诗篇。您可以包含到 /etc/network/interfaces :)(在 http://manpages.ubuntu.com/manpages/oneiric/man5/interfaces.5.html 中查找“源”)或将您的配置添加到 /etc/network /if-(up|down).d/ 目录:) (2认同)