Amazon ec2 AWS WebApp蓝色/绿色部署,不中断会话

Amazon ec2 AWS WebApp蓝色/绿色部署,不中断会话,amazon-ec2,session-cookies,amazon-elb,blue-green-deployment,session-affinity,Amazon Ec2,Session Cookies,Amazon Elb,Blue Green Deployment,Session Affinity,我的用例: 我有一个web应用程序,由一个弹性负载平衡器提供服务,它位于1个EC2实例前面。 该体系结构旨在模拟蓝/绿部署流,这意味着当我需要更新代码并切换ELB指向的实例时,我将打开第二个实例 让我们假设实例A拥有我的应用程序的当前版本,我的ELB将流量路由到该实例,因为它是唯一可用的实例。我想向我的应用程序推送更新,所以我在实例B上部署了新版本的应用程序(打开实例B并部署新版本的代码)。同时,任何访问我的应用程序的用户仍将被路由到实例A,并为其创建会话,直到我进行切换 一旦部署了Instan

我的用例: 我有一个web应用程序,由一个弹性负载平衡器提供服务,它位于1个EC2实例前面。 该体系结构旨在模拟蓝/绿部署流,这意味着当我需要更新代码并切换ELB指向的实例时,我将打开第二个实例

让我们假设实例A拥有我的应用程序的当前版本,我的ELB将流量路由到该实例,因为它是唯一可用的实例。我想向我的应用程序推送更新,所以我在实例B上部署了新版本的应用程序(打开实例B并部署新版本的代码)。同时,任何访问我的应用程序的用户仍将被路由到实例A,并为其创建会话,直到我进行切换

一旦部署了Instance-B并可使用较新的代码,我如何确保ELB将只在Instance-B上发送新流量,并在instanceA上保留旧流量(以前的用户及其会话),直到我从负载平衡器注销后者

希望这是有意义的,我知道这种架构设计不是蓝色/绿色部署的正确实现。但是由于我的应用程序的大小和预算,我想限制我正在使用的实例的数量


谢谢您的帮助。

好的,如果您使用的是经典ELB,您需要为ELB创建和粘性策略,您可以在此处找到详细说明

如果您使用的是ALB或应用程序负载平衡器,则负载平衡器几乎相同,但粘性策略超出了目标组

如果您想改进蓝/绿部署策略,最好使用Route53进行切换,而且成本非常低


我希望这会有所帮助

谢谢@douglas的回复,但它不包括我的用例。我更新了我的问题,因为它没有被很好地描述。好吧,我明白了,使用应用程序负载平衡器的粘性会话策略,您可以使用属性“Stickines.enabled and Stickines.lb_cookie.duration_seconds”设置一个时间,使会话保持在同一目标上,但我恐怕这不能保证超过7天,对于您的用例,如果您需要7天以上的时间,最好的方法是使用其他解决方案,如Netflix Zuul,并设置ZuulFilter规则,但我担心这是一个太复杂的场景,您需要一种方法来识别用户会话,并让应用程序级别的逻辑来实现这一点