我正在处理一个新项目的基础设施。它是一个标准的Laravel堆栈= PHP,SQL服务器和Nginx。对于 PHP + Nginx 部分,我们使用 Kubernetes 集群 - 因此可以处理扩展和蓝/绿部署。
当涉及到数据库时,我有点不确定。我们不想将 Kubernetes 用于 SQL,所以目前的想法是使用 Google Cloud SQL 托管服务(竞争对手是否更适合 SQL 的蓝/绿部署?(。问题是它能否在数据库节点的旧版本和新版本之间同步数据?
假设我们有 3 个活动 Pod 和至少 2 个活动数据库节点(以及一个负载均衡器(。
因此,标准部署应如下所示:
- 创建带有新代码的 Pod。
- 使用当前数据创建新的数据库节点。
- 新的 Pod 获取新的环境变量来连接到新的数据库。 数据库
- 迁移在新数据库节点上运行。
- 运行新 Pod 的健康检查,如果它通过 Pod 开始接收流量。
- 其中一个旧 Pod 脱机。
它应该继续执行此迭代,直到所有 Pod 和数据库节点都被替换。
问题是这能与数据库一起使用吗?假设网站上有一个用户正在使用最后一个 OLD 数据库节点来写入一些数据,当切换到 NEW 数据库节点时,数据根本不存在,直到最后一个数据库节点升级。它们可以在幕后同步吗?Google Cloud SQL 托管服务是否提供此功能?
还是有完全不同的更好的解决方案来解决这个问题?
谢谢!
我不是 100% 确定这是否是您正在寻找的,但据我了解,Cloud SQL 副本将是一个更好的解决方案。您可以拥有只读副本 [1],它们是主实例的副本,并且具有不同的选项 [2]
只读副本是主实例的副本,几乎实时反映对主实例的更改。您可以创建副本以卸载来自主服务器的读取请求或分析流量。您可以为单个主实例创建多个只读副本。
或故障转移副本 [3],以防主服务器出现故障,数据在那里继续可用。
如果配置为高可用性的实例遇到中断或无响应,Cloud SQL 会自动故障转移到故障转移副本,并且您的数据继续可供客户端使用。这称为故障转移。
如果需要,您可以组合它们。