本页面介绍如何对实例进行高可用性配置。
您可以在创建实例时对实例进行高可用性配置,也可以为现有实例启用高可用性。
如需详细了解高可用性,请参阅高可用性配置概览。
高可用性的旧版配置使用了failover replica
实例。 新配置不使用 failover replica
。
相反,它使用 Google 的区域永久性磁盘,该磁盘会在一个区域的两个可用区之间在块级别同步复制数据。如果您的现有 MySQL 实例使用的是旧版高可用性配置,则可以更新配置以使用当前版本。如需了解与旧版高可用性配置相关的其他过程,请参阅旧版高可用性配置。
创建采用高可用性配置的新实例
在创建实例并为其采用高可用性配置时,Cloud SQL 会将其创建为区域实例。
要创建采用高可用性配置的实例,请按照如下所述操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 选择创建实例。
- 选择数据库引擎。
- 在选择区域和可用区可用性部分,选择多个可用区(高可用性)。
- 展开指定可用区。
- 选择主要和次要可用区。在创建或修改实例期间使用次要可用区时,适用以下条件:
- 主要可用区默认为
Any
,次要可用区默认为Any (different from primary)
。
如果同时指定主要可用区和次要可用区,则它们必须是不同的可用区。
- 主要可用区默认为
- 点击保存。
更新实例时,您会返回到主实例的实例页面。
gcloud
- 创建区域实例:
如需查看可用参数的完整列表,请参阅 gcloud sql instances create 参考页面。gcloud sql instances create REGIONAL_INSTANCE_NAME \ --availability-type=REGIONAL \ --database-version=DATABASE_VERSION \ --tier=MACHINE_TYPE \ --enable-bin-log
-
您可以使用
--zone
和--secondary-zone
参数指定主要可用区和次要可用区。在创建或修改实例期间使用次要可用区时,适用以下限制:- 可用区必须是有效的可用区。
- 如果指定了次要可用区,则必须指定主要可用区。
- 如果同时指定主要可用区和次要可用区,则它们必须是不同的可用区。
- 如果指定了主要可用区和次要可用区,则它们必须属于同一区域。
- 配置根用户:
gcloud sql users set-password root --host=% \ --instance=PRIMARY_INSTANCE_NAME \ --password=PASSWORD
Terraform
如需创建高可用性实例,请使用 Terraform 资源。
应用更改
如需在 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
如需查看该请求的完整参数列表,请参阅 instances:insert 页面。创建区域实例。
-
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 实例完成初始化后,更新实例上的 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 页面。创建区域实例。
-
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 实例完成初始化后,更新实例上的 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) 和一个空响应。
要详细了解如何创建实例,请参阅创建实例。
对现有实例进行高可用性配置
您可以使用 Google Cloud 控制台、gcloud CLI 或 API 配置 Cloud SQL 实例来实现高可用性。
控制台
如需配置实例以实现高可用性,请执行以下操作:
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击修改。
- 在选择区域和可用区可用性部分,选择多个可用区(高可用性)。
- 展开指定可用区。
- 选择主要和次要可用区。如果您在创建或编辑实例时使用次要可用区,则以下情况将会适用:
- 主要可用区默认为
Any
,次要可用区默认为Any (different from primary)
。
如果您同时指定主要可用区和次要可用区,则它们必须是不同的可用区。
- 主要可用区默认为
- 点击保存。
gcloud
如需将实例配置为区域级高可用性实例,请使用 gcloud sql instances patch
命令:
gcloud sql instances patch INSTANCE_NAME \ --availability-type REGIONAL \ --enable-bin-log \ --backup-start-time=HH:MM
进行以下替换:
- INSTANCE_NAME:您为实现高可用性而配置的 Cloud SQL 实例的名称
- HH:MM:时间(以小时和分钟为单位)
REST v1
如需将实例配置为区域级高可用性实例,请执行以下操作:
检查实例,查看是否已启用自动备份和二进制日志。这些是高可用性实例所必需的。
在使用任何请求数据之前,请先进行以下替换:
- 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": "MYSQL_8_0" }
输出包含类似于以下内容的部分:
"backupConfiguration": { "kind": "sql#backupConfiguration", "startTime": "12:00", "enabled": true, "binaryLogEnabled": true }
如果
enabled
或binaryLogEnabled
为false
,则使用instances:patch
方法同时启用这两项。要启用备份,请将enabled
设置为true
,并将startTime
设置为备份时段的开始时间。要启用二进制日志记录,请将binaryLogEnabled
设置为true
。在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "binaryLogEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
将实例配置为区域级高可用性实例:
在使用任何请求数据之前,请先进行以下替换:
- 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 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "MYSQL_8_0" }
输出包含类似于以下内容的部分:
"backupConfiguration": { "kind": "sql#backupConfiguration", "startTime": "12:00", "enabled": true, "binaryLogEnabled": true }
如果
enabled
或binaryLogEnabled
为false
,则使用instances:patch
方法同时启用这两项。要启用备份,请将enabled
设置为true
,并将startTime
设置为备份时段的开始时间。要启用二进制日志记录,请将binaryLogEnabled
设置为true
。在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "binaryLogEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
将实例配置为区域级高可用性实例:
在使用任何请求数据之前,请先进行以下替换:
- 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) 和一个空响应。
启动故障切换
测试故障切换是一项可选操作,但建议您执行此项测试,这样便于了解应用在发生故障切换时的响应情况。
如需详细了解故障切换,请参阅故障切换概览。
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击故障切换。
- 在手动触发故障切换对话框中,在文本字段输入实例的 ID,然后点击触发故障切换。
gcloud
启动故障切换:
gcloud sql instances failover PRIMARY_INSTANCE_NAME
REST v1
- 描述相应主实例以获取
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": "MYSQL_8_0" }
- 启动故障切换:
在使用任何请求数据之前,请先进行以下替换:
- 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
- 描述相应主实例以获取
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": "MYSQL_8_0" }
- 启动故障切换:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
实例即会执行故障切换,且暂时无法提供数据。
验证实例的高可用性配置
如需验证实例是否具有高可用性并查看在其中运行的可用区,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 确认配置部分中显示了以下高可用性设置:
- 可用性高(区域级)
- 位于:显示实例的当前主要可用区。
gcloud
gcloud sql instances describe INSTANCE_NAME
输出指示 availabilityType
为 REGIONAL
。
gceZone
和 secondaryGceZone
字段显示实例的当前主要可用区和次要可用区。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- 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": "MYSQL_8_0" }
输出指示 availabilityType
为 REGIONAL
。
gceZone
和 secondaryGceZone
字段显示实例的当前主要可用区和次要可用区。
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- 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": "MYSQL_8_0" }
输出指示 availabilityType
为 REGIONAL
。
gceZone
和 secondaryGceZone
字段显示实例的当前主要可用区和次要可用区。
更改高可用性实例的可用区
在重新配置实例时,更改现有高可用性实例的一个或两个可用区会导致几分钟的停机时间。如需查看高可用性实例在其中运行的当前主要可用区和次要可用区,请参阅验证实例的高可用性配置。
如需更改高可用性实例的可用区,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击修改。
- 在选择区域和可用区的可用性部分中,展开指定可用区,然后选择新可用区。主要可用区默认为
Any
,次要可用区默认为Any (different from primary)
。需要遵循以下限制:- 您只能指定主要可用区或同时指定主要可用区和次要可用区。
- 如果同时指定主要和次要可用区,则它们必须是不同的可用区。
- 点击保存。
更新实例时,您会返回到主实例的实例页面。
gcloud
更改实例在其中运行的可用区:
gcloud sql instances patch INSTANCE_NAME \ --zone=PRIMARY_ZONE --secondary-zone=SECONDARY_ZONE
--secondary-zone
参数是可选的。如果省略,Cloud SQL 将选择与主要可用区不同的可用可用区。
需要遵循以下限制:
- 该可用区必须是与 Cloud SQL 实例属于同一区域的有效可用区。
- 如果指定了次要可用区,则该可用区必须与主要可用区不同。
REST v1
更改区域级实例的可用区:
在使用任何请求数据之前,请先进行以下替换:
- 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
更改区域级实例的可用区:
在使用任何请求数据之前,请先进行以下替换:
- 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 实例停用高可用性。
控制台
如需为实例停用高可用性,请执行以下操作:
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击修改。
- 打开自动备份。
- 在可用性部分中,点击单个可用区。
- 点击保存。此编辑操作需要您重启实例。
- 出现对话框时,点击保存并重启。
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 和内存。 |
后续步骤
- 详细了解高可用性配置的工作原理。
- 通过重启实例测试应用在连接断开时的响应情况。
- 详细了解如何管理数据库连接。
- 详细了解 Google Cloud Observability。
- 详细了解旧版高可用性配置。
- 为实例创建读取副本。