创建和管理读取池

本页面介绍了如何为大型读取工作负载创建和管理读取池

准备工作

  1. 读取池包含主实例的副本。如果您尚未创建 Cloud SQL 企业 Plus 版主实例,请进行创建。 虽然读取池支持公共 IP 连接,但为了便于学习本指南,请创建具有专用 IP (PSA) 连接的主实例。 如需详细了解主实例和复制,请参阅 Cloud SQL 中的复制简介
  2. 创建主实例后,为根用户选择一个密码,然后运行以下命令在主实例上设置该密码。 保存此密码,以便稍后在连接到读取池时使用。
  3.     gcloud --project=PROJECT \
        sql users set-password root --host=% \
        --instance=PRIMARY_INSTANCE_NAME --prompt-for-password
      

    进行以下替换:

    • PROJECT:您希望主实例和读取池所在的项目的名称。
    • PRIMARY_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
    

进行以下替换:

  • READ_POOL_NAME:您要用于读取池的名称。
  • TIER:您要用于读取池中每个读取池节点的机器类型,例如 db-perf-optimized-N-4
  • NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。
  • PRIMARY_INSTANCE_NAME:与读取池关联的主实例的名称,例如 my-primary-instance

Terraform

如需创建读取池,请使用 Terraform 资源。 然后,将 instance_type 属性设置为 "READ_POOL_INSTANCE",并将 node_count 属性设置为您要使用的节点数。

以下示例包含主实例和读取池的资源。


resource "google_sql_database_instance" "primary" {
  name             = "mysql-primary"
  database_version = "MYSQL_8_4"
  region           = "europe-west4"

  instance_type = "CLOUD_SQL_INSTANCE"

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"

    backup_configuration {
      enabled            = true
      binary_log_enabled = true
    }

    ip_configuration {
      ipv4_enabled = true
    }
  }
}

resource "google_sql_database_instance" "replica" {
  name             = "mysql-replica"
  database_version = "MYSQL_8_4"
  region           = "europe-west4"

  master_instance_name = google_sql_database_instance.primary.name
  instance_type        = "READ_POOL_INSTANCE"
  node_count           = 2

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"

    ip_configuration {
      ipv4_enabled = true
    }
  }
}

应用更改

如需在 Trusted Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的默认 Trusted Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Trusted Cloud 项目以查看结果。在 Trusted Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

删除更改

如需删除更改,请执行以下操作:

  1. 如需停用防删除保护,请在 Terraform 配置文件中将 deletion_protection 参数设置为 false
    deletion_protection =  "false"
  2. 运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:
    terraform apply
  1. 运行以下命令并在提示符处输入 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:您要使用的数据库版本。 例如 MYSQL_8_0_37
  • NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。
  • 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:您要使用的数据库版本。 例如 MYSQL_8_0_37
  • NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。
  • 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(读取端点),因此现有客户端无需重新配置即可连接到该池。

新创建的读取池节点将具有与原始读取副本相同的机器类型和配置。更改此机器类型或配置需要单独的操作。只有可用区级读取副本才支持此操作。如需将高可用性 (HA) 读取副本转换为读取池,您必须先将其转换为可用区级读取副本。

如需了解详情,请参阅修改读取池配置

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:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

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:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

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:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

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:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

Terraform

如需更改读取池节点数,请更新现有 Terraform 资源。该清单与您在创建读取池中使用的清单类似。 然后,将 node_count 属性更改为要使用的节点数。

REST v1

使用 patch 方法,通过修改读取池中的读取池节点数来扩缩读取池。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT:读取池所在项目的名称。
  • NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

请求 JSON 正文:

{
  "nodeCount": NODE_COUNT
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

使用 patch 方法,通过修改读取池中的读取池节点数来扩缩读取池。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT:读取池所在项目的名称。
  • NODE_COUNT:您希望读取池中包含的读取池节点数。选择介于 120 之间的任意数字。

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

控制台

如需连接到读取池,请完成以下步骤:

  1. 在 Trusted Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

    您将转到实例“概览”页。 点击进入新的读取池,查看包括其专用 IP 地址在内的详细信息。在连接到此实例部分中,复制并保存实例的连接名称connection name 的格式为 projectID:region:instanceID。稍后您将在启动 Cloud SQL Auth 代理时使用此 connection name
  2. 创建 Compute Engine 虚拟机
  3. 打开与 Compute Engine 虚拟机的两个 SSH 连接。后续步骤将使用这些连接来运行 Cloud SQL Auth 代理和数据库客户端。
  4. 安装客户端
  5. 安装 Cloud SQL Auth 代理
  6. 启动 Cloud SQL Auth 代理
  7. 连接到 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 响应:

后续步骤