Cloud SQL 读取池支持为大型读取工作负载进行负载均衡。
什么是读取池?
读取池是一组用于分发大型读取工作负载的读取副本实例。这些工作负载可以从主实例重定向到读取池,以减少主实例上的负载。
读取池中的每个读取副本都称为“读取池节点”。
您可以通过多种方式扩缩读取池:
- 横向扩缩:通过修改读取池中读取池节点的数量,横向扩缩负载平衡容量。 每个读取池支持 1 到 20 个读取池节点。
- 纵向扩缩:通过修改与读取池节点关联的机器类型,纵向扩缩负载均衡容量。定义后,配置会统一应用于读取池中的每个读取池节点。
当您修改读取池节点设置(例如存储空间、连接或数据库配置标志)时,所做更改会自动统一应用于读取池中的每个读取池节点。
读取池可通过具有不可变 IP 地址的单个读取端点进行访问。通过端点建立的连接会自动重定向到某个读取池节点。当您希望读取池进行扩容或缩容时,之前连接到此单个读取端点的应用无需重新配置,即使您可以在读取池中创建新的读取池节点或删除之前的节点也是如此。
每个读取池节点也有自己的 IP 地址。虽然不建议将这些 IP 地址作为访问数据的高效方法,但您可以使用它们来排查各个读取池节点的性能问题。
如需详细了解如何检索读取池或读取池节点(IP 地址或连接字符串)的连接信息,请参阅查看读取池信息。
以下特征适用:
- 读取池的读取池节点始终位于同一区域(由用户指定)。 Google Cloud 在区域中的所有可用区之间交替使用读取池节点。
- 主实例可以有一个或多个读取池。
- 以下操作会导致停机时间在亚秒级别:
- 横向扩容或缩容(添加或移除读取池节点)。
- 纵向扩缩(更改池中节点的机器类型)。
- 将现有的可用区读取副本转换为读取池。
- 读取池会在其主实例之前接受维护,这与读取副本类似。与只读副本一样,读取池会在主实例的维护窗口期间接受维护。
- 每个读取池节点都具有与 Cloud SQL 读取副本相同的可用指标。
- 使用
gcloud
或 Google Cloud 控制台描述项目的详细信息时,系统会列出读取池名称,但不会列出各个读取池节点名称。
限制
存在以下限制:
- 读取池仅适用于采用新网络架构的 Cloud SQL 企业 Plus 版实例。 与读取池关联的主实例也必须是 Cloud SQL 企业 Plus 版实例。
- 流量由读取池节点处理,具体取决于数据库是否运行正常,但与该读取池节点的复制延迟时间无关。即使有其他未延迟的读取池节点可用,流量也可以由延迟的读取池节点处理。如果数据库进程正常运行且可以回答查询,则认为数据库健康状况良好,但对所提供数据的新鲜度没有要求。
- 无法保证单个逻辑会话连接到读取池中的多个读取池节点。会话中的后续请求可能会连接到复制位置 (LSN) 低于服务于先前请求的读取池节点的读取池节点,这可能会导致数据库的状态看起来回到了过去。
- 不支持以下类型的更新:
- 虽然读取池仍会接收 Cloud SQL 维护更新,但您无法将读取池更新为新的主要数据库版本。
- 启动或停止读取池的节点
- 除了读取副本不支持的操作之外,读取池还不支持以下操作:
- 提升副本
- 重启
- import
- export
- 故障切换
- 重新加密
- clone
- 以下功能无法与读取池搭配使用:
- Private Service Connect
- 使用共享 CA 或客户管理的 CA 的 SSL/TLS 证书
- 读取池无法复制到其他实例,例如级联副本或其他读取池。
- 读取池必须直接从主实例复制。不能是级联副本。
- 如果您想将区域级读取副本转换为读取池,则必须先将区域级读取副本转换为可用区级读取副本。
- 创建或扩缩读取池时,您必须等待与该读取池关联的先前创建池、缩减或扩容操作完成。此限制适用于与同一主实例关联的任何其他读取池。如果您想扩缩与同一主实例关联的多个读取池,则必须等待与第一个读取池关联的扩缩操作完成后,才能开始扩缩下一个读取池。如果您同时发出多个请求,则可能会收到以下错误:
Operation failed because another operation was already in progress.
。 - 只有位于与主实例相同区域中的可用区级副本才能转换为在读取池中使用。
- 在同时更改读取池节点的机器类型时,您无法向读取池添加或从中移除读取池节点。
- 如果您的应用必须连接到专用读取副本(例如,因为特定读取副本上存在二级索引),请创建 Cloud SQL 读取副本并改用该副本。
- 您无法查询与读取池关联的特定用户和数据库。由于 Cloud SQL Studio 依赖于用户和数据库提供的数据,因此不支持将 Cloud SQL Studio 与读取池搭配使用。