使用進階災難復原 (DR) 功能

本頁說明如何使用進階災害復原 (DR)。進階 DR 提供兩項主要功能:

  • 備用資源容錯移轉功能可讓您在區域發生故障時,立即將主要執行個體容錯移轉至災難復原備用資源。
  • 切換可讓您反轉主要執行個體和 DR 備用資源的角色,不會遺失任何資料。您可以使用切換功能,在副本容錯移轉後將部署作業還原至原始部署狀態,也可以使用切換功能測試 DR。

進階 DR 僅適用於 Cloud SQL Enterprise Plus 版本執行個體。

事前準備

如果您打算使用 Google Cloud SDK,則必須使用 502.0.0 以上版本。如要查看 Google Cloud SDK 版本,請執行 gcloud --version。如要更新 Google Cloud SDK,請執行 gcloud components update

如要安裝 Google Cloud SDK,請參閱「安裝 gcloud CLI」。

指派 DR 備用資源

如要執行進階 DR,您必須先指定跨區域 DR 副本。

主要執行個體需求條件

主要執行個體必須是 Cloud SQL Enterprise Plus 版本執行個體,且有指定的 DR 備用資源。

您必須在主要執行個體上啟用時間點復原 (PITR) 功能。如要啟用 PITR,請參閱「使用時間點復原 (PITR)」。

如果您要使用 DNS 寫入端點建立 Cloud SQL 執行個體,在叫用切換或備用資源容錯移轉作業前,主要執行個體必須與指定的 DR 備用資源具有相同的 SSL 設定。舉例來說,如果您將 DR 副本設為強制執行 SSL 加密,但主要執行個體允許未加密的連線,那麼在切換或容錯移轉作業完成後,用戶端就無法連線至新的主要執行個體。

DR 備用資源規定

指定的 DR 讀取副本必須符合下列規定:

  • 必須是 Cloud SQL Enterprise Plus 版執行個體
  • 必須與主要執行個體使用相同的資料庫版本,且執行 PostgreSQL 12 以上版本
  • 必須與主要執行個體位於不同的區域

  • 必須是直接唯讀副本,不能是連鎖副本

  • 如果設定的旗標要求副本的值大於或等於主要執行個體,則旗標必須設定為等於主要執行個體的值

  • 無法設定 cloudsql.logical_decoding 標記;無法設定任何邏輯時段或邏輯複寫

  • 必須將用於 PITR 的交易記錄儲存在 Cloud Storage 中

  • 無法做為外部備用資源

DR 備用資源建議

本節提供 DR 副本的相關建議。下列建議有助於避免部署作業發生效能問題:

  • 使用與主要執行個體相同的磁碟大小,或啟用自動擴充功能。
  • 使用一致的 HA 設定。如果要在主要執行個體上啟用 HA,請一併在 DR 副本上啟用 HA。
  • 使用一致的資料快取設定。如果在主要執行個體上啟用資料快取,請在 DR 副本上啟用資料快取。
  • 在任何切換或副本容錯移轉作業前後,為 DR 副本設定適當的資料庫標記。

建立副本,以滿足 DR 副本需求

如果主要執行個體尚未具備符合 DR 備用資源需求的跨區域唯讀備用資源,請建立一個。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出主要執行個體。
  3. 在「動作」欄中,按一下「更多動作」選單。
  4. 選取 [Create read replica] (建立唯讀備用資源)。
  5. 在「Instance ID」(執行個體 ID) 欄位中,輸入 DR 副本的名稱。
  6. 「資料庫版本」欄位會為您選取主要執行個體的相同主要版本。
  7. 在頁面的「選擇區域和可用區可用性」部分, 執行下列操作:
    • 選取與主要執行個體區域「不同」的區域。
    • (選用步驟) 為 DR 副本選取「多個可用區」
    • (選用步驟) 為 DR 副本選取「主要」和「次要區域」
  8. 在頁面的「Customize your instance」(自訂執行個體) 部分,您可以更新 DR 副本的設定。如要進一步瞭解各項設定,請參閱「關於執行個體設定」頁面。
  9. 在「機器形狀」中,選取與主要執行個體相同的機器類型。
  10. 在「旗標」部分,設定資料庫所需的任何旗標。
  11. 按一下「建立備用資源」

