启用和停用高可用性

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

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

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

高可用性的旧版配置使用了 failover replica 实例。 新配置不使用 failover replica。 相反,它使用 Google 的区域永久性磁盘,该磁盘会在一个区域的两个可用区之间在块级别同步复制数据。如果您的现有 MySQL 实例使用的是旧版高可用性配置,则可以更新配置以使用当前版本。如需了解与旧版高可用性配置相关的其他过程,请参阅旧版高可用性配置

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

在创建实例并为其采用高可用性配置时,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=DATABASE_VERSION \
    --tier=MACHINE_TYPE \
    --enable-bin-log
    
    如需查看可用参数的完整列表,请参阅 gcloud sql instances create 参考页面。
  2. 您可以使用 --zone--secondary-zone 参数指定主要可用区和次要可用区。在创建或修改实例期间使用次要可用区时,适用以下限制:
    • 可用区必须是有效的可用区。
    • 如果指定了次要可用区,则必须指定主要可用区。
    • 如果同时指定主要可用区和次要可用区,则它们必须是不同的可用区。
    • 如果指定了主要可用区和次要可用区,则它们必须属于同一区域。
  3. 配置根用户:
    gcloud sql users set-password root --host=% \
    --instance=PRIMARY_INSTANCE_NAME \
    --password=PASSWORD
    

Terraform

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

resource "google_sql_database_instance" "mysql_instance_ha" {
  name             = "mysql-instance-ha"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier              = "db-f1-micro"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled            = true
      binary_log_enabled = true
      start_time         = "20:55"
    }
  }
  deletion_protection = false # set to true to prevent destruction of the resource
}

应用更改

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

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的 Google Cloud 项目:
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. 创建一个目录,并在该目录中打开一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf
    mkdir DIRECTORY && cd DIRECTORY && nano main.tf
    
  4. 将示例复制到 main.tf
  5. 查看和修改要应用到您的环境的示例参数。
  6. 依次按 Ctrl-xy 保存更改。
  7. 初始化 Terraform:
    terraform init
  8. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

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

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

  10. 打开您的 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": {
             "binaryLogEnabled": true,
             "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?name=root&host=%25'

    请求 JSON 正文:

    {
       "name": "root",
       "host": "%",
       "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": {
             "binaryLogEnabled": true,
             "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?name=root&host=%25'

    请求 JSON 正文:

    {
       "name": "root",
       "host": "%",
       "password": "password"}
    

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

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

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

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

在重新配置实例时,为现有实例配置高可用性会导致几分钟的停机时间。

要为现有实例配置高可用性,请按如下所述操作:

控制台

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

    转到“Cloud SQL 实例”

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

  7. 点击保存

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

gcloud

将实例更新为区域实例:

gcloud sql instances patch INSTANCE_NAME \
--availability-type REGIONAL \
--enable-bin-log \
--backup-start-time=HH:MM

如需了解参考信息,请参阅 gcloud sql instances patch

REST v1

  1. 检查主实例,查看是否已启用自动备份和二进制日志。这些是高可用性实例所必需的。

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

    • 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": "MYSQL_8_0"
    }
    

    输出包含类似于以下内容的部分:

      "backupConfiguration": {
        "kind": "sql#backupConfiguration",
        "startTime": "12:00",
        "enabled": true,
        "binaryLogEnabled": true
        }
      
  2. 如果 enabledbinaryLogEnabledfalse,请使用 instances:patch 方法同时启用这两项。要启用备份,请将 enabled 设置为 true,并将 startTime 设置为备份时段的开始时间。要启用二进制日志记录,请将 binaryLogEnabled 设置为 true

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

    • project-id:项目 ID
    • instance-id:实例 ID(主实例或副本实例)
    • start-time:采用“HH:MM”格式表示的时间

    HTTP 方法和网址:

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

    请求 JSON 正文:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "start-time",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

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

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

  3. 将实例更新为区域实例:

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

    • project-id:项目 ID
    • instance-name:实例名称

    HTTP 方法和网址:

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

    请求 JSON 正文:

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

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

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

REST v1beta4

  1. 检查主实例,查看是否已启用自动备份和二进制日志。这些是高可用性实例所必需的。

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

    • 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": "MYSQL_8_0"
    }
    

    输出包含类似于以下内容的部分:

      "backupConfiguration": {
        "kind": "sql#backupConfiguration",
        "startTime": "12:00",
        "enabled": true,
        "binaryLogEnabled": true
        }
      
  2. 如果 enabledbinaryLogEnabledfalse,请使用 instances:patch 方法同时启用这两项。要启用备份,请将 enabled 设置为 true,并将 startTime 设置为备份时段的开始时间。要启用二进制日志记录,请将 binaryLogEnabled 设置为 true

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

    • project-id:项目 ID
    • instance-id:实例 ID(主实例或副本实例)
    • start-time:采用“HH:MM”格式表示的时间

    HTTP 方法和网址:

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

    请求 JSON 正文:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "start-time",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

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

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

  3. 将实例更新为区域实例:

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

    • project-id:项目 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:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

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

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

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "MYSQL_8_0"
    }
    
  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:项目 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": "MYSQL_8_0"
    }
    
  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
输出指示 availabilityTypeREGIONAL

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": "MYSQL_8_0"
}

输出指示 availabilityTypeREGIONAL

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": "MYSQL_8_0"
}

输出指示 availabilityTypeREGIONAL

为实例停用高可用性

执行此过程之前,请确保该实例当前没有运行操作。

要停用高可用性,请执行以下操作:

控制台

  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

REST v1

以下请求使用 instances:patch 方法将实例的可用性类型更改为可用区。

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

  • project-id:项目 ID
  • instance-name:实例名称

HTTP 方法和网址:

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

请求 JSON 正文:

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

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

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

REST v1beta4

以下请求使用 instances:patch 方法将实例的可用性类型更改为可用区。

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

  • project-id:项目 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 和内存。

后续步骤