2014-01-31 79 views
0

我有一个ELB设置为12秒,2部署通过更换EC2实例

健康/不健康阈值的间隔目前我部署过程是:

1)启动新服务器 2)当他们是健康的,用新的EC2取代ELB背后的现有EC2。

它似乎与零停机时间一起工作。但是我无法找到关于ELB在特定情况下如何正确地做事情的任何信息。任何人都知道这是否是零时差部署的好方法?

Thx。

Henrik

回答

0

每次部署新机器都是一个好主意。特别是如果您是符合PCI标准的公司并每周刷新您的机器,它将消除大量审计标准,从而显着简化您的基础架构。更简单的方法是为新部署创建一个新的AutoScaling组。新机器将在新的自动缩放组中启动。自动缩放组可以附加到您选择的ELB上。然后确保您的健康检查是ELB在每台服务器上点击的端点。如果服务器已准备好/能够响应请求,那么该端点以200响应。准备就绪后,他们将自动开始提供流量,并且只需要杀死由较早部署创建的自动调节组,以杀死机器并将其从ELB中移除。有2个严重的问题需要考虑这都涉及到机器无状态:

  1. 机的正常终止:您需要确保服务的Web请求的过程中死了,就完成响应任何建立的客户端连接,否则后用户将看到一个50倍的错误代码;同样,如果你在syslog,splunk,sumologix之类的地方转发你的日志,你还需要确保在你终止实例之前转发它们;

  2. 要没有粘性会话/会话亲和力。如果您在本地在这些服务器上存储Web应用程序的用户会话,则可能会有粘性会话。这通常是一个坏主意,因为现在每台机器都有一个状态,负载可能不均衡。因此,使用像reddis/memcache一样的会话存储的中央/共享位置并禁用粘性会话;

执行上述两项操作后,您的部署方法将变得最清晰。

+0

谢谢。由于我问了这个问题,我已经设置了一个完全按照你的建议进行部署的脚本(创建新的自动缩放组等)。当新部署通过负载均衡器回复OK时,我从ELB注销所有旧的实例,然后杀死旧的自动调整组。 – hmrdk

0

如果服务器托管Web应用程序,那么用户会话呢? 一个更好的办法,在我看来,应该利用现有的情况来部署,通过capistrano或同等工具,并使用memcache存储会话和其他短寿命DATAS。

+0

会话已在memcache中处理。所以网络服务器是无状态的。我喜欢从构建工件引导新服务器的方法。一切都是脚本化的,所以自动缩放等是可能的。 – hmrdk

+0

我明白了。因此,从ELB中删除旧实例,并让CloudWatch通过一些自定义规则来杀死该实例。这样,您就可以在旧实例中完成运行请求。 –

+0

我在计划旧服务器在他们注意到它们不是最新部署的构建版本时发生“自杀”,并且工作队列为空。 我的问题是关于ELB如何注销旧服务器池并在控制台或API的一次调用中注册新服务器池时的反应。 – hmrdk

0

我认为你的方法很好。关键是确保新实例在删除旧实例之前对请求做出响应。这种方法的好处在于,如果需要,您可以非常轻松地进行回滚。

有很多不同的方法来解决这个问题。我可能会看到这个与正在更新的运行实例之间的混合,但这取决于您的基础架构的复杂程度以及您部署的频率。

就跨小型舰队小型升级,更新是可控的,但你仍然需要弄清楚如何处理回滚。一旦你超越了几台服务器,这变得更加复杂。

如果你的车队足够大,而且你正在使用自动缩放,那么你可以更新你的规则,并开始杀死旧的实例,让AS带上新的实例。