使用亚马逊EC2pipe理滚动部署

最近,我一直在尝试各种pipe理工具,如RightScale,Scalr,pipe理各种服务器的自定义脚本,每个服务器都有几个angular色(应用程序,数据库,负载平衡器,作业队列等)。

我发现在大多数解决scheme中缺乏的一件事就是执行滚动部署的一种方法,即在具有相同angular色的多个服务器上按顺序运行部署。 例如,我不想同时build立所有的networking服务器,因为这几乎肯定会导致我的客户停机或500秒。 我宁愿一次构build一个或两个服务器,而其他服务器仍然可以处理请求。

另一种select显然是启动新的服务器,在启动时自动更新自己,但这不是经济有效的,并且很可能需要更多时间来完成构build(在现有服务器上构build比在新服务器上构build要快服务器并杀死旧的)。

我们都听说过有着名的“推动构build”button的大公司(像Twilio,Etsy等公司),但似乎他们都有自定义的实现。 我并不是在谈论一个简单的ssh-loop,clusterssh,甚至是一个mcollective – 我最好希望有一个很好的简单的接口,允许我指定一些像RightScript或Scalr脚本的东西在一组服务器上运行具体的angular色,并顺序构build它们。

有没有人知道简单的方法来完成这个任务,或者这是一个新的开源项目的候选人?

一起使用Puppet和MCollective。 木偶可以完成大部分的构build工作。 MCollective可以让你挑选节点并安排它们。

http://www.devco.net/archives/2010/03/17/scheduling_puppet_with_mcollective.php

我确实部署了webistrano ,但我永远无法让我们的开发人员使用它。 他们总是发现一些导致它搞乱部署的方式。

我不知道任何服务,这将有助于这种types的更新。 问题在于,应用程序需要考虑到这一点。 你看到很多服务器被configuration为使用服务器x作为数据库服务器或服务器y作为caching服务器。 当我开始查看我们的旧版软件并考虑如何自动更新过程时,这是我看到的最大的问题。

我们遇到了和你一样的问题。 我们的解决scheme并不是太困难,因为我们所有的最新产品都是在一开始就为这种更新而devise的,因为我们已经看到了它的困难程度。 我们试图避免在我们的发展中紧密耦合的服务。 这使我们能够做的是在暂存区域内启动一组全新的服务器。 一旦我们完成了对暂存区域的testing,我们通过更改dns服务器中的CNAME来将暂存区域提升到生产阶段。 这个过程没有任何停机时间,并且以错误的configuration更新服务器的风险较低。我们使用http作为主要通信协议和本地dns服务器来实现这个过程。

我意识到重新devise整个应用程序可能不是一件容易的事情,以适应与滚动更新相配的特定体系结构,但这正是我们发现的最简单的解决scheme。 着名的“推动build立”button并不一定只为大鱼,即使小金枪鱼可以得到一些行动。 根据您的应用程序的复杂程度或简单程度,将会定义构build您自己的“推动构build”button的难度或容易程度。