更改双区域仲裁

本页介绍了如何检查 Spanner 双区域共识团的运行状况,以及如何在服务中断时手动更改共识团。

如需详细了解双区域,请参阅 Spanner 双区域实例配置

检查双区域仲裁状态

您可以通过以下方式检查双区域共识状态:

在“数据库概览”页面上

  1. 前往 Google Cloud 控制台中的 Spanner 实例页面。

    转到“实例”页面

  2. 点击采用双区域配置的实例的名称。

  3. 点击数据库的名称。

  4. 在“概览”下,找到共识主机数行,其中会显示实例的双区域共识主机数状态:

    • 如果两个区域都达到了共识机制要求的节点数,状态会显示为双区域

    • 如果已执行手动或 Google 管理的故障切换,您会看到投放区域的名称(例如 asia-south1)。

使用系统数据分析信息中心

创建双区域配置后,您可以在“实例级系统数据分析”信息中心内查看双区域共识主健康时间轴指标。

如需了解详情,请参阅查看“系统数据分析”信息中心

使用 Monitoring REST API 或 gcloud CLI

您可以使用 Monitoring REST API 或 gcloud CLI 检查双区域共识正文的运行状况。

Monitoring REST API

使用 Monitoring projects.timeSeries.list API 查询双区域仲裁健康状况时间轴,以检查某个区域在给定时间是否处于健康状态。

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

  • PROJECT_ID:您的项目 ID。
  • DUAL_REGION_LOCATION:您要检查的双区域中的区域的位置。
  • START_TIME:查询的开始时间。我们建议使用当前时间前 5 分钟。
  • END_TIME:查询的结束时间。我们建议使用当前时间。

HTTP 方法和网址:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries

请求 JSON 正文:

{
  "name": "PROJECT_ID",
  "aggregation.alignmentPeriod": "60s",
  "aggregation.crossSeriesReducer": "REDUCE_FRACTION_TRUE",
  "aggregation.groupByFields": "resource.labels.location",
  "aggregation.perSeriesAligner": "ALIGN_NEXT_OLDER",
  "filter": "metric.labels.quorum_availability = "Healthy" AND metric.type = "spanner.googleapis.com/instance/dual_region_quorum_availability" AND resource.labels.location = "DUAL_REGION_LOCATION"",
  "interval.startTime": "START_TIME",
  "interval.endTime": "END_TIME"
}

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

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

{
  "timeSeries": [
    {
      "metric": {
        "type": "spanner.googleapis.com/instance/dual_region_quorum_availability"
      },
      "resource": {
        "type": "spanner_instance",
        "labels": {
          "project_id": "spanner-project",
          "location": "australia-southeast1"
        }
      },
      "metricKind": "GAUGE",
      "valueType": "DOUBLE",
      "points": [
        {
          "interval": {
            "startTime": "2024-07-11T05:41:23Z",
            "endTime": "2024-07-11T05:41:23Z"
          },
          "value": {
            "doubleValue": 1
          }
        }
      ]
    }
  ],
  "unit": "10^2.%"
}

如果您没有看到类似的响应,则表示您的区域可能不健康,您可能需要将双区域 Quorum 从双区域更改为单区域

gcloud CLI

  1. 下载 dual-region-quorum-health-check-script.sh 文件。

    此 Bash 脚本用于检查单个区域的区域运行状况。如果区域运行状况良好,脚本会运行 gcloud spanner databases change-quorum 命令,以手动将双区域 Quorum 从双区域切换为单区域。

  2. 替换脚本中的以下变量:

    • PROJECT:您的项目 ID。
    • INSTANCE:您的实例 ID。
    • DATABASE:您的数据库 ID。
    • SERVING_LOCATION:您要检查的双区域中的区域的位置。
  3. 在您选择的开发环境中运行脚本。如需了解详情,请参阅安装 Google Cloud CLI 并设置 Spanner API

  4. 如果您的区域处于不健康状态并发生了故障切换,请手动故障回退

将双区域仲裁从双区域更改为单区域(故障切换)

如需在发生地区级服务中断或网络分区问题时手动故障切换,请执行以下操作:

Google Cloud 控制台

  1. 前往 Google Cloud 控制台中的 Spanner 实例页面。

    转到“实例”页面

  2. 点击采用双区域配置的实例的名称。

  3. 点击导航菜单中的系统数据分析

  4. 找到双区域仲裁健康状况时间轴指标。

  5. 如果双区域仲裁健康状况时间轴显示某个区域出现中断,请点击更改区域仲裁

    Cloud Shell 随即打开。

  6. 如需将双区域共识机制从双区域更改为单区域,请输入 gcloud CLI 标签页中的以下命令:gcloud spanner databases change-quorum。如需了解详细说明,请参阅 gcloud 标签页。

gcloud CLI

使用 gcloud spanner databases change-quorum 命令将双区域共识机制从双区域更改为单区域。

gcloud spanner databases change-quorum
    DATABASE_ID --instance=INSTANCE_ID
    --single-region --serving-location=SERVING_LOCATION
    [--etag=ETAG]

替换以下内容:

  • DATABASE_ID:数据库的永久标识符。

  • INSTANCE_ID:实例的永久性标识符。

  • SERVING_LOCATION:您要进行故障切换到的区域实例配置。例如,如果 asia-south1(孟买)处于不健康状态,并且您希望故障切换到 asia-south2(德里),请输入 asia-south2。确保 SERVING_LOCATION 是健康区域。如果选择错误的区域进行故障切换,则会导致数据库不可用,并且在该区域重新上线之前无法恢复。

可选标志:

  • --etag=ETAGETAG 参数可用于重放攻击防范。

如需检查共识机制更改操作的状态,请运行 gcloud spanner databases describe 命令。quorumInfo 字段提供有关操作的信息。

gcloud spanner databases describe DATABASE_ID
    --instance=INSTANCE_ID

将双区域仲裁从单区域更改为双区域(故障回退)

如需在中断的区域恢复正常或网络分区问题得到解决后手动故障恢复,请执行以下操作:

Google Cloud 控制台

  1. 前往 Google Cloud 控制台中的 Spanner 实例页面。

    转到“实例”页面

  2. 点击采用双区域配置的实例的名称。

  3. 点击导航菜单中的系统数据分析

  4. 找到双区域仲裁健康状况时间轴指标。

  5. 在双区域仲裁健康状况时间轴上,点击更改区域仲裁

    Cloud Shell 会打开。

  6. 如需将双区域共识机制从双区域更改为单区域,请输入 gcloud CLI 标签页中的以下命令:gcloud spanner databases change-quorum。如需了解详细说明,请参阅 gcloud 标签页。

gcloud CLI

使用 gcloud spanner databases change-quorum 命令将双区域共识机制从单区域共识机制更改为双区域共识机制。

gcloud spanner databases change-quorum
    DATABASE_ID --instance=INSTANCE_ID
    --dual-region
    [--etag=ETAG]

替换以下内容:

  • DATABASE_ID:数据库的永久标识符。

  • INSTANCE_ID:实例的永久性标识符。

可选标志:

  • --etag=ETAGETAG 参数可用于乐观并发控制。

如需检查共识机制更改操作的状态,请运行 gcloud spanner databases describe 命令。quorumInfo 字段提供有关操作的信息。

gcloud spanner databases describe DATABASE_ID
    --instance=INSTANCE_ID

后续步骤