小型自动化Linux部署和配置管理-值得吗?


24

我将部署约25台运行Debian的服务器。这些机器将扮演不同的角色-网络服务器,Java应用服务器,代理,MySQL机器。该环境将来可能不会增长太多-未来两年内可能会再增加2-5台服务器。

我可能会使用fai进行系统安装,但是我不确定是否值得为如此小的规模添加cfenginepuppet集中式配置管理。

配置管理对于如此大的环境有意义吗?

Answers:


29

我建议您混合使用Debian预播和Puppet,在其中您可以为安装程序提供一个文本文件,该文件可以回答所有的问题。

使用预置而不是FAI的原因是,您不必先设置图像就可以保持其最新状态。您最终将获得与手动完成所有安装非常相似的安装。当您要安装新版本时,必须使用更改来更新配置文件,而不必重建新映像。

当您有多个服务器执行相同的角色并且希望它们相同时,例如Web服务器群集,配置管理工具特别有用。但是,它们对于配置所有服务器的基本安装也很有用。您将要在所有服务器上安装特定的软件包,例如ntpd和MTA。您将要在所有服务器上更改配置文件。另一个好处是,您可以将清单保存在诸如subversion之类的文件中,并记录服务器上发生的更改以及更改的原因以及原因。在服务器发生故障的情况下,配置管理还可以节省很多时间,因此您需要快速重建它。安装操作系统(使用FAI或预播),安装puppet,然后将其删除,并完全按照以前的方式进行构建。显然,您需要保留数据备份。

配置管理要求您全力以赴,以确保仅使用它进行更改,并且会花一些前期费用进行设置,但是一旦有了有效的设置,您将不会后悔。

在您提到的两个工具中,Puppet是更现代的。我真的推荐给任何人。配置是一种声明性语言,易于构建更高级别的构造。周围还有一个很大的社区,总是欢迎人们在邮件列表或IRC频道上提供帮助。


感谢您提供预播提示。我正在看有关它的文档。
pQd

固定资产投资是老套 我绝对不会推荐它。预播+人偶ftw。
womble

我们使用FAI和cfengine,大约有1000台计算机,并且运行良好。值得注意的是,您可以在机器自行构建时将其插入ssh,从而使编写微脚本变得更加容易。
詹姆斯

费老帅?没有!FAI坚如磐石,拥有10多年的经验。在fai-project.org/reports中
Thomas Lange 2010年

好的建议,我们使用类似的方法并且效果很好。但是,我不会拒绝固定资产投资。FAI不会使用映像进行安装(SystemImager会这样做)。您必须设置一个最小的nfs根目录,用于运行FAI安装程序。安装过程通过配置文件自动执行,并执行各种用户定义的挂钩。与预播相比的优势在于,FAI类的概念使处理具有不同角色的多台服务器(甚至工作站)变得容易。
JooMing 2010年

10

我建议CFengine用于任何超过2-3个框的环境,并且您具有一些“模板”或执行特定角色的服务器的概念。

为什么?简单地说,它减少了错误,您拥有一个工具来确保文件/目录权限在环境中的任何位置都是正确的,并且当您推出更多服务器时,该工具可以处理所有问题,并且不会犯任何错误。

与什至是技术娴熟的系统管理员在十二个小时的轮班结束时推出Web服务器(发生问题时)形成对比。...他们是否还记得那个讨厌的小配置文件,需要放在/ etc / random / location中/ foo / bar,否则应用程序将无声地执行一些重要的事情,例如开单客户?:)

CFengine之类的工具也是执行环境范围的安全更新的好方法。将Nagios配置(NRPE)放到所有盒子上也是轻而易举的事。无论您要处理五盒还是五百盒,您都可以使用CFengine节省时间。

可能值得注意的是,我的环境要大一点,但是我还为比您注意到的更小的环境部署了CFengine,因此建议您!

也许您的下一个问题是CFengine vs Puppet?这是一个比较困难的决定,由于(在早期)Puppet还有些不成熟,尤其是在错误日志记录方面,我一直都选择CFengine。回顾我与Puppet有关的特定问题,它们与SSL证书相关,令人痛苦的是,我还记得我花了3个小时的时间来诊断irc.freenode.net/#puppet中的服务器<->客户端连接问题,而其中包含大量RTFM和RTFS 来查找一个错误,没有被记录下来,卢克说:“啊,这真的很难修复”,而且从来没有做过。:(


好点子。问题是在我的情况下,事情将变得高度专业化,模板的数量(由于冗余)可能约为n / 2(其中n是服务器总数)。
pQd

