启用和停用高可用性

本页面介绍如何对实例进行高可用性配置。

您可以在创建实例时对实例进行高可用性配置,也可以为现有实例启用高可用性。

如需详细了解高可用性,请参阅高可用性配置概览

创建采用高可用性配置的新实例

在创建实例并为其采用高可用性配置时,Cloud SQL 会将其创建为区域实例。

要创建采用高可用性配置的实例,请按照如下所述操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择创建实例
  3. 选择数据库引擎。
  4. 选择区域和可用区可用性部分,选择多个可用区(高可用性)
  5. 展开指定可用区
  6. 选择主要和次要可用区。在创建或修改实例期间使用次要可用区时,适用以下条件:
    • 主要可用区默认为 Any,次要可用区默认为 Any (different from primary)
    • 如果同时指定主要可用区和次要可用区,则它们必须是不同的可用区。

  7. 点击保存

    更新实例时,您会返回到主实例的实例页面。

gcloud

  1. 创建区域性实例:
    gcloud sql instances create REGIONAL_INSTANCE_NAME \
    --availability-type=REGIONAL \
    --database-version=SQLSERVER_2017_STANDARD \
    --cpu=NUMBER_CPUS \
    --memory=MEMORY_SIZE
  2. 配置根用户:
    gcloud sql users set-password root no-host \
    --instance=REGIONAL_INSTANCE_NAME \
    --password=PASSWORD
如需查看可用参数的完整列表,请参阅 gcloud sql instances create 参考页面。

Terraform

如需创建高可用性实例,请使用 Terraform 资源

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance-ha"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled    = true
      start_time = "20:55"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

应用更改

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

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google 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. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

删除更改

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

  1. 如需停用删除防护,请在 Terraform 配置文件中将 deletion_protection 参数设置为 false
    deletion_protection =  "false"
  2. 运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:
    terraform apply
  1. 运行以下命令并在提示符处输入 yes,以移除之前使用 Terraform 配置应用的资源:

    terraform destroy

REST v1

如需查看该请求的完整参数列表,请参阅 instances:insert 页面。

创建区域实例。

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

    • project-id:项目 ID
    • instance-name:实例名称
    • database-version:数据库版本枚举字符串
    • region:GCP 区域
    • machine-type:机器类型

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

    请求 JSON 正文:

    {
      "name": "instance-name",
      "region": "region",
      "databaseVersion": "database-version",
       "settings": {
         "tier": "machine-type",
         "backupConfiguration": {
             "enabled": true
          },
          "availabilityType": "REGIONAL"
       }
    }
    

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

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

  2. 实例完成初始化后,更新实例上的 root 密码:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • password:新的根用户密码

    HTTP 方法和网址:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=%25&name=sqlserver'

    请求 JSON 正文:

    {
       "name": "sqlserver",
       "host": "nohost",
       "password": "password"}
    

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

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

REST v1beta4

如需查看该请求的完整参数列表,请参阅 instances:insert 页面。

创建区域实例。

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

    • project-id:项目 ID
    • instance-name:实例名称
    • database-version:数据库版本枚举字符串
    • region:GCP 区域
    • machine-type:机器类型

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

    请求 JSON 正文:

    {
      "name": "instance-name",
      "region": "region",
      "databaseVersion": "database-version",
       "settings": {
         "tier": "machine-type",
         "backupConfiguration": {
             "enabled": true
          },
          "availabilityType": "REGIONAL"
       }
    }
    

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

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

  2. 实例完成初始化后,更新实例上的 root 密码:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • password:新的根用户密码

    HTTP 方法和网址:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=sqlserver'

    请求 JSON 正文:

    {
       "name": "sqlserver",
       "host": "nohost",
       "password": "password"}
    

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

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

要详细了解如何创建实例,请参阅创建实例

对现有实例进行高可用性配置

您可以使用 Google Cloud 控制台、gcloud CLI 或 API 配置 Cloud SQL 实例来实现高可用性。

控制台

如需配置实例以实现高可用性,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 自动备份和高可用性配置选项部分,选择高可用性(区域级)。另外,建议您选中自动备份
  5. 点击保存

gcloud

如需将实例配置为区域级高可用性实例,请使用 gcloud sql instances patch 命令:

gcloud sql instances patch INSTANCE_NAME \
--availability-type REGIONAL

INSTANCE_NAME 替换为您要配置高可用性的 Cloud SQL 实例的名称。

REST v1

如需将实例配置为区域级高可用性实例,请执行以下操作:

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:您为实现高可用性而配置的实例的名称

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

请求 JSON 正文:

{
  "settings": {"availabilityType": "REGIONAL" }
}

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

您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

REST v1beta4

如需将实例配置为区域级高可用性实例,请执行以下操作:

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:您为实现高可用性而配置的实例的名称

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

请求 JSON 正文:

{
  "settings": {"availabilityType": "REGIONAL" }
}

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

您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

启动故障切换

测试故障切换是一项可选操作,但建议您执行此项测试,这样便于了解应用在发生故障切换时的响应情况。

如需详细了解故障切换,请参阅故障切换概览

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击故障切换
  4. 手动触发故障切换对话框中,在文本字段输入实例的 ID,然后点击触发故障切换

gcloud

启动故障切换:

gcloud sql instances failover PRIMARY_INSTANCE_NAME

REST v1

  1. 描述相应主实例以获取 settingsVersion 字段的值。

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

    • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
    • INSTANCE_NAME:您为实现高可用性而配置的实例的名称

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

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

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "SQLSERVER_2019_STANDARD"
    }
    
  2. 启动故障切换:

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

    • project-id:项目 ID
    • instance-name:实例名称
    • settings-version:来自 instanceInfo 的 settingsVersion

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name/failover

    请求 JSON 正文:

    {
      "failoverContext":
         {
            "settingsVersion":"settings-version"
         }
    }
    

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

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