Cloud SQL 會建立主要執行個體的備份,並建立備用資源。您會回到主要執行個體的執行個體頁面。

gcloud

如要建立符合 DR 副本需求的副本,請執行下列指令:

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --region=REPLICA_REGION_NAME \
   --database-version=DATABASE_VERSION \
   --tier=MACHINE_TYPE \
   --availability-type=AVAILABILITY_TYPE
   --edition="ENTERPRISE_PLUS"

請替換下列變數:

  • REPLICA_NAME:DR 副本的名稱。
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • REPLICA_REGION_NAME:指定與主要執行個體區域不同的區域。
  • DATABASE_VERSION:指定與主要執行個體資料庫主要和次要版本相符的版本字串,例如 POSTGRES_16

    主要和 DR 副本的資料庫主要和次要版本必須相同。

  • MACHINE_TYPE:指定與主要執行個體相同的機型。 建議機器類型與主要執行個體的機器類型相符。
  • AVAILABILITY_TYPE:如果主要執行個體已設定高可用性,建議您指定 REGIONAL 來啟用高可用性。
  • EDITION:指定 ENTERPRISE_PLUS

Terraform

如要建立 DR 副本,請使用 Terraform 資源

resource "google_sql_database_instance" "original-primary" {
  name   = "postgres-original-primary-instance"
  region = "us-east1"
  # Specify a database version that supports Cloud SQL Enterprise Plus edition.
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"

  settings {
    # Specify a tier that supports Cloud SQL Enterprise Plus edition.
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      # You must enable automated backups and point-in-time-recovery (PITR).
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
}

resource "google_sql_database_instance" "dr-replica" {
  name = "postgres-dr-replica-instance"
  # DR replica must be in a different region than the region of the primary instance.
  region = "us-west2"
  # DR replica must be the same database version as the primary instance.
  database_version = "POSTGRES_12"
  instance_type    = "READ_REPLICA_INSTANCE"
  # Specify the primary instance as the master instance.
  master_instance_name = google_sql_database_instance.original-primary.name

  settings {
    # DR replica must be in the same tier as your primary instance and support Enterprise Plus edition.
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
  }

  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
}

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • DATABASE_VERSION: 版本字串,與主要執行個體的資料庫版本相符,例如 POSTGRES_16。主要和 DR 副本的資料庫版本必須相同。
  • REPLICA_NAME:您要建立的 DR 副本執行個體名稱。
  • REPLICA_REGION:DR 副本執行個體的區域。備用資源區域必須與主要執行個體的區域不同。
  • MACHINE_TYPE:指定與主要執行個體相同的機型。建議您選取與主要執行個體相同的機型。
  • AVAILABILITY_TYPE:如果主要執行個體已設定高可用性,建議您指定 REGIONAL 來啟用高可用性。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON 要求主體:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "DATABASE_VERSION",
  "name": "REPLICA_NAME",
  "region": "REPLICA_REGION",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "replicationType": "ASYNCHRONOUS",
  }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • DATABASE_VERSION: 版本字串,與主要執行個體的資料庫版本相符,例如 POSTGRES_16。主要和 DR 副本的資料庫版本必須相同。
  • REPLICA_NAME:您要建立的 DR 副本執行個體名稱。
  • REPLICA_REGION:DR 副本執行個體的區域。備用資源區域必須與主要執行個體的區域不同。
  • MACHINE_TYPE:指定與主要執行個體相同的機型。建議磁碟大小與主要執行個體的磁碟大小相符。
  • AVAILABILITY_TYPE:如果主要執行個體已設定高可用性,建議您指定 REGIONAL 來啟用高可用性。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

JSON 要求主體:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "DATABASE_VERSION",
  "name": "REPLICA_NAME",
  "region": "REPLICA_REGION",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "replicationType": "ASYNCHRONOUS",
  }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

為主要執行個體指派 DR 備用資源

下列程序說明如何將主要執行個體的其中一個跨區域副本指定為 DR 副本,以進行切換或副本容錯移轉。

控制台