1
这不是一件坏事,我的大多数WWW群集都是n + 2(如果不是n / 2),并且使用CFengine可以非常灵活地将节点部署在诸如HAproxy的负载均衡器后面。管理IPVS和保持活动的东西也是完全可行的:-)即使有n / 2冗余要求,我也敢打赌您的环境中有很多相同或相似的配置文件?记住,使用CFengine时,您确实具有“ editfiles”工具来执行诸如包含IP之类的“模板”配置文件之类的事情,然后(在运行时)查找并替换为正确的信息。;)
nixgeek

@astinus感谢您的评论。我也有点害怕通过在中央配置中搞砸来降低我的产量。您对禁用自动轮询配置和登录每台计算机并强制对其进行更新并手动检查一切正常的想法如何?[是的,我也将安装nagios /自定义监视...但是仍然]。
pQd

1
我认为对配置管理技术的信心会随着时间的流逝而出现,但是在此期间,只需禁用自动轮询框并使用“ cssh”登录到每个类别的框即可在运行时使用“ cfagent -qv”(或其他命令!)。您想推送更新。如果您希望获得提高信心的最佳技巧,请将虚拟机部署为“暂存”环境,并确保所有更改都首先通过该环境。如果将CFengine或Puppet配置保留在Subversion中,则非常简单,只需使用分支和标签即可。
nixgeek

我还将建议使用SLACK来简化系统(重新)安装和配置管理。可以在这里找到:sundell.net/~alan/projects/slack
HK_09年

5

除了cfengine和puppet之外,还有Chef。我强烈建议您使用其中一种工具,因为事情总是会朝着意想不到的方向发展。这有助于在集中位置管理事物。

要认识到的重要一点是,您可能一无所获,但是如果您至少可以做到90%,那就是一个开始。此外,它很有趣,从长远来看会让您的生活更轻松。最后,前进是一项很好的技能。


Chef是最近进入配置管理领域的人。它的设计目的是通过编写ruby来完成所需的操作,这与puppet的自定义声明性语言相反。时间会证明哪种方法效果很好。我目前坐在木偶营。
David Pashley 2009年

3

自5年以来,我一直在使用cfengine来安装debian(如今从woody到lenny)。使用etch我构建了一个自定义的debian-installer。多亏了前面提到的一个问题:“什么是主机名”。此cfengine配置了整个服务器之后(使用dnssec,samba,ntpd,默认(Samba)用户和密码的dns + dhcp,ssh,openvpn,apache vHost,在LVM上使用rsnapshot备份,自定义webminmodules等)。

即使仅安装一台服务器,我也会从工具箱中使用cfengine-scripts,如下所示:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

我喜欢cfengine,因为cf2-脚本在某种程度上是人类可读的。

因此,与自动配置管理工具一起使用绝对值得。

/ thorten


2

即使对于小型网站,这也值得。随着您的成长,这一切都与一致性有关。而且您知道您的网站将不断发展。最好在您还小的时候开始。Cfengine很棒。特别是版本3,它可以处理整个领域的所有程序包管理器,其真正的轻巧性和安全性使其“可以正常使用”。木偶只是没有提供它声称的东西。还没尝试过厨师。

cfengine相对于其他引擎的优点是它非常轻巧,但实际上具有更多功能。它的安全性就像ssh一样,而不是puppet使用的Web证书。当我告诉老板cfengine时,他认为这是科幻小说:)如果您正在寻找未来主义的东西,请尝试阅读Marc Burgess的一些研究论文。酷的东西。


1

我希望在运行小型网站时拥有的第一工具是“按钮”构建。它使修补,更新和重建更加容易,从而可以在将来解决无数其他问题。

没有在所有机器上正确安装ssh吗?也没有curl / wget / vim吗?您想在每个包装盒上使用其他内部工具呢?

对服务器进行集中管理是您应该使用的首批工具之一,可以使以后的工作变得更加轻松。


1

我同意这里的每个人。当您规模不大时,应该开始学习并建立有效的基础结构。因为那样,您就可以在成长时做好准备。

根据您要运行的内容,我会选择FAI,cfengine,并为Debian / Ubuntu进行预播种。FAI可以使用许多不同的工具,因此对于任何类似Debian的发行版来说,这都是一个好的开始。使用FAI(和cfengine)类控制的配置,您可以轻松地将安装分为几个小模块,然后可以选择将其用于每台计算机。这样,即使您拥有许多不同的计算机,它也将很有用。实际上,它更加有用,因为您将使用这些脚本来记录安装。而且,当您在新计算机上安装时,您不会忘记任何东西。

是的,在您将更改部署到实时安装中之前,应该有一些机器要进行测试。但是使用这样的配置脚本,您将不会忘记在实时安装中执行任何步骤。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.