概览
本页介绍了如何使用写入端点,通过专用服务访问通道 (PSA) 从 Virtual Private Cloud (VPC) 网络中的客户端连接到 Cloud SQL 实例。
写入端点是一个全球域名服务 (DNS) 名称,它会自动解析为当前主实例的 IP 地址。如果发生副本故障切换或切换操作,此写入端点会自动将传入连接重定向到新的主实例。您可以在 SQL 连接字符串中使用写入端点来连接到 Cloud SQL 实例,而不是使用 IP 地址。通过使用写入端点,您可以避免在执行副本故障切换或切换操作以进行区域级服务中断恢复或灾难恢复演练时不得不更改应用连接。
每个符合条件的 Cloud SQL 实例都有一个内置的写入端点,其名称、创建和更新由 Cloud SQL 管理。以下示例展示了其格式:
103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
写入端点始终以 .global.sql-psa.goog.
后缀结尾。您无法修改此由 Cloud SQL 管理的写入端点的名称或格式。
您可以使用写入端点对主实例执行所有写入操作,包括插入、更新、删除和 DDL 更改。您还可以将写入端点用于读取操作,例如查询。当您执行副本故障切换或切换操作以将副本实例升级为新的主实例时,Cloud SQL 会自动更改写入端点指向的专用 IP 地址。
生成写入端点
如果您创建新的 Cloud SQL 实例,则在满足以下前提条件时,Cloud SQL 会自动创建写入端点:
- 您必须在 Cloud SQL 实例所在的 Google Cloud 项目中启用以下 API:
如果未在项目中启用 Cloud DNS API,则无法创建对等互连 DNS 区域,这会导致 DNS 名称无法使用。
成功创建对等互连 DNS 区域后,请务必不要以任何方式修改该区域。任何修改(包括删除)都会导致 DNS 无法用于数据库连接。
- Cloud SQL 实例必须是 Cloud SQL 企业 Plus 版。
- Cloud SQL 实例必须配置为使用专用 IP,并启用专用服务访问通道 (PSA)。
- 此功能需要实例采用新网络架构。在大多数情况下,新实例是使用新架构创建的。如需验证这一点,请检查实例的网络架构。
如果您将现有的 Cloud SQL 企业版实例升级到 Cloud SQL 企业 Plus 版实例,并且满足前面列出的前提条件,Cloud SQL 会自动生成写入端点。如果现有实例采用的是旧网络架构,您必须先将实例升级到新网络架构,才能获取写入端点。
如果您已经有 Cloud SQL 企业 Plus 版实例,但该实例没有写入端点,并且您希望 Cloud SQL 自动生成写入端点,请创建启用了高级灾难恢复的副本。
查看写入端点
gcloud
如需查找写入端点,请使用以下 gcloud CLI 命令:
gcloud sql instances describe INSTANCE_NAME \ | grep psaWriteEndpoint
进行以下替换:
INSTANCE_NAME
:Cloud SQL 实例的名称。
写入端点始终以 .global.sql-psa.goog.
后缀结尾,类似于以下示例:
103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
使用写入端点连接到 Cloud SQL 实例
psql
如需使用写入端点将 psql
客户端连接到 Cloud SQL 实例,请运行以下命令:
psql -U DATABASE_NAME -h WRITE_ENDPOINT
进行以下替换:
DATABASE_NAME
:数据库的名称。 例如postgres
。WRITE_ENDPOINT
:DNS 名称或写入端点。此字母数字值始终以.global.sql-psa.goog.
后缀结尾。例如103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
。
通过 SSL/TLS 连接使用写入端点的数据库客户端与数据库实例
psql
如需通过 SSL/TLS 连接使用写入端点将数据库客户端连接到实例,请运行以下命令:
psql "sslmode=SSL_MODE \ sslrootcert=SSL_ROOT_SERVER \ sslcert=SSL_CERT \ sslkey=SSL_KEY \ host=WRITE_ENDPOINT \ port=PORT user=USERNAME \ dbname=DATABASE_NAME"
进行以下替换:
SSL_MODE
:所用的 SSL 模式。例如verify-full
。SSL_ROOT_SERVER
:SSL 根服务器的名称。例如server-ca.pem
。SSL_CERT
:客户端使用的 SSL 证书的名称。例如client-cert.pem
。SSL_KEY
:客户端使用的 SSL 密钥的名称。例如client-key.pem
。WRITE_ENDPOINT
:DNS 名称或写入端点。此字母数字值始终以.global.sql-psa.goog.
后缀结尾。例如103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
。PORT
:所使用的端口号。例如5432
。USERNAME
:用户名。例如postgres
。DATABASE_NAME
:数据库的名称。 例如postgres
。
限制
- 写入端点不适用于 Cloud SQL 企业版实例创建。
- 写入端点不适用于仅具有公共 IP 的实例或仅具有 Private Service Connect 的实例。
- 写入端点无法与 Cloud SQL Auth 代理或语言连接器搭配使用。
问题排查
以下部分介绍了写入端点的架构,并说明了常见的问题排查问题。
写入端点的架构
创建符合条件的实例时,系统会默认生成写入端点。
为了创建写入端点,Cloud SQL 会执行以下设置:
- 在服务 Cloud SQL 提供方 VPC 网络中创建专用 DNS 区域
- 在客户 VPC 网络中创建对等互连 DNS 区域
- 在服务提供方网络中的专用 DNS 区域中创建 DNS 记录
下图说明了此流程的工作原理:

