Answers:
我建议您混合使用Debian预播和Puppet,在其中您可以为安装程序提供一个文本文件,该文件可以回答所有的问题。
使用预置而不是FAI的原因是,您不必先设置图像就可以保持其最新状态。您最终将获得与手动完成所有安装非常相似的安装。当您要安装新版本时,必须使用更改来更新配置文件,而不必重建新映像。
当您有多个服务器执行相同的角色并且希望它们相同时,例如Web服务器群集,配置管理工具特别有用。但是,它们对于配置所有服务器的基本安装也很有用。您将要在所有服务器上安装特定的软件包,例如ntpd和MTA。您将要在所有服务器上更改配置文件。另一个好处是,您可以将清单保存在诸如subversion之类的文件中,并记录服务器上发生的更改以及更改的原因以及原因。在服务器发生故障的情况下,配置管理还可以节省很多时间,因此您需要快速重建它。安装操作系统(使用FAI或预播),安装puppet,然后将其删除,并完全按照以前的方式进行构建。显然,您需要保留数据备份。
配置管理要求您全力以赴,以确保仅使用它进行更改,并且会花一些前期费用进行设置,但是一旦有了有效的设置,您将不会后悔。
在您提到的两个工具中,Puppet是更现代的。我真的推荐给任何人。配置是一种声明性语言,易于构建更高级别的构造。周围还有一个很大的社区,总是欢迎人们在邮件列表或IRC频道上提供帮助。
我建议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 来查找一个错误,没有被记录下来,卢克说:“啊,这真的很难修复”,而且从来没有做过。:(
除了cfengine和puppet之外,还有Chef。我强烈建议您使用其中一种工具,因为事情总是会朝着意想不到的方向发展。这有助于在集中位置管理事物。
要认识到的重要一点是,您可能一无所获,但是如果您至少可以做到90%,那就是一个开始。此外,它很有趣,从长远来看会让您的生活更轻松。最后,前进是一项很好的技能。
自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
我同意这里的每个人。当您规模不大时,应该开始学习并建立有效的基础结构。因为那样,您就可以在成长时做好准备。
根据您要运行的内容,我会选择FAI,cfengine,并为Debian / Ubuntu进行预播种。FAI可以使用许多不同的工具,因此对于任何类似Debian的发行版来说,这都是一个好的开始。使用FAI(和cfengine)类控制的配置,您可以轻松地将安装分为几个小模块,然后可以选择将其用于每台计算机。这样,即使您拥有许多不同的计算机,它也将很有用。实际上,它更加有用,因为您将使用这些脚本来记录安装。而且,当您在新计算机上安装时,您不会忘记任何东西。
是的,在您将更改部署到实时安装中之前,应该有一些机器要进行测试。但是使用这样的配置脚本,您将不会忘记在实时安装中执行任何步骤。