当我们必须部署到一组固定的机器时的蓝绿部署

Blue-Green deployments when we have to deploy to a fixed set of machines

我们有以下蓝=绿部署设计。我们的想法是

并且我们在 go.cd 中相应地创建了管道。但是,我们遇到的问题是我们想将最新的代码部署到刚刚转变为非活动状态的集群。 我们如何确保这个不会再次激活?其他人如何进行蓝绿部署? Google 针对 AWS 的解决方案的搜索结果。我们不使用 AWS 或 public 云。

编辑 1

基础设施限制:我们的硬件仅适用于两个集群

是什么阻止了您 运行 实时集群中的批处理作业?:实时集群正在为生产查询提供服务,批处理加载会占用机器资源,并且可能会使在线系统无响应

我不确定这是否对您有帮助,但在我们的设置中,我们有一个客户端与之通信的负载平衡器。这个 LB 知道哪些实例是活动的,哪些是黑暗的,并相应地转发流量。如果请求有 'special' 头,LB 将流量发送到暗池。我们对每个应用程序都有此设置(只是在您发布的图表中明确说明,有些人可能认为整个平台是蓝绿色的)

所以它的图表应该是,绿色的簇是活的,蓝色的是暗的(<3 ascii 艺术)

           [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集群起火了,我们不会自动将dark集群提升为live...我想说的是,我们不用blue/green 作为高可用性的替代方案。这是你的担忧吗? (因为你在这里使用 VIP 并保持活动状态)

编辑

感谢 questions.Unfortunately 的回答,我认为您无法通过约束成功实现蓝绿。

您是否考虑过只有一个大环境,然后在 Canary Release 和蓝绿之间进行某种混合?使用这种方法,最初您有 5 台服务器服务于实时流量和 1 台服务于暗流量(我假设您总共有 6 个盒子)。实时节点可以配置为 3 个节点获取实时流量,2 个节点进行批处理。

当您对暗池中的代码感到满意时,您会开始一台一台地升级服务器,直到所有服务器都在实时池中提供实时流量。到那时,您可能需要将 2 个批处理服务器移动到光池,除非您有办法将它们移动得更慢(可能一次一个作业?)。

以防万一,我想说清楚一些事情,因为这可能会伤害到您(而且我不希望其他开发人员感到痛苦)。如果您的批处理是您平台的基本组成部分,您没有真正的 HA 环境,如果您的实时集群因任何原因失败,原因我在我的原始答案中概述过(数据库损坏?)您将无法 运行 在剩余的硬件中。