SQL 数据库蓝/绿部署

SQL Database Blue / Green deployments

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

谈到数据库,我有点不确定。我们不想将 Kubernetes 用于 SQL,因此目前的想法是选择 Google 云 SQL 托管服务(Are the competitors better for blue/green deployment of SQL?)。问题是它能同步新旧版本数据库节点之间的数据吗?

假设我们有 3 个活动 Pods 和至少 2 个活动数据库节点(和一个负载平衡器)。

所以标准部署应该是这样的:

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

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

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

或者对于这个问题是否有完全不同的更好的解决方案?

谢谢!

我不是 100% 确定这是否是您正在寻找的,但据我了解,云 SQL 副本将是更好的解决方案。您可以拥有读取副本 [1], that are a copy of the master instance and have different options [2]

A read replica is a copy of the master that reflects changes to the master instance in almost real time. You create a replica to offload read requests or analytics traffic from the master. You can create multiple read replicas for a single master instance.

或故障转移副本 [3],万一主服务器出现故障,数据仍可在那里使用。

If an instance configured for high availability experiences an outage or becomes unresponsive, Cloud SQL automatically fails over to the failover replica, and your data continues to be available to clients. This is called a failover.

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