问题标签 [blue-green-deployment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
451 浏览

jakarta-ee - 使用 WAS8.5 的应用程序故障转移和蓝/绿部署

我正在运行具有以下架构的 WebSphere 8.5: 1 台 IHS 服务器在 2 台应用服务器上进行负载平衡。

我当然在 2 个 AS 上部署了多个应用程序,我的印象是 IHS 无法检测到 1 个应用程序在 1 个 AS 上不再可用。

我只使用脚本在其中一个 AS 上停止了应用程序,并且 IHS 不断将请求分派给正在运行该应用程序的应用程序和另一个,从而产生以下令人作呕的消息:SRVE0255E: A WebGroup/Virtual Host to handle /xxxxxxxx has not been defined.

故障转移插件的最细粒度是应用程序服务器吗?

我需要减少停机风险并实现蓝/绿部署。我需要以某种方式更新 IHS 服务器的路由,以要求它仅在运行应用程序的服务器上进行负载平衡。

提前致谢

0 投票
1 回答
8299 浏览

postgresql - RDS 快照还原耗时过长

作为我们蓝绿部署策略的一部分,我们正在对 prod RDS 实例进行快照,然后将此快照恢复到一个新实例中,然后应用数据库迁移并将新的绿色应用程序链接到它。

我们的 RDS 实例有 100 GB 空间,但我们的数据库目前仅使用 10 MB。

拍摄快照大约需要 < 2 分钟

从快照恢复需要 25 分钟!

考虑到用户在这段时间内都被迫保持只读模式并且我们的数据库大小目前小于 10 mb,25 分钟的恢复时间太长了。

我想知道这个恢复时间是否是 Amazon RDS 的通常时间,或者我们是否做错了什么。

  • 亚马逊 RDS Postgres。
  • 多可用区:是
  • 实例类别:中
  • 通用 (SSD)
  • IOPS:禁用。
0 投票
1 回答
5183 浏览

azure - 使用 Azure ServiceFabric 的蓝/绿部署

我目前正在使用 Azure ServiceFabric 上的 ReliableActors 框架构建应用程序。随着我们扩大规模,我正在考虑进行蓝/绿部署。我可以看到如何使用无状态系统来做到这一点。有没有办法使用有状态的演员来做到这一点?

0 投票
1 回答
33 浏览

deployment - 在 Bluemix 上切换部署服务器

我不太确定如何命名这个问题。但是,我将在下面列出期望来解释它。

  • 在 Bluemix 上运行应用程序。
  • 在本地有代码。
  • 通过 git 推送到 Bluemix。
  • 重新启动应用程序以使新代码生效。

所以问题是:
在上述情况下,如果我想避免在服务器重新启动时停机(如果出现意外问题可能会很长时间),那么网站如何通过 Bluemix 服务器继续传输数据。我应该有影子服务器吗?我如何管理它们,以便他们知道何时切换(自动/手动),以防网站不会注意到停机时间?非常感谢。

0 投票
1 回答
3815 浏览

spring-cloud - 在 PWS 上使用 Spring Cloud/Netflix 堆栈进行蓝/绿部署的规范方法是什么?

我正在尝试一种非常类似于此处图片中详细说明的设置:https ://raw.githubusercontent.com/Oreste-Luci/netflix-oss-example/master/netflix-oss-example.png

在此处输入图像描述

在我的设置中,我使用了一个客户端应用程序 ( https://www.joedog.org/siege-home/ )、一个代理 (Zuul)、一个发现服务 (Eureka) 和一个简单的微服务。一切都部署在 PWS 上。

我想在不停机的情况下从我的简单微服务的一个版本迁移到下一个版本。最初,我从这里描述的技术开始:https ://docs.cloudfoundry.org/devguide/deploy-apps/blue-green.html

在我看来,这种方法与 Eureka 等发现服务不“兼容”。事实上,我的服务的新版本已在 Eureka 中注册,甚至在我重新映射所有路由(CF 路由器)之前就已接收流量。

这导致我采用另一种方法,其中我依赖 Spring Cloud/Netflix 中的故障转移机制:

  1. 我启动了我的服务的新(向后兼容)版本。
  2. 当这个版本被 Zuul/Eureka 选中时,它开始获得 50% 的流量。
  3. 一旦我确认新版本可以正常工作,我就会删除“旧”实例。(我只需点击 PWS 中的“停止”按钮)

据我了解,Zuul 在后台使用 Ribbon(负载平衡),因此在旧实例仍在 Eureka 但实际上正在关闭的那一瞬间,我希望重试新实例,而不会对客户端产生任何影响。

然而,我的假设是错误的。我的客户端出现了一些 502 错误:

我的 application.yml 的一部分

我不确定出了什么问题。

这是技术问题吗?

还是我做出了错误的假设(我确实在某处读到过 POST 无论如何都不会重试,我不太明白)?

我很想听听你是怎么做到的。

谢谢,安迪

0 投票
0 回答
372 浏览

mysql - WordPress 在 Azure 上的数据库蓝绿部署

我们在 Azure 的 WebApp 上有一个 WordPress 的应用程序。

我们在那里有两个环境 - DEV 和 Prod。Prod 有一个 Staging 交换槽。

显然,DEV 和 PROD 使用不同的 MySQL 数据库(我们现在在 App 中使用 MySQL,但与 ClearDB/MySQL 设置相关的相同问题)。

那么,问题是——如何进行蓝绿部署?用数据库做什么?

我们将 Travis 配置为将代码部署到不同的环境。但是 - Prod 的数据库将在访问者使用期间更新,DEV 将与开发人员一起更新(并且,当然 - 不会有来自 Prod 的访问者的更改)。

是否有任何解决方案/实践来实现这一点?

PS 还有一个问题。“MySQL In App (preview)”不允许为 WebApp 及其 Stage (swap-slot) 分离数据库。这给我们带来了额外的头痛。

0 投票
4 回答
2757 浏览

docker - 单页应用程序 (SPA) 的零停机/蓝绿部署

昨天,我们与团队一起讨论了使用零停机时间部署来支持我们的单页应用程序的可能性。

在讨论它时,我们确定了它的一个边缘案例。用户在浏览器中加载页面后,在重新加载页面之前无法将其从内存中删除。这意味着如果用户加载页面并开始使用该网站(例如开始像我现在所做的那样开始输入一篇长文章),那么在他重新加载页面之前,他无法接收到它的更新版本。

我们可以忽略用户在其浏览器中看到旧应用程序版本的事实,但下面列出了 2 点。

  1. 如果我们对用于服务 spa 的 HTTP Api 进行重大更改,那么用户将无法保存他的文章(数据丢失!)或者在执行其他后端相关操作时可能会收到其他错误。
  2. 当用户在不重新加载 SPA 的情况下导航到新页面时,他可以收到下一页的模板或与外部旧容器不兼容的某些控件的模板。它可能会导致标记或应用程序逻辑损坏。
  3. 我们不能强迫用户重新登录,因为他可能正在输入他的文章,这只是一个糟糕的用户体验。

考虑到所有这些要点,可以提出以下解决方案:

  1. 用户 1 将 SPA 的 v1 加载到他的浏览器中。
  2. 连同身份验证令牌一起,版本信息被发送到浏览器(例如使用 JWT)。
  3. 我们想要部署我们的应用程序的 v2 版本。我们启动了 v2 版本,但不禁用 v1。
  4. 用户 2 将 v2 的 SPA 加载到他的浏览器中
  5. 用户 1 转到 SPA 中的下一页。负载均衡器检查其令牌中的版本信息,并将用户 1 的流量路由到 v1 服务器。
  6. 用户 2 以相同的方式路由到 v2。
  7. 用户 1 注销应用程序并关闭浏览器。
  8. 用户 1 重新登录 - 这次他收到 v2。
  9. 在 v1 应用程序长时间没有收到任何流量后,它会被丢弃。

然而,在这种方法中,可以有多个版本,超过 2 个(例如,如果用户在一两天内保持在线)。这意味着在最后一个用户注销之前,我们将无法将数据库迁移到新模式(想象一下它如何适用于 Facebook 等网站)。拥有多个版本不是问题,但是像 Docker 和 Rancher 这样的工具让我们可以轻松地做到这一点。

同样在第 7 步中。用户需要重新加载页面或关闭浏览器——否则他仍将使用 v1,我们无法强制他进入下一个版本。

我的问题是您使用什么方法来进行单页应用程序的零停机/蓝绿部署?

当您将流量切换到“绿色”版本时,您如何管理应用程序的“蓝色”版本的生命周期,尤其是对于现有的“蓝色”客户端应用程序。

你解决了这些问题,你知道其他的解决方案吗?

0 投票
1 回答
95 浏览

asp.net-web-api - 在蓝/绿部署设置中针对活动应用程序测试数据库更改

我正在考虑实施蓝/绿部署策略。它将用于数据库驱动的 Web 应用程序。我们目前正在使用 Teamcity 和 Octopus 部署。

据我所知,要实现此策略,对数据库的更改需要使两个版本的应用程序都可以继续工作,因此在回滚的情况下,不需要恢复数据库更改。

我在这里阅读了 Octopus 建议的实现。

我的问题

  • 有没有人在升级到 prod 之前针对数据库更改测试 prod 中的当前活动应用程序?例如在测试或 UAT?
  • 如果是这样,您如何将此要求与部署策略相匹配,尤其是在使用 Octopus 进行配置时?
0 投票
0 回答
244 浏览

python - marathon-lb zdd.py脚本如何做蓝绿部署

最近,我尝试使用 marathon-lb github 文档中提到的 marathon-lb zdd.py 脚本对我的马拉松应用程序进行蓝绿色部署(https://github.com/mesosphere/marathon-lb#zero-downtime -部署)。我在告诉脚本完全部署当前版本(绿色版本)时遇到了问题,它不会杀死蓝色或旧部署的最后一个任务并将其缩放为零。所以我的蓝色应用程序始终保持在 1。有没有比 marathon-lb github 文档更好的 zdd.py 文档?

0 投票
3 回答
2432 浏览

amazon-web-services - 弹性搜索数据的蓝/绿“部署”?

我正计划从网页中提取(基本上是在获得许可的情况下抓取)一些数据并将其存储在 elasticsearch 中(你知道,用于搜索)。

虽然我有权从网站上抓取数据,

  • 此数据没有 API 或其他结构化来源
  • 它是手动直接编写成 HTML
  • 没有唯一标识符可以将一个条目与另一个条目区分开来(我基本上将从 DOM 中提取大约 1,000-5,000 个条目)。

当我将它存储在 es 中时,我打算将它放入一个索引和映射类型中,比如thing.

但是,随着时间的推移,源(HTML 网页)可能会随着它们添加/删除/更改其中一些条目的内容而发生变化。由于源中没有标识符,因此我无法轻松识别新的标识符(更糟糕的是,已删除或更改的标识符)。

我想让我的 es 索引保持最新,我想的是某种蓝绿色机制:

  • 我根据源更改的速度按某个计划(每天/每周)运行提取过程
  • 每次运行该过程都会产生另一个索引(或者可能完全是一个新的集群)。假设当前索引是index-prod,流程构建的新索引是index-rc(候选版本)
  • index-rc基于一些启发式方法进行验证(对条目数量的灵活速度检查、我们知道应该工作的示例查询等)
  • 如果它是有效的,它要么:
    • A. 慢慢地将查询翻转到新的集群/索引中
    • 或 B. 一次性翻转到新的集群/索引

我计划使用AWS Elastisearch Service托管 elasticsearch 集群,并且可能使用Route 53 CNAME(也许是 ELB?)来设计一些东西,但我想知道 elasticsearch 本身是否有更隐含的支持来做到这一点?

本质上,我想将一个索引的数据交换为另一个。