DNS 解析问题
如果 DNS 解析不起作用,请检查以下各项:
- 确保满足所有前提条件。
- 确保需要进行解析的客户端位于 Cloud SQL 实例所连接的同一网络中。如需检查这一点,请使用
gcloud compute instances list
命令:gcloud compute instances list \ --format="table( name, zone.basename(), networkInterfaces[].network )" \ --project=PROJECT_NAME
将
PROJECT_NAME
替换为 DNS 使用方网络所在的项目的名称。 - 验证对等互连可用区是否存在。为此,请使用
gcloud dns managed-zones list
命令:gcloud dns managed-zones list \ --project=PROJECT_NAME
将
PROJECT_NAME
替换为 DNS 使用方网络所在的项目的名称。 - 如果对等互连可用区不存在,您可以使用
gcloud beta sql instances patch
命令来解决此问题:gcloud beta sql instances patch INSTANCE_NAME --reconcile-psa-networking
将
INSTANCE_NAME
替换为您的 Cloud SQL 实例的名称。
新实例没有写入端点
如果新创建的实例不包含写入端点,请检查以下各项:
- 确保已满足所有前提条件。
- 确保没有剩余的 DNS 名称为
sql-psa.goog.
的对等互连 DNS 区域。如果与 DNS 区域关联的网络未与对等互连 DNS 区域的对等项目 ID 建立 VPC 对等互连,则对等互连 DNS 区域是剩余的 DNS 区域。
如果存在带有
sql-psa.goog.
后缀的剩余对等互连 DNS 区域,请将其删除。如需检查是否存在剩余的对等互连 DNS 区域,请使用
gcloud dns managed-zones list
命令:gcloud dns managed-zones list \ --project=PROJECT_NAME
将
PROJECT_NAME
替换为 DNS 使用方网络所在的项目的名称。如果存在带有
sql-psa.goog.
后缀的 DNS 区域,请在仔细检查确认对等互连 DNS 区域是剩余的 DNS 区域后,删除该 DNS 区域。如需删除 DNS 区域,请使用
gcloud dns managed-zones delete
命令:gcloud dns managed-zones delete ZONE_NAME
将
ZONE_NAME
替换为与写入端点关联的 DNS 区域名称。值为字母数字,采用以下格式:cloud-sql-psa-dns-1234567890
。 - 您可以使用
gcloud beta sql instances patch
命令修复符合条件的实例的缺失写入端点:gcloud beta sql instances patch INSTANCE_NAME --reconcile-psa-networking
将
INSTANCE_NAME
替换为您的 Cloud SQL 实例的名称。
后续步骤
- 详细了解 Cloud SQL 问题排查。