如要為主要執行個體指定 DR 副本,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出並選取主要執行個體。系統隨即會顯示主要執行個體的「總覽」頁面。
  3. 在導覽選單中,按一下「副本」
  4. 在唯讀備用資源清單中,找出要指定為 DR 備用資源的跨區域唯讀備用資源。
  5. 如要將副本指定為 DR 副本,請按一下「動作」more_vert 按鈕,然後選取「Designate as DR replica」(指定為 DR 副本)
  6. 按一下「確認」。

gcloud

如要為主要執行個體指定 DR 副本,請使用下列指令:

gcloud sql instances patch PRIMARY_INSTANCE_NAME \
   --failover-dr-replica-name=REPLICA_NAME

請替換下列變數:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • REPLICA_NAME:DR 副本的名稱。

Terraform

如要為主要執行個體指定 DR 副本,請使用 Terraform 資源

data "google_project" "default" {
}

resource "google_sql_database_instance" "original-primary" {
  name             = "postgres-original-primary-instance"
  region           = "us-east1"
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"

  replication_cluster {
    # Designate the DR replica.
    # The format for setting the DR replica is `project-id:dr-replica-name`.
    failover_dr_replica_name = "${data.google_project.default.project_id}:postgres-dr-replica-instance"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

resource "google_sql_database_instance" "dr-replica" {
  name                 = "postgres-dr-replica-instance"
  region               = "us-west2"
  database_version     = "POSTGRES_12"
  instance_type        = "READ_REPLICA_INSTANCE"
  master_instance_name = google_sql_database_instance.original-primary.name

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
  }

  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • REPLICA_NAME:DR 副本的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "replicationCluster": {
     "failoverDrReplicaName": "REPLICA_NAME"
   }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • REPLICA_NAME:DR 副本的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "replicationCluster": {
     "failoverDrReplicaName": "REPLICA_NAME"
   }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

變更 DR 備用資源指派

如果副本符合規定,您可以將其他副本指定為 DR 副本。舊的 DR 備用資源會失去 DR 備用資源的指定。

控制台

如要變更主要執行個體的 DR 副本,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出並選取主要執行個體。系統隨即會顯示主要執行個體的「總覽」頁面。
  3. 在導覽選單中,按一下「副本」
  4. 在唯讀備用資源清單中,找出要指定為新 DR 備用資源的跨區域唯讀備用資源。
  5. 如要將副本指定為 DR 副本,請按一下「動作」more_vert 按鈕,然後選取「Designate as DR replica」(指定為 DR 副本)

gcloud

如要變更 DR 副本,請再次執行指定指令,並指定其他 DR 副本。

REST

如要變更 DR 副本,請再次提出指定 API 要求,並指定其他 DR 副本。

查看 DR 備用資源指派情形

您可以使用 gcloud CLI 或 Cloud SQL Admin API,查看指派給主要執行個體的 DR 副本。您也可以檢查副本是否為指定的 DR 副本。

如要瞭解哪個 DR 副本指定給主要執行個體,請按照下列程序操作。

控制台

如要找出主要執行個體的指定 DR 備用資源,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出並選取主要執行個體。系統隨即會顯示主要執行個體的「總覽」頁面。
  3. 在導覽選單中,按一下「副本」
  4. 在唯讀副本清單中,確認指定 DR 副本的「類型」欄顯示 PostgreSQL disaster recovery replica

gcloud

如要找出主要執行個體的指定 DR 副本,請使用下列指令:

gcloud sql instances describe PRIMARY_INSTANCE_NAME

請替換下列變數:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱

這項指令的輸出內容包含名為 failoverDrReplica 的欄位,可識別指定的 DR 副本。

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

如要檢查副本是否為 DR 副本,請使用下列其中一個程序。

控制台

如要檢查備用資源執行個體是否為 DR 備用資源,請執行下列操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出備用資源執行個體。
  3. 確認指定 DR 副本的「Type」(類型) 資料欄中顯示 PostgreSQL disaster recovery replica

gcloud

如要檢查副本執行個體是否為 DR 副本,請執行下列指令:

gcloud sql instances describe REPLICA_NAME

請替換下列變數:

  • REPLICA_NAME:要檢查的唯讀副本名稱

如果副本是 DR 副本,指令輸出內容會包含 drReplica=true 欄位。

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
  • REPLICA_NAME:副本的名稱。

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
  • REPLICA_NAME:副本的名稱。

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

移除 DR 備用資源

您可以從主要執行個體清除 DR 副本指定項目。不過,如果沒有為主要執行個體指派任何災難復原副本,就無法執行切換或副本容錯移轉。

控制台

如要從主要執行個體移除指定的 DR 副本,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出並選取主要執行個體。系統隨即會顯示主要執行個體的「總覽」頁面。
  3. 在導覽選單中,按一下「副本」
  4. 在唯讀副本清單中,找出要移除的跨區域唯讀副本。
  5. 針對副本,按一下「more_vert」more_vert「Actions」(動作) 按鈕,然後選取「Remove as DR replica」(移除做為 DR 副本)
  6. 按一下「確認」。

gcloud

如要移除 DR 副本指定項目,請在主要執行個體上執行下列指令:

gcloud sql instances patch PRIMARY_INSTANCE_NAME \
  --clear-failover-dr-replica-name

請替換下列變數:

  • PRIMARY_INSTANCE_NAME:要移除指定 DR 備用資源的主要執行個體名稱

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • failoverDrReplicaName 欄位設為空字串。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "replicationCluster": {
     "failoverDrReplicaName": ""
   }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • failoverDrReplicaName 欄位設為空字串。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "replicationCluster": {
     "failoverDrReplicaName": ""
   }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

執行切換作業

指派 DR 副本後,即可執行切換作業。 不過,最佳做法是避免在下列情況下執行切換作業:

  • 主要執行個體正在使用中。
  • 正在執行管理員作業,例如自動備份,或啟用/停用高可用性 (HA)。

為避免逾時,請考慮在交易量較低時執行切換。

切換完成後,作業會在新主要執行個體升級後,立即備份新主要執行個體 (先前的 DR 副本)。備份完成後,新的主要執行個體就會完全啟用時間點復原 (PITR) 功能。備份作業可能需要 5 到 15 分鐘,實際情況視磁碟大小而定。只有在完成這項備份後,PITR 涵蓋範圍才會開始。如要進一步瞭解使用 PITR 和進階 DR 時的注意事項,請參閱「使用 PITR 和進階 DR」。

切換作業完成後,您會發現複製方向已反轉。

舊主要執行個體重新設定為唯讀備用資源後,先前解析為舊主要執行個體的 DNS 寫入端點,會解析為新的主要執行個體。

事前準備

執行切換作業前,請先完成下列步驟:

  • 指派 DR 備用資源。 您只能在主要執行個體和指定的 DR 備用資源之間執行切換。
  • 確認主要執行個體和 DR 副本已上線。
  • 請確認 DR 副本執行的資料庫版本與主要執行個體相同,即 PostgreSQL 12 以上版本。
  • 確認主要執行個體已啟用 PITR。如要啟用 PITR,請參閱「使用時間點復原 (PITR)」。
  • 確認主要執行個體和 DR 副本未設定 cloudsql.logical_decoding 旗標。兩個執行個體都不得設定邏輯時段或邏輯複寫。
  • 如果您使用 DNS 寫入端點,請確認主要執行個體和 DR 副本的 SSL 設定相同。舉例來說,如果 DR 副本設定為強制執行 SSL 加密,但主要執行個體允許未加密的連線,那麼在完成切換作業後,用戶端就無法連線至新的主要執行個體。
  • 對主要執行個體執行隨選備份。這項備份作業是預防措施,可讓您在發生任何意外故障時復原資料。

執行切換作業

控制台

如要執行切換作業,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出主要執行個體的指定 DR 備用資源。
  3. 按一下 DR 備用資源執行個體。系統隨即顯示 DR 副本的「總覽」頁面。
  4. 按一下「切換」按鈕。
  5. 在「在主要執行個體與 DR 備用資源之間切換」頁面的「執行個體 ID」欄位中,輸入主要執行個體的名稱。
  6. 按一下「切換」

gcloud

如要執行切換作業,請執行下列指令:

gcloud sql instances switchover REPLICA_NAME
   [--db-timeout=TIMEOUT_DURATION ]

請替換下列變數:

  • REPLICA_NAME:指定 DR 副本的名稱,主要執行個體會與該副本互換角色。
  • TIMEOUT_DURATION:選用。允許執行個體完成資料庫作業的逾時期限。
  • 如果未指定這項參數,切換作業會包含 10 分鐘的逾時。

    您可以指定 --db-timeout 參數,增加這個逾時值。將 TIMEOUT_DURATION 替換成最多 24 小時的時間範圍,包括格式的初始標記。例如,如要指定 30 秒,請使用 30s。如為 24 小時,請指定 24h。您也可以使用最多 9 位數的小數,指定時間範圍的分數單位。舉例來說,如要指定 30.5 分鐘,請輸入 30.5m

    如果沒有任何待處理作業,可以減少這個逾時值。

Terraform

如要開始切換作業,請使用 Terraform 資源。 如要將 DR 副本設為新的主要執行個體,請執行第一個範例。

# This sample provides the second part of the switchover operation and makes the original primary instance
# a replica of the new primary instance. After you run `terraform apply` for this sample, you'll see
# the following message:
#
# "No changes. Your infrastructure matches the configuration.
#
# Terraform has compared your real infrastructure against your configuration and found no differences,
# so no changes are needed.
#
# Apply complete! Resources: 0 added, 0 changed, 0 destroyed."
data "google_project" "default" {
}

resource "google_sql_database_instance" "original-primary" {
  name             = "postgres-original-primary-instance"
  region           = "us-east1"
  database_version = "POSTGRES_12"
  # Change instance type for the original primary from "CLOUD_SQL_INSTANCE" to "READ_REPLICA_INSTANCE".
  instance_type = "READ_REPLICA_INSTANCE"
  # Set master_instance_name to the the new primary instance, the old DR replica.
  master_instance_name = "postgres-dr-replica-instance"
  # replica_names = [] # If you previously defined a replica_names field in your template, then delete the DR replica
  # (new primary) from the list of replicas.  Don't delete the entire replica_names field.
  # Instead set the field to an empty string. For example, replica_names = [""].

  replication_cluster {
    # This instance no longer requires a designated DR replica since it's a replica.
    # Remove the DR replica designation by setting the field to an empty string.
    failover_dr_replica_name = ""
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      # Disable automated backups and PITR because this instance is now a replica.
      enabled                        = false
      point_in_time_recovery_enabled = false
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

resource "google_sql_database_instance" "dr-replica" {
  name             = "postgres-dr-replica-instance"
  region           = "us-west2"
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"
  replica_names    = [google_sql_database_instance.original-primary.name]


  replication_cluster {
    failover_dr_replica_name = "${data.google_project.default.project_id}:${google_sql_database_instance.original-primary.name}"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

如果切換作業順利完成,當您為第二個範例執行 terraform apply 時,系統會顯示類似以下的訊息:

No changes. Your infrastructure matches the configuration.

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的 Google Cloud 專案 ID 或專案編號。
  • REPLICA_NAME:DR 副本的名稱。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的 Google Cloud 專案 ID 或專案編號。
  • REPLICA_NAME:DR 副本的名稱。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

叫用備用資源容錯移轉,執行 DR

如果發生區域故障或災難,您可以對指定的 DR 副本叫用副本容錯移轉作業,執行 DR。如要執行備用資源容錯移轉,請升級指定的 DR 備用資源。與切換不同,DR 副本的升級是立即進行。

由於 DR 副本會立即接手主要執行個體的工作,因此副本可能因複製延遲而缺少舊主要執行個體的部分資料。因此,備用資源容錯移轉可能會導致資料遺失。

在升級程序中,備用資源容錯移轉會在 DR 備用資源成為新的主要執行個體後,立即備份新的主要執行個體 (先前的 DR 備用資源)。備份完成後,新的主要執行個體就會完全啟用時間點復原 (PITR) 功能。視新 (和舊) 主要執行個體的磁碟大小而定,完成這項備份作業可能需要 5 到 15 分鐘。備份期間無法使用 PITR。

舊的主要執行個體恢復連線後,備用資源容錯移轉程序會進行備份。備份完成後,系統會將舊的主要執行個體重新建立為新主要執行個體的唯讀備用資源。

如要進一步瞭解如何搭配使用 PITR 與進階 DR,請參閱「搭配使用 PITR 與進階 DR」。

啟動副本容錯移轉作業後,先前解析為舊主要執行個體的 DNS 寫入端點,會解析為新的主要執行個體。

事前準備

執行備用資源容錯移轉前,請先完成下列步驟:

  • 如果尚未完成上述設定,請指定 DR 副本。您只能在主要執行個體和指定的 DR 備用資源之間執行備用資源容錯移轉。
  • 確認 DR 副本已連線且健康狀態良好。
  • 請確認 DR 副本執行的資料庫版本與主要執行個體相同,即 PostgreSQL 12 以上版本。
  • 確認主要執行個體已啟用 PITR。如要啟用 PITR,請參閱「使用時間點復原 (PITR)」。
  • 確認主要執行個體和 DR 副本未設定 cloudsql.logical_decoding 旗標。兩個執行個體都不得設定邏輯時段或邏輯複製作業。 如果您叫用備用資源容錯移轉,且原始主要執行個體已啟用邏輯解碼,則原始主要執行個體成為唯讀備用資源時,原始主要執行個體上設定的所有邏輯時段都會遺失。

執行備用資源容錯移轉作業

控制台

如要執行備用資源容錯移轉作業,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 按一下 DR 備用資源執行個體。系統隨即顯示 DR 副本的「總覽」頁面。
  3. 按一下「Replica Failover」(備用資源容錯移轉) 按鈕。
  4. 在「在主要執行個體與 DR 備用資源之間執行備用資源容錯移轉」頁面中,於「執行個體 ID」欄位輸入主要執行個體的名稱,確認要繼續執行作業。
  5. 如要啟動備用資源容錯移轉,請按一下「備用資源容錯移轉」

gcloud

如要叫用副本容錯移轉至 DR 副本,請使用下列指令:

gcloud sql instances promote-replica \
   REPLICA_NAME --failover

請替換下列變數:

  • REPLICA_NAME:DR 備用資源的名稱

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • REPLICA_NAME:DR 副本的名稱。
  • ENABLE_REPLICA_FAILOVER:設為 true,即可使用副本容錯移轉。如果設為 false,API 會使用一般 promoteReplica 方法,不會進行副本容錯移轉。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:主要執行個體和 DR 副本的專案 ID 或專案編號。 Google Cloud
  • REPLICA_NAME:DR 副本的名稱。
  • ENABLE_REPLICA_FAILOVER:設為 true,即可使用副本容錯移轉。如果設為 false,API 會使用一般 promoteReplica 方法,不會進行副本容錯移轉。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

檢查備用資源容錯移轉的狀態

備用資源容錯移轉作業分為兩個階段。第一階段是升級 DR 副本。 第二階段是將舊的主要執行個體重新建立為唯讀備用資源。

如要檢查備用資源容錯移轉的狀態,請檢查每個階段的狀態。

  1. 檢查第一階段的狀態。

    控制台

    如要確認 DR 副本是否已升級為獨立執行個體,請執行下列操作:

    1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

      前往 Cloud SQL 執行個體

    2. 找出您升級的 DR 副本名稱。
    3. 確認新主要執行個體的「類型」欄中顯示 PostgreSQL VERSION

    gcloud

    您可以執行下列指令來檢查狀態:

    gcloud sql instances describe DR_REPLICA_NAME

    請替換下列變數:

    • DR_REPLICA_NAME:升級的 DR 副本名稱

    在輸出內容中,確認顯示下列欄位,且副本已成為獨立的 Cloud SQL 主要執行個體:

    instanceType: CLOUD_SQL_INSTANCE
    

  2. 如要確認第二階段是否完成,請檢查執行個體上的作業記錄,確認是否出現 RECONFIGURE_OLD_PRIMARY 訊息。

    這則訊息的顯示時間取決於舊的主要執行個體何時恢復連線,如果發生災害,可能需要幾分鐘或幾天。

    如要進一步瞭解如何檢查執行個體的作業記錄,請參閱「查看執行個體記錄」。

搭配進階 DR 使用 PITR

無論是切換或備用資源容錯移轉,只要將 DR 備用資源升級為主要執行個體,就會發生下列變更,以支援備份和 PITR:

  • 備份設定 (包括任何自動備份排程) 會從舊的主要執行個體複製到新的主要執行個體。
  • 系統會建立新的備份,以便在新主執行個體上支援 PITR。

  • 交易記錄保留政策會從舊主要執行個體複製到新主要執行個體。

無論是備份設定或交易記錄保留政策,我們都建議您確認從舊主執行個體沿用的設定,是否適用於新主執行個體。

時間點復原功能涵蓋範圍的開始時間

在切換作業結束時,Cloud SQL 會排定自動備份時間表,並備份新的主要執行個體。如要盡快開始使用 PITR 涵蓋範圍,建議您確認第一次備份是否成功。新升級的主要執行個體會在首次自動備份成功完成後,提供 PITR 涵蓋範圍。

如要進一步瞭解如何查看執行個體可用的備份資料,請參閱「查看備份資料清單」。

切換和備用資源容錯移轉期間的執行個體 PITR 涵蓋範圍

執行個體參與切換或備用資源容錯移轉作業時,會有一段時間是唯讀備用資源。執行個體做為唯讀備用資源和主要執行個體期間,都支援時間點復原和還原備份。

您可以執行 PITR,將執行個體還原至切換前 (當時執行個體是主要執行個體)。無論是切換作業或備用資源容錯移轉作業,只要新的主要執行個體升級完成,Cloud SQL 就會立即啟動新的主要執行個體備份作業,但這項作業不保證一定會成功。只有在備份完成後,升級的執行個體才會啟用 PITR。備份作業最多可能需要 5 到 15 分鐘,實際情況需視磁碟大小而定。

備用資源容錯移轉期間發生核心分裂

如果主要執行個體在透過備用資源容錯移轉升級備用資源時,持續接受寫入作業,就可能發生腦裂。備用資源升級後,當舊的主要執行個體再次可用時,系統會將其重建為升級執行個體的備用資源,並進行最終備份。這個備份可用於復原未寫入升級副本的任何腦裂資料。

刪除副本上的備份和交易記錄

如果已啟用 PITR 和備份功能的主要執行個體成為唯讀副本,系統會保留該執行個體做為主要執行個體時的最後一次備份和 PITR 保留政策,並在該執行個體做為副本時套用。即使新的主要執行個體不會進行備份,系統仍會根據上次設定的政策,刪除唯讀備用資源上的舊備份和交易記錄,這些資料用於 PITR。

舉例來說,如果執行個體設定為每天自動備份,並保留 7 個備份檔和 7 天的 PITR 記錄,則當這個執行個體成為唯讀副本時,系統每天會刪除超過 7 天的資料。

如需提早刪除備份,可以手動移除備份。詳情請參閱「刪除備份」。

限制

  • 如果 Cloud SQL 執行個體使用 Private Service Connect,且 PROJECT_ID:INSTANCE_ID 長度為 64 個字元以上,則不支援切換。
  • 如果主要執行個體將時間點復原 (PITR) 的交易記錄儲存在磁碟上,您就無法將 Cloud SQL Enterprise Plus 版本的唯讀備用資源執行個體指定為災難復原備用資源。如要查看執行時間點復原 (PITR) 時,執行個體將記錄儲存在何處,請參閱「檢查用於 PITR 的交易記錄儲存位置」。

  • 您無法將外部副本指派為 DR 副本。

  • Terraform 不支援備用資源容錯移轉作業。

疑難排解

問題 疑難排解
切換作業失敗。
  • 檢查資料庫中的交易量。如果交易量很高,作業可能會逾時。交易負載較低時,請考慮重試作業。
切換作業失敗,主要執行個體仍卡在唯讀模式中。 重新啟動資料庫,讓主要執行個體恢復寫入模式。
切換作業已完成,但 Google Cloud 控制台未顯示執行個體的新反向角色。 重新整理瀏覽器,即可顯示更新後的拓撲。
備用資源容錯移轉作業失敗。
  • 如果容錯移轉至 DR 備用資源失敗,請改為升級至一般 (非 DR) 唯讀備用資源。

後續步驟