使用進階災難復原 (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」。

主要執行個體需求

主要執行個體必須是 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 標記;無法設定任何邏輯插槽或邏輯複寫

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

  • 不得為外部備用資源

DR 備用資源建議

本節提供 DR 副本的最佳化建議。以下建議可協助您避免部署期間發生效能問題:

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

建立備用資源以符合 DR 備用資源需求

如果主要執行個體沒有符合異地備援備用資源需求的跨區域唯讀備用資源,請建立一個。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 找出主要執行個體。
  3. 按一下「動作」欄中的「更多動作」選單。
  4. 選取 [Create read replica] (建立唯讀備用資源)。
  5. 在「Instance ID」(執行個體 ID) 欄位中,輸入備援複本的名稱。
  6. 在「資料庫版本」欄位中,系統會為您選取主要執行個體的相同主要版本。
  7. 在頁面中的「Choose a region and zonal availability」部分,執行下列操作:
    • 選取與主要執行個體不同的區域。
    • (非必要) 為 DR 副本選取「多個可用區」
    • (非必要) 選取備份副本的「Primary」和「Secondary zones」
  8. 在頁面上的「自訂執行個體」部分,您可以更新異地備援副本的設定。如需各項設定的詳細資訊,請參閱「關於執行個體設定」頁面。
  9. 針對「Machine shapes」(機器形狀),請選取與主要執行個體相同的機器類型。
  10. 針對「旗標」,設定資料庫所需的任何旗標。
  11. 按一下「建立備用資源」

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

gcloud

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

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

如要建立異地備援副本,請使用 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 副本的 Google Cloud 專案 ID 或專案編號。
  • 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 副本的 Google Cloud 專案 ID 或專案編號。
  • 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 執行個體」頁面。

    前往 Cloud SQL 執行個體

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

gcloud

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

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 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 找出並選取主要執行個體。主要執行個體的「總覽」頁面隨即顯示。
  3. 在導覽選單中,按一下「複本」
  4. 在唯讀備用資源清單中,找出要指定為新異地備援備用資源的跨區域唯讀備用資源。
  5. 針對副本,請按一下 more_vert「動作」按鈕,然後選取「指定為 DR 副本」

gcloud

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

REST

如要變更 DR 副本,請再次發出指定 API 要求,並指定不同的 DR 副本。

查看 DR 備用資源指定

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

如要找出主要執行個體指定的 DR 備援副本,請按照下列程序操作。

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 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 回應:

如要檢查副本是否為異地備援副本,請使用下列任一程序。

控制台

如要檢查備用資源執行個體是否為異地備援備用資源,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

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

gcloud

如要檢查複本執行個體是否為異地備援複本,請執行下列指令:

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 備用資源,就無法執行切換或備用資源容錯移轉。

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

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

gcloud

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

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

替換下列變數:

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

REST v1

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

  • PROJECT_ID:主機例和異地備援副本的 Google Cloud 專案 ID 或專案編號。
  • 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:主機例和異地備援副本的 Google Cloud 專案 ID 或專案編號。
  • 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 備援伺服器均已上線。
  • 請確認主要執行個體已啟用 PITR。如要啟用 PITR,請參閱「使用時間點復原 (PITR)」一文。
  • 如果您使用的是 DNS 寫入端點,請確認主要執行個體和 DR 副本的 SSL 設定相同。舉例來說,如果 DR 複本已設定為強制執行 SSL 加密,但主要執行個體允許未加密的連線,則在切換作業完成後,用戶端將無法連線至新的主要執行個體。
  • 按照需求備份主要執行個體。這項備份措施是預防措施,可讓您在發生任何意外故障時進行復原。

執行切換作業

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 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 備用資源)。備份完成後,系統會在新的主例項上全面啟用時間點復原 (PITR)。這項備份作業可能需要 5 到 15 分鐘才能完成,具體取決於新 (舊) 主要執行個體的磁碟大小。在備份期間,無法使用 PITR。

舊的主要執行個體重新上線後,備用資源容錯移轉程序會執行備份作業。備份完成後,系統會重新建立舊的主要執行個體,做為新主要執行個體的唯讀備用資源。

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

在您叫用備援容錯作業後,先前解析為舊主要執行個體的 DNS 寫入端點,會解析為新的主要執行個體。

事前準備

執行備援副本容錯移轉前,請先執行下列操作:

  • 如果您尚未這麼做,請指定 DR 副本。您只能在主要執行個體與指定的 DR 備用資源之間,執行備用資源容錯移轉。
  • 確認備援複本已上線且處於健康狀態。

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

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 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 副本的 Google Cloud 專案 ID 或專案編號。
  • 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 副本的 Google Cloud 專案 ID 或專案編號。
  • 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. 查看第一階段的狀態。

    控制台

    如要檢查備援副本是否已升級為獨立執行個體,請執行下列操作:

    1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

      前往 Cloud SQL 執行個體

    2. 找出您升級的 DR 副本名稱。
    3. 確認新的主要執行個體的「Type」欄中是否顯示 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 和備份還原作業。

您可以將 PITR 執行至執行個體為主要執行個體時的時間點。無論是切換或備援容錯作業,Cloud SQL 都會在新的主要執行個體升級後,立即為其啟動盡力備份作業。只有在備份完成後,才會在已提升的執行個體上啟用 PITR。這項備份作業可能需要 5 到 15 分鐘才能完成,具體時間視磁碟大小而定。

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

當主要執行個體持續接受寫入作業,而備用資源則使用備用資源容錯移轉功能升級時,就可能發生分割腦情形。備用資源升級後,當舊的主要執行個體再次可用時,系統會將其重建為已升級執行個體的備用資源,並建立最終備份。這項備份可用於復原未寫入升級副本的任何分割腦資料。

刪除備份和備用資源上的交易記錄

如果啟用 PITR 及備份的主要執行個體成為唯讀備用資源,則會保留主要執行個體的最後備份和 PITR 保留政策,並在成為備用資源時套用。即使新的主要執行個體不會備份,系統仍會根據上次設定的政策,在唯讀備用資源上刪除用於 PITR 的舊備份和交易記錄。

舉例來說,如果執行個體已設定為每天執行自動備份,並保留 7 份備份,且每 7 天會產生 PITR 記錄,那麼當這個執行個體成為讀取複本時,系統會每天刪除超過 7 天的備份。

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

限制

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

  • 您無法將外部備用資源指定為 DR 備用資源。

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

疑難排解

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

後續步驟