如果您在两台服务器上提供服务以确保高可用性,那么最好是以完全相同的方式configuration它们,而不是应该引入轻微的差异来防止“畸形configuration”错误?
我们在Linux(Ubuntu LTS),Nginx,Apache和Python WSGI堆栈上托pipe一个基于Django的网站,在负载均衡器后面的三台服务器上复制。 目前他们被托pipe在亚马逊云,但我们可能会转移到我们自己的数据中心在未来。 我们最近在三台服务器上都遇到了一个问题,这个问题只能通过升级内核来解决,这使得我们认为这个特定版本的内核与亚马逊可能已经开始使用的物理硬件是不兼容的。
这让我想:将所有机器保持在完全相同的configuration(更容易pipe理?),还是应该保持稍微不同,以便两个组件之间的不兼容性只会在一台机器上performance出来,而不是全部他们,保持你的网站在空气中?
保持一致。 只有在某种configuration下才会出现一些不兼容性的可能性很小,之后您将不得不记住所做的一切的差异。
为简单起见,它们都应该是相同的configuration,但是有occassions(主要由正在使用的软件支配),在这种情况下,负载均衡和故障转移成为唯一的select是不可能的 – 在这种情况下,可能需要很小的configuration。
OTOH,面向互联网的服务,可用性和安全性必须高于优先级列表。 良好的安全性意味着定期应用补丁,好的可用性意味着你不能同时补丁所有的盒子 – 事实上,我采用的一个类似的设置的做法是一旦补丁被应用并且已经被应用并在一台testing机上进行了简单的评估,但是推迟了几天到其他节点的推出,直到我知道这些补丁没有任何不利影响。
虽然Sirex是正确的 – 在一个完美的世界中,您可以在预生产集群上实施补丁,并使用生产系统的stream量/数据进行testing – 实际上,这样的规模在成本效益上远远不够。
当然是。 这将有助于解决出现的问题。
看看Puppet来pipe理你的configuration文件的变化。 我们将configuration文件存储在svn然后推进我们的变化。 我们有一个集中的pipe理服务器来检查我们的变化,Puppet会推动他们。 这给出了变化的历史,所以当你犯了一个错误,你可以无缝地回滚,当你有多个pipe理员configuration更改可以跟踪。
参考: http : //puppetlabs.com/