SQL 数据库蓝色/绿色部署



我正在处理一个新项目的基础设施。它是一个标准的Laravel堆栈= PHP,SQL服务器和Nginx。对于 PHP + Nginx 部分,我们使用 Kubernetes 集群 - 因此可以处理扩展和蓝/绿部署。

当涉及到数据库时,我有点不确定。我们不想将 Kubernetes 用于 SQL,所以目前的想法是使用 Google Cloud SQL 托管服务(竞争对手是否更适合 SQL 的蓝/绿部署?(。问题是它能否在数据库节点的旧版本和新版本之间同步数据?

假设我们有 3 个活动 Pod 和至少 2 个活动数据库节点(以及一个负载均衡器(。

因此,标准部署应如下所示:

  1. 创建带有新代码的 Pod。
  2. 使用当前数据创建新的数据库节点。
  3. 新的 Pod 获取新的环境变量来连接到新的数据库。
  4. 数据库
  5. 迁移在新数据库节点上运行。
  6. 运行新 Pod 的健康检查,如果它通过 Pod 开始接收流量。
  7. 其中一个旧 Pod 脱机。

它应该继续执行此迭代,直到所有 Pod 和数据库节点都被替换。

问题是这能与数据库一起使用吗?假设网站上有一个用户正在使用最后一个 OLD 数据库节点来写入一些数据,当切换到 NEW 数据库节点时,数据根本不存在,直到最后一个数据库节点升级。它们可以在幕后同步吗?Google Cloud SQL 托管服务是否提供此功能?

还是有完全不同的更好的解决方案来解决这个问题?

谢谢!

我不是 100% 确定这是否是您正在寻找的,但据我了解,Cloud SQL 副本将是一个更好的解决方案。您可以拥有只读副本 [1],它们是主实例的副本,并且具有不同的选项 [2]

只读副本是主实例的副本,几乎实时反映对主实例的更改。您可以创建副本以卸载来自主服务器的读取请求或分析流量。您可以为单个主实例创建多个只读副本。

或故障转移副本 [3],以防主服务器出现故障,数据在那里继续可用。

如果配置为高可用性的实例遇到中断或无响应,Cloud SQL 会自动故障转移到故障转移副本,并且您的数据继续可供客户端使用。这称为故障转移。

如果需要,您可以组合它们。

最新更新