0

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

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

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

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

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

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

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

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

谢谢!

4

1 回答 1

1

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

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

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

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

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

于 2018-08-22T10:42:20.897 回答