Cloud SQL 读取池支持为大型读取工作负载实现负载均衡。
什么是读取池?
读取池是用于分发大型读取工作负载的读取副本实例的集合。这些工作负载可以从主实例重定向到读取池,以减少主实例上的负载。
读取池中的每个读取副本都称为“读取池节点”。
您可以通过多种方式扩缩读取池:
- 横向缩容或扩容:通过修改读取池中读取池节点的数量,横向扩缩负载均衡容量。每个读取池支持 1 到 20 个读取池节点。
- 纵向扩容或缩容:通过修改与读取池节点关联的机器类型,纵向扩缩负载均衡容量。定义后,配置会统一应用于读取池中的每个读取池节点。
当您修改读取池节点设置(例如存储空间、连接或数据库配置标志)时,更改会自动统一应用于读取池中的每个读取池节点。
读取池可通过具有不可变 IP 地址的单个读取端点进行访问。通过该端点建立的连接会自动重定向到某个读取池节点。当您希望读取池横向缩容或扩容时,之前连接到此单个读取端点的应用无需重新配置,即使您可以在读取池中创建新的读取池节点或删除之前的节点也是如此。
每个读取池节点也有自己的 IP 地址。虽然不建议将这些 IP 地址作为访问数据的高效方法,但您可以使用它们来排查各个读取池节点的性能问题。
如需详细了解如何检索读取池或读取池节点的连接信息(IP 地址或连接字符串),请参阅查看读取池信息。
以下特征适用:
- 读取池的读取池节点始终位于同一区域(由用户指定)。 Google Cloud 会使读取池节点交替驻留在相应区域中的所有可用区中。
- 一个主实例可以具有一个或多个读取池。
- 以下操作会导致亚秒级别停机时间:
- 横向扩容或缩容(添加或移除读取池节点)。
- 纵向扩容或缩容(更改池中节点的机器类型)。
- 将现有可用区级读取副本转换为读取池。
- 读取池会在其主实例之前接受维护,这与读取副本类似。与读取副本一样,读取池会在主实例的维护窗口期间接受维护。
- 每个读取池节点都具有与 Cloud SQL 读取副本相同的可用指标。
- 使用
gcloud
或 Google Cloud 控制台描述项目的详细信息时,系统会列出读取池名称,但不会列出各个读取池节点名称。 - 如果您想将读取副本的数量扩展到总共 10 个以上,则必须将主实例上的
max_wal_senders
和max_replication_slots
数据库标志的值重置为大于或等于您想使用的读取副本数量的值。例如,如果您的主实例有 2 个读取副本和 2 个读取池(每个读取池有 10 个副本),则必须将max_wal_senders
和max_replication_slots
配置标志重置为22
或更大的值。
限制
存在以下限制:
- 读取池仅适用于采用新网络架构的 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 读取副本并改用该副本。