REST v1beta4

  1. 描述相应主实例以获取 settingsVersion 字段的值。

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

    • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
    • INSTANCE_NAME:您为实现高可用性而配置的实例的名称

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

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

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "SQLSERVER_2019_STANDARD"
    }
    
  2. 启动故障切换:

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

    • project-id:项目 ID
    • instance-name:实例名称
    • settings-version:来自 instanceInfo 的 settingsVersion

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name/failover

    请求 JSON 正文:

    {
      "failoverContext":
         {
            "settingsVersion":"settings-version"
         }
    }
    

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

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

实例即会执行故障切换,且暂时无法提供数据。

验证实例的高可用性配置

如需验证实例是否具有高可用性并查看在其中运行的可用区,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 确认配置部分中显示了以下高可用性设置:
    • 可用性高(区域级)
    • 位于:显示实例的当前主要可用区。

gcloud

gcloud sql instances describe INSTANCE_NAME

输出指示 availabilityTypeREGIONALgceZonesecondaryGceZone 字段显示实例的当前主要可用区和次要可用区。

REST v1

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "SQLSERVER_2019_STANDARD"
}

输出指示 availabilityTypeREGIONALgceZonesecondaryGceZone 字段显示实例的当前主要可用区和次要可用区。

REST v1beta4

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "SQLSERVER_2017_STANDARD",
}

输出指示 availabilityTypeREGIONALgceZonesecondaryGceZone 字段显示实例的当前主要可用区和次要可用区。

更改高可用性实例的可用区

在重新配置实例时,更改现有高可用性实例的一个或两个可用区会导致几分钟的停机时间。如需查看高可用性实例在其中运行的当前主要可用区和次要可用区,请参阅验证实例的高可用性配置

如需更改高可用性实例的可用区,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 选择区域和可用区的可用性部分中,展开指定可用区,然后选择新可用区。主要可用区默认为 Any,次要可用区默认为 Any (different from primary)。需要遵循以下限制:
    • 您只能指定主要可用区或同时指定主要可用区和次要可用区。
    • 如果同时指定主要和次要可用区,则它们必须是不同的可用区。
  5. 点击保存

    更新实例时,您会返回到主实例的实例页面。

gcloud

更改实例在其中运行的可用区:

gcloud sql instances patch INSTANCE_NAME \
  --zone=PRIMARY_ZONE --secondary-zone=SECONDARY_ZONE

--secondary-zone 参数是可选的。如果省略,Cloud SQL 将选择与主要可用区不同的可用可用区。

需要遵循以下限制:

  • 该可用区必须是与 Cloud SQL 实例属于同一区域的有效可用区。
  • 如果指定了次要可用区,则该可用区必须与主要可用区不同。

REST v1

  1. 更改区域级实例的可用区:

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

    • PROJECT_ID:项目 ID
    • INSTANCE_NAME:实例名称
    • PRIMARY_ZONE:主要可用区
    • SECONDARY_ZONE:次要可用区

    HTTP 方法和网址:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    请求 JSON 正文:

    {
    "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}}
    }
    

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

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

    secondaryZone 参数是可选的。如果省略,Cloud SQL 将选择与主要可用区不同的可用可用区。

    需要遵循以下限制:

    • 可用区必须是有效的可用区。
    • 您选择的任何可用区都必须与 Cloud SQL 实例属于同一区域。

REST v1beta4

  1. 更改区域级实例的可用区:

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

    • PROJECT_ID:项目 ID
    • INSTANCE_NAME:实例名称
    • PRIMARY_ZONE:主要可用区
    • SECONDARY_ZONE:次要可用区

    HTTP 方法和网址:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    请求 JSON 正文:

    {
    "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}}
    }
    

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

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

    secondaryZone 参数是可选的。如果省略,Cloud SQL 将选择与主要可用区不同的可用可用区。

    需要遵循以下限制:

    • 可用区必须是有效的可用区。
    • 您选择的任何可用区都必须与 Cloud SQL 实例属于同一区域。

为实例停用高可用性

您可以使用 Google Cloud 控制台、gcloud CLI 或 API 为 Cloud SQL 实例停用高可用性。

控制台

如需为实例停用高可用性,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 打开自动备份
  5. 可用性部分中,点击单个可用区
  6. 点击保存。此编辑操作需要您重启实例。
  7. 出现对话框时,点击保存并重启

gcloud

如需为实例停用高可用性,请使用 gcloud sql instances patch 命令:

gcloud sql instances patch INSTANCE_NAME \
--availability-type ZONAL

INSTANCE_NAME 替换为要停用高可用性的 Cloud SQL 实例的名称。

REST v1

若要将实例的可用性类型更改为 ZONAL,请使用 instances:patch 方法。此方法会停用实例的高可用性。

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:要停用高可用性的实例的名称

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

请求 JSON 正文:

{
  "settings": {"availabilityType": "ZONAL" }
}

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

您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

REST v1beta4

若要将实例的可用性类型更改为 ZONAL,请使用 instances:patch 方法。此方法会停用实例的高可用性。

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:要停用高可用性的实例的名称

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

请求 JSON 正文:

{
  "settings": {"availabilityType": "ZONAL" }
}

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

您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

问题排查

问题 问题排查
找不到手动故障切换的指标。 只有自动故障切换会纳入指标。
Cloud SQL 实例资源(CPU 和 RAM)使用率接近 100%,导致高可用性实例发生故障。 实例机器大小对于负载而言过小。

对实例进行修改以升级为更大的机器,从而获得更多 CPU 和内存。

后续步骤