本页面介绍了如何为大型读取工作负载创建和管理读取池。
准备工作
- 读取池包含主实例的副本。如果您尚未创建 Cloud SQL 企业 Plus 版主实例,请进行创建。
虽然读取池支持使用公共 IP、专用服务访问通道和 Private Service Connect 进行连接,但为了便于学习本指南,请创建具有使用专用服务访问通道的专用 IP 连接的主实例。
如需详细了解主实例和复制,请参阅 Cloud SQL 中的复制简介。
- 请注意,每个主实例最多可以创建 7 个读取副本。 此值可以包含读取副本和读取池实例下的读取池节点数的任意组合。例如,一个主实例可能具有两个读取副本,以及一个包含五个读取副本(读取池节点)的单独读取池。
- 创建新的 Cloud SQL 实例时,您必须先为默认用户账号设置密码,然后才能连接到该实例。
对于 Cloud SQL for SQL Server,默认用户为
sqlserver。使用
gcloud sql users set-password命令为默认用户设置密码,如下所示:gcloud sql users set-password sqlserver \ --instance=INSTANCE_NAME \ --prompt-for-password
在运行该命令之前,请将 INSTANCE_NAME 替换为实例的名称。
保存此密码,以便稍后在连接到读取池时使用。
创建读取池
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances create 命令创建具有多个读取池节点的读取池:
gcloud sql instances create READ_POOL_NAME \ --tier=TIER --edition=ENTERPRISE_PLUS \ --instance-type=READ_POOL_INSTANCE --node-count=NODE_COUNT \ --master-instance-name=PRIMARY_INSTANCE_NAME --no-assign-ip
进行以下替换:
- READ_POOL_NAME:您要用于读取池的名称。
- TIER:您要用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-4。 - NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。 - PRIMARY_INSTANCE_NAME:与读取池关联的主实例的名称,例如
my-primary-instance。
Terraform
如需创建读取池,请使用 Terraform 资源。
然后,将 instance_type 属性设置为 "READ_POOL_INSTANCE",并将 node_count 属性设置为您要使用的节点数。
以下示例包含主实例和读取池的资源。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf扩展名,例如main.tf。在本教程中,该文件称为main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
删除更改
如需删除更改,请执行以下操作:
- 如需停用防删除保护,请在 Terraform 配置文件中将
deletion_protection参数设置为false。deletion_protection = "false"
- 运行以下命令并在提示符处输入
yes,以应用更新后的 Terraform 配置:terraform apply
-
运行以下命令并在提示符处输入
yes,以移除之前使用 Terraform 配置应用的资源:terraform destroy
REST v1
使用实例资源的 insert 方法创建具有多个读取池节点的读取池。databaseVersion 属性必须与主实例相同。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:您希望主实例和读取池所在的项目的名称。
- REGION:读取池的区域,例如
us-east1。 区域必须与主实例所在区域相同。 - TIER:您要用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-4。 - PRIMARY_INSTANCE_NAME:主实例的名称。
- READ_POOL_NAME:您要用于读取池的名称,例如
my-read-pool。 - DATABASE_VERSION:您要使用的数据库版本。
- NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。 - FULL_NETWORK_NAME:您希望读取池所在的完整网络路径,例如
projects/vpc-host-project/global/networks/my-network-name。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT/instances
请求 JSON 正文:
{
"name": "READ_POOL_NAME",
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT",
"databaseVersion": "DATABASE_VERSION",
"region": "REGION",
"instanceType": "READ_POOL_INSTANCE",
"nodeCount": NODE_COUNT,
"settings": {
"tier": "TIER",
"edition": "ENTERPRISE_PLUS",
"ipConfiguration": {
"ipv4Enabled": false,
"privateNetwork": "FULL_NETWORK_NAME"
}
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用实例资源的 insert 方法创建具有多个读取池节点的读取池。databaseVersion 属性必须与主实例相同。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:您希望主实例和读取池所在的项目的名称。
- REGION:读取池的区域,例如
us-east1。 区域必须与主实例所在区域相同。 - TIER:您要用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-4。 - PRIMARY_INSTANCE_NAME:主实例的名称。
- READ_POOL_NAME:您要用于读取池的名称,例如
my-read-pool。 - DATABASE_VERSION:您要使用的数据库版本。
- NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。 - FULL_NETWORK_NAME:您希望读取池所在的完整网络路径,例如
projects/vpc-host-project/global/networks/my-network-name。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances
请求 JSON 正文:
{
"name": "READ_POOL_NAME",
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT",
"databaseVersion": "DATABASE_VERSION",
"region": "REGION",
"instanceType": "READ_POOL_INSTANCE",
"nodeCount": NODE_COUNT,
"settings": {
"tier": "TIER",
"edition": "ENTERPRISE_PLUS",
"ipConfiguration": {
"ipv4Enabled": false,
"privateNetwork": "FULL_NETWORK_NAME"
}
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
将读取副本转换为读取池
您可以通过指定池中的节点数,将现有的 Cloud SQL 企业 Plus 版读取副本转换为读取池。在此转换过程中,副本 IP 将变为读取池 IP(读取端点),因此现有客户端无需重新配置即可连接到该池。
新创建的读取池节点将具有与原始读取副本相同的机器类型和配置。更改此机器类型或配置需要单独的操作。只有可用区级读取副本才支持此操作。 Cloud SQL for SQL Server 不支持在读取副本上实现高可用性。
如需了解详情,请参阅修改读取池配置。
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances patch 命令转换读取副本,以便与读取池搭配使用:
gcloud sql instances patch READ_REPLICA_NAME \ --instance-type=READ_POOL_INSTANCE --node-count=NODE_COUNT
进行以下替换:
- READ_REPLICA_NAME:您要转换的读取副本的名称。
- NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。
Terraform
如需将读取副本转换为读取池,请使用 Terraform 资源。该清单与您在创建读取副本中使用的清单类似。 然后,完成以下步骤:
- 将
instance_type属性从"READ_REPLICA_INSTANCE"更改为"READ_POOL_INSTANCE",并将node_count属性更改为要使用的节点数。 - 如果您之前设置过该属性,请清除
settings.availability_type属性。
REST v1
使用实例资源的 patch 方法将读取副本转换为读取池。
在使用任何请求数据之前,请先进行以下替换:
- READ_REPLICA_NAME:您要转换的读取副本的名称,例如
my-read-replica。 - NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_REPLICA_NAME
请求 JSON 正文:
{
"instanceType": "READ_POOL_INSTANCE",
"nodeCount": NODE_COUNT
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用实例资源的 patch 方法将读取副本转换为读取池。
在使用任何请求数据之前,请先进行以下替换:
- READ_REPLICA_NAME:您要转换的读取副本的名称,例如
my-read-replica。 - NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_REPLICA_NAME
请求 JSON 正文:
{
"instanceType": "READ_POOL_INSTANCE",
"nodeCount": NODE_COUNT
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
读取池自动扩缩
您可以配置读取池以自动调整大小,从而适应应用不断变化的工作负载需求。如需了解详情,请参阅读取池自动扩缩。
将读取池转换为读取副本
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances patch 命令转换读取副本,以便与读取池搭配使用:
gcloud sql instances patch READ_POOL_NAME \ --instance-type=READ_REPLICA_INSTANCE --availability-type=ZONAL
进行以下替换:
- READ_POOL_NAME:您要转换的读取池的名称。
Terraform
如需将读取池转换为读取副本,请使用 Terraform 资源。
该清单与您在创建读取池中使用的清单类似。
然后,将 instance_type 属性从 "READ_POOL_INSTANCE" 更改为 "READ_REPLICA_INSTANCE",清除 node_count 属性,并将 settings.availability_type 属性设置为 ZONAL。
REST v1
使用实例资源的 patch 方法将读取池转换为读取副本。
在使用任何请求数据之前,请先进行以下替换:
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"instanceType": "READ_REPLICA_INSTANCE",
"settings": {
"availabilityType": "ZONAL"
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用实例资源的 patch 方法将读取池转换为读取副本。
在使用任何请求数据之前,请先进行以下替换:
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"instanceType": "READ_REPLICA_INSTANCE",
"settings": {
"availabilityType": "ZONAL"
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
查看读取池信息
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances describe 命令描述读取池:
gcloud sql instances describe READ_POOL_NAME
进行以下替换:
- READ_POOL_NAME:您要描述的读取池的名称。
包含 IP 地址和节点信息的示例响应可能类似于以下内容:
... connectionName: my-project:us-central1:read-pool ipAddresses: - ipAddress: 10.3.0.108 type: PRIVATE nodeCount: 2 nodes: - dnsName: c5bdacb09ffc.j10o8yqc7pve.us-central1.sql.goog. gceZone: us-central1-f ipAddresses: - ipAddress: 10.3.0.112 type: PRIVATE name: read-pool-node-01 state: RUNNABLE - dnsName: 8f77c454d6b2.j10o8yqc7pve.us-central1.sql.goog. gceZone: us-central1-c ipAddresses: - ipAddress: 10.3.0.113 type: PRIVATE name: read-pool-node-02 state: RUNNABLE
REST v1
使用 get 方法查看读取池详细信息。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用 get 方法查看读取池详细信息。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{
[...],
"connectionName": "my-project:us-central1:read-pool",
"ipAddresses": [
{
"type": "PRIVATE",
"ipAddress": "10.3.0.108"
}
],
"nodeCount": 2,
"nodes": [
{
"ipAddresses": [
{
"type": "PRIVATE",
"ipAddress": "10.3.0.112"
}
],
"name": "read-pool-node-01",
"gceZone": "us-central1-f",
"dnsName": "c5bdacb09ffc.j10o8yqc7pve.us-central1.sql.goog.",
"state": "RUNNABLE"
},
{
"ipAddresses": [
{
"type": "PRIVATE",
"ipAddress": "10.3.0.113"
}
],
"name": "read-pool-node-02",
"gceZone": "us-central1-c",
"dnsName": "8f77c454d6b2.j10o8yqc7pve.us-central1.sql.goog.",
"state": "RUNNABLE"
}
]
}
添加或移除读取池节点
以下步骤通过修改读取池中的读取池节点数来扩缩读取池。存在一些操作限制。如需了解详情,请参阅读取池限制。
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances patch 命令扩缩读取池:
gcloud sql instances patch READ_POOL_NAME \ --node-count=NODE_COUNT
进行以下替换:
- READ_POOL_NAME:读取池的名称。
- NODE_COUNT:您希望读取池中包含的读取池节点数。
选择介于
1到7之间的任意数字。
Terraform
如需更改读取池节点数,请更新现有 Terraform 资源。该清单与您在创建读取池中使用的清单类似。
然后,将 node_count 属性更改为要使用的节点数。
REST v1
使用
patch 方法,通过修改读取池中的读取池节点数来扩缩读取池。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于
1到20之间的任意数字。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"nodeCount": NODE_COUNT
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用
patch 方法,通过修改读取池中的读取池节点数来扩缩读取池。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于
1到20之间的任意数字。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"nodeCount": NODE_COUNT
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
修改读取池配置
以下步骤展示了如何修改读取池配置。如需了解详情,请参阅实例设置简介和修改实例。
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances patch 命令可纵向扩缩读取池,例如,通过修改机器类型:
gcloud sql instances patch READ_POOL_NAME \ --tier=TIER
进行以下替换:
- READ_POOL_NAME:读取池的名称。
- TIER:您要应用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-8。
Terraform
如需修改读取池配置,请更新现有的 Terraform 资源。该清单与您在创建读取池中使用的清单类似。
然后,在 settings 字段中更新要更改的属性。例如,将 settings.tier 属性更改为其他机器类型。
REST v1
使用 patch 方法修改读取池节点配置。
设置会统一应用于读取池中的所有读取池节点。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- TIER:您要用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-4。 - READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"settings": {
"tier": "TIER"
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用 patch 方法修改读取池节点配置。
设置会统一应用于读取池中的所有读取池节点。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- TIER:您要用于读取池中每个读取池节点的机器类型,例如
db-perf-optimized-N-4。 - READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME
请求 JSON 正文:
{
"settings": {
"tier": "TIER"
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
连接到读取池
您可以通过多种方式连接到读取池。以下步骤展示了一种方法,即通过在同一 VPC 网络中创建虚拟机作为连接源,来连接到具有专用 IP 地址的读取池。
如需详细了解可用于配置与 Cloud SQL 实例的连接的其他方式,请参阅 Cloud SQL 连接简介。 连接方法通常要求您先获取实例的 IP 地址或连接名称,如查看读取池信息中所述。 读取池支持大多数可用于其他 Cloud SQL 实例的连接方法,但存在一些限制。
如果使用 Cloud SQL Auth 代理或 Cloud SQL 连接器建立连接,请务必更新到最新版本。如需支持读取池,所需的最低版本包括以下版本:
- Cloud SQL Auth 代理:v2.15.2
- Cloud SQL Python 连接器:v1.18.0
- Cloud SQL Go 连接器:v1.16.0
- Cloud SQL Node 连接器:v1.7.0
- Cloud SQL Java 连接器:v1.24.0
控制台
如需连接到读取池,请完成以下步骤:
-
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
您将转到实例“概览”页。 点击进入新的读取池,查看包括其专用 IP 地址在内的详细信息。在连接到此实例部分中,复制并保存实例的连接名称。connection name的格式为projectID:region:instanceID。稍后您将在启动 Cloud SQL Auth 代理时使用此connection name。 - 创建 Compute Engine 虚拟机。
- 打开与 Compute Engine 虚拟机的两个 SSH 连接。后续步骤将使用这些连接来运行 Cloud SQL Auth 代理和数据库客户端。
- 安装客户端。
- 安装 Cloud SQL Auth 代理。
- 启动 Cloud SQL Auth 代理。
- 连接到 Cloud SQL 实例。
如需了解详情,请参阅使用专用 IP 连接到 Cloud SQL 实例。
删除读取池
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
使用以下 gcloud sql instances delete 命令删除读取池:
gcloud sql instances delete READ_POOL_NAME
进行以下替换:
- READ_POOL_NAME:要删除的读取池的名称。
REST v1
使用 delete 方法删除读取池。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
使用 delete 方法删除读取池。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:读取池所在项目的名称。
- READ_POOL_NAME:读取池的名称,例如
my-read-pool。
HTTP 方法和网址:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应: