我正在处理一个新项目的基础设施。它是一个标准的 Laravel 堆栈 = PHP、SQL 服务器和 Nginx。对于 PHP + Nginx 部分,我们使用的是 Kubernetes 集群——因此可以进行扩展和蓝/绿部署。
说到数据库,我有点不确定。我们不想为 SQL 使用 Kubernetes,所以目前的想法是使用 Google Cloud SQL 托管服务(竞争对手是否更适合 SQL 的蓝/绿部署?)。问题是它可以在新旧版本的数据库节点之间同步数据吗?
假设我们有 3 个活动 Pod 和至少 2 个活动数据库节点(和一个负载均衡器)。
所以标准部署应该是这样的:
- 使用新代码创建 Pod。
- 使用当前数据创建新的数据库节点。
- 新的 Pod 获取新的环境变量以连接到新的数据库。
- 数据库迁移在新的数据库节点上运行。
- 运行新 Pod 的健康检查,如果通过,则 Pod 开始接收流量。
- 其中一个旧 Pod 已脱机。
它应该继续执行此迭代,直到所有 Pod 和数据库节点都被替换。
问题是这可以与数据库一起使用吗?假设网站上有一个用户正在使用最后一个 OLD 数据库节点写入一些数据,当切换到 NEW 数据库节点时,数据根本不存在,直到最后一个数据库节点升级。它们可以在幕后同步吗?Google Cloud SQL 托管服务是否提供此功能?
还是有完全不同的更好的解决方案来解决这个问题?
谢谢!