我不确定这是否会对您有所帮助,但在我们的设置中,我们有一个负载均衡器,客户端可以与之交谈。这个 LB 知道哪些实例是活动的,哪些是黑暗的,并相应地转发流量。如果请求具有“特殊”标头,则 LB 将流量发送到暗池。我们每个应用程序都有这个设置(只是在您发布的图表中清楚地说明这一点,有些人可能会认为整个平台都是蓝绿色的)
所以它的图表是,绿色集群是活的,蓝色是黑暗的(<3 ascii art)
[Client] <- I assume this is internal, otherwise add a FW :).
|
\|/
[Application Load Balancer] <- internal, per app
|
|\--------------\--------------\--------------\
\|/ \|/ \|/ \|/
[Node 1 G/L] [Node 2 G/L] [Node 3 B/D] [Node 4 B/D]
G = Green B = Blue
L = Live D = Dark
Application Load Balancer可以是多种技术。它可以是网关应用程序(如 Netflix Zuul)或负载平衡网络服务器(如使用 HAProxy 的 AirBnB Smartstack)。
值得一提的是,如果 live cluster 火了,我们不会自动将 dark cluster 提升到 live... 我想说的是,我们不使用 blue/green 作为 High Availability 的替代品. 这是你的担心吗?(因为您在这里使用 VIP 和 keepalived)
编辑
感谢您对问题的回答。不幸的是,我认为您无法在约束条件下成功蓝绿。
您是否考虑过只有一个大环境,然后在Canary Release和蓝绿之间进行某种混合?使用这种方法,最初您有 5 台服务器服务实时流量和 1 台服务暗流量(我假设您总共有 6 个盒子)。可以配置实时节点,以便 3 个节点获取实时流量,2 个节点进行批处理。
当您对暗池中的代码感到满意时,您开始一个接一个地升级服务器,直到所有服务器都在实时池中提供实时流量。此时,您可能需要将 2 个批处理服务器移动到轻池,除非您有办法更慢地移动它们(可能一次一个作业?)。
以防万一,我想把一些事情说清楚,因为这可能会咬到你(而且我不希望其他开发人员感到痛苦)。如果您的批处理是您平台的基本组成部分,那么您没有真正的 HA 环境,出于我在原始答案中概述的原因,如果您的实时集群因任何原因失败(数据库损坏?),您将不会能够在其余硬件中运行。