更改双区域仲裁

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

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

检查双区域仲裁状态

您可以通过以下方式检查双区域仲裁的状态:

在数据库概览页面上

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

    转到“实例”页面

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

  3. 点击数据库的名称。

  4. 在“Overview”(概览)下,查找 Quorum 行,该行显示了双区域 仲裁状态:

    • 如果两个区域均达成仲裁,状态会显示为双区域

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

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

创建双区域配置后,您可以在实例级系统数据分析信息中心内查看双区域共识团可用性指标。

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

使用 Monitoring REST API 或 gcloud CLI

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

监控 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.%"
}

如果您没有看到类似的回答,则表示您所在的地区可能健康状况不佳。 您可能需要 将双区域仲裁从双区域更改为单区域

gcloud CLI

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

    此 bash 脚本会检查单个区域的区域健康状况。如果 那么脚本会运行 gcloud spanner databases change-quorum 命令手动将双区域仲裁从双区域故障切换到 单个区域中。

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

    • PROJECT:您的项目 ID。
    • INSTANCE:您的实例 ID。
    • DATABASE:您的数据库 ID。
    • SERVING_LOCATION:双区域 您想要检查的内容。
  3. 在您选择的开发环境中运行该脚本。有关 请参阅 安装 Google Cloud CLI 并设置 Spanner API

  4. 如果您的区域健康状况不佳并且存在,则手动故障恢复 是故障切换。

将双区域 Quorum 从双区域更改为单区域(故障转移)

在出现区域级中断或网络分区时手动进行故障切换 问题:

Google Cloud 控制台

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

    转到“实例”页面

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

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

  4. 找到双区域仲裁可用性指标。

  5. 如果双区域仲裁可用性指标显示中断 在区域中,点击 “激活 Cloud Shell”按钮图标 在 Google Cloud 控制台顶部激活 Cloud Shell

    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 是健康区域。选择错误的区域进行故障切换会导致数据库 unavailability,这在区域恢复在线之前不可恢复。

可选标志:

  • --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

后续步骤