本頁面說明如何使用進階災難復原 (DR)。Advanced 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 副本。
如果您使用 DNS 寫入端點建立 Cloud SQL 執行個體,則主要執行個體的 SSL 設定必須與指定的 DR 副本相同,才能叫用切換或副本容錯移轉作業。舉例來說,如果您將 DR 副本設為強制執行 SSL 加密,但主要執行個體允許未加密的連線,則在切換或容錯移轉作業完成後,用戶端將無法連線至新的主要執行個體。
DR 副本需求
指定的災難復原唯讀副本必須符合下列規定:
- 必須是 Cloud SQL Enterprise Plus 版本執行個體
資料庫主要和次要版本必須與主要執行個體相同,且執行 MySQL 8.0.31 以上版本
必須啟用二進位記錄功能。如果執行個體是指派的 DR 副本,就無法停用二進位記錄功能。
如要為副本啟用二進位記錄,請執行下列指令:
gcloud sql instances patch --enable-bin-log REPLICA_NAME
必須與主要執行個體位於不同區域
必須是直接唯讀副本,不得為串接副本
除了使用預設值之外,DR 副本不得設定下列任何旗標:
replicate_do_dbreplicate_ignore_dbreplicate_do_tablereplicate_wild_do_tablereplicate_ignore_tablereplicate_wild_ignore_table
必須將用於 PITR 的交易記錄儲存在 Cloud Storage
不得為外部副本
DR 副本建議
本節提供 DR 副本的建議。下列建議可協助您避免部署作業中的效能問題:
- 使用與主要執行個體相同的磁碟大小,或啟用自動擴充功能。
- 使用一致的高可用性設定。如果您在主要執行個體上啟用高可用性,也請在 DR 副本上啟用高可用性。
- 使用一致的資料快取設定。如果您在主要執行個體上啟用資料快取,也請在災難復原副本上啟用資料快取。
- 在任何切換或副本容錯移轉作業前後,為 DR 副本設定適當的資料庫旗標。
- 主要執行個體和 DR 副本應使用相同的機型 (級別) 和大小。
建立副本,滿足 DR 副本需求
如果主要執行個體沒有符合 DR 副本需求的跨區域唯讀副本,請建立一個。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出主要執行個體。
- 在「動作」欄中,按一下「更多動作」選單。
- 選取 [Create read replica] (建立唯讀備用資源)。
- 在「Instance ID」(執行個體 ID) 欄位中,輸入DR 副本的名稱。
- 在「Database version」(資料庫版本) 欄位中,系統會為您選取主要執行個體的相同主要版本。
- 如果您使用的是 MySQL 8.0,請在「Minor version」(子版本) 欄位中,保留預先選取的子版本。DR 副本和主要執行個體必須使用相同的資料庫子版本。
- 在頁面的「Choose a region and zonal availability」(選擇區域和可用區供應情形) 部分,執行下列操作:
- 選取與主要執行個體「不同」的區域。
- 選用。為 DR 副本選取「多可用區」。
- 選用。選取災難復原副本的「主要」和「次要可用區」。
- 在頁面的「Customize your instance」(自訂執行個體) 區段中,您可以更新 DR 副本的設定。如要進一步瞭解各項設定,請參閱「關於執行個體設定」頁面。
- 在「Machine shapes」(機器類型) 部分,選取與主要執行個體相同的機器類型。
- 在「旗標」部分,設定資料庫所需的旗標。
- 按一下「建立副本」。
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:指定與主要執行個體的資料庫主要和次要版本相符的版本字串,例如
MYSQL_8_0_31。主要和災難復原副本的資料庫主要和子版本必須相同。
- MACHINE_TYPE:指定與主要執行個體相同的機型。建議您選用與主要執行個體相同的機型。
- AVAILABILITY_TYPE:如果主要執行個體已設定高可用性,建議您指定
REGIONAL來啟用高可用性。 - EDITION:指定
ENTERPRISE_PLUS。
Terraform
如要建立災難復原副本,請使用 Terraform 資源。
REST v1
使用任何要求資料之前,請先修改下列項目的值:
- PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
- PROJECT_ID:主要執行個體和 DR 副本的 Google Cloud 專案 ID 或專案編號。
- DATABASE_VERSION: 版本字串,與主要執行個體的資料庫主要和次要版本相符,例如
MYSQL_8_0_31。主要和 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: 版本字串,與主要執行個體的資料庫主要和次要版本相符,例如
MYSQL_8_0_31。主要和 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 副本,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出並選取主要執行個體。主要執行個體的「Overview」(總覽) 頁面隨即顯示。
- 在導覽選單中,按一下「副本」。
- 在唯讀副本清單中,找出要指定為 DR 副本的跨區域唯讀副本。
- 按一下副本的 more_vert「Actions」(動作) 按鈕,然後選取「Designate as DR replica」(指定為災難復原副本)。
- 按一下「確認」。
gcloud
如要為主要執行個體指定 DR 副本,請使用下列指令:
gcloud sql instances patch PRIMARY_INSTANCE_NAME \ --failover-dr-replica-name=REPLICA_NAME
請替換下列變數:
- PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
- REPLICA_NAME:DR 副本的名稱。
Terraform
如要為主要執行個體指定 DR 副本,請使用 Terraform 資源。
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 副本,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出並選取主要執行個體。主要執行個體的「Overview」(總覽) 頁面隨即顯示。
- 在導覽選單中,按一下「副本」。
- 在唯讀副本清單中,找出要指定為新 DR 副本的跨區域唯讀副本。
- 按一下副本的 more_vert「Actions」(動作) 按鈕,然後選取「Designate as DR replica」(指定為災難復原副本)。
gcloud
如要變更 DR 副本,請再次執行 designate 指令,並指定其他 DR 副本。
REST
如要變更 DR 副本,請再次提出指定 API 要求,並指定其他 DR 副本。
查看 DR 副本指定情形
您可以使用 gcloud CLI 或 Cloud SQL Admin API,查看指派給主要執行個體的 DR 副本。您也可以檢查副本是否為指定的災難復原副本。
如要找出主要執行個體指定的災難復原副本,請按照下列程序操作。
控制台
如要找出哪個唯讀副本是主要執行個體的指定災難復原副本,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出並選取主要執行個體。主要執行個體的「Overview」(總覽) 頁面隨即顯示。
- 在導覽選單中,按一下「副本」。
- 在唯讀副本清單中,確認指定災難復原副本的「Type」(類型) 欄中顯示
MySQL 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 副本,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出副本執行個體。
- 確認指定 DR 副本的「Type」(類型) 欄中顯示
MySQL 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
請展開以下其中一個選項,以傳送要求:
您應該會收到執行成功的狀態碼 (2xx) 和空白回應。
REST v1beta4
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID:執行個體所在 Google Cloud 專案的 ID 或專案編號。
- REPLICA_NAME:副本名稱。
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME
請展開以下其中一個選項,以傳送要求:
您應該會收到執行成功的狀態碼 (2xx) 和空白回應。
移除 DR 副本
您可以清除主要執行個體的 DR 副本指派設定。不過,如果主要執行個體未指派 DR 副本,就無法執行切換或副本容錯移轉。
控制台
如要從主要執行個體移除指定的災難復原副本,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出並選取主要執行個體。主要執行個體的「Overview」(總覽) 頁面隨即顯示。
- 在導覽選單中,按一下「副本」。
- 在唯讀副本清單中,找出要移除的跨區域唯讀副本。
- 按一下副本的 more_vert「Actions」(動作) 按鈕,然後選取「Remove as DR replica」(移除災難復原副本)。
- 按一下「確認」。
gcloud
如要移除 DR 副本指派設定,請在主要執行個體上執行下列指令:
gcloud sql instances patch PRIMARY_INSTANCE_NAME \ --clear-failover-dr-replica-name
替換下列變數:
- PRIMARY_INSTANCE_NAME:要移除指定 DR 副本的主要執行個體名稱
REST v1
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID:主要執行個體和 DR 副本的 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:主要執行個體和 DR 副本的 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 回覆:
執行切換
指定災難復原副本後,即可執行切換作業。不過,建議您避免在下列情況下執行切換作業:
- 主要執行個體正在使用中。
- 管理員作業正在進行中,例如自動備份,或啟用/停用高可用性 (HA)。
為避免逾時,建議您在交易量較低時執行切換。
切換作業完成後,系統會在新的主要執行個體 (先前的 DR 副本) 升級後,立即備份新的主要執行個體。備份完成後,新的主要執行個體就會完全啟用時間點復原 (PITR) 功能。這項備份作業最多可能需要 5 到 15 分鐘才能完成,具體時間取決於磁碟大小。這項備份作業完成後,PITR 涵蓋範圍才會開始。
為縮短總切換時間,Cloud SQL 會在切換完成後,透過獨立的非同步作業設定並啟用 PITR。如要進一步瞭解搭配使用 PITR 與進階災難復原功能的注意事項,請參閱「搭配使用 PITR 與進階災難復原功能」。
切換作業完成後,您會發現複製方向已反轉。
將舊的主要執行個體重新設定為唯讀副本後,DNS 寫入端點 (先前解析為舊的主要執行個體) 會解析為新的主要執行個體。
如果您在災難復原 (DR) 副本上設定 Private Service Connect 傳出連線,則在切換作業後,當 DR 副本升級為主要執行個體時,傳出連線會繼續在建立的新主要執行個體上運作。如果未在災難復原 (DR) 副本設定傳出連線,則必須在新的主要執行個體啟用 Private Service Connect 傳出連線,服務才能在切換作業後繼續運作。
事前準備
執行切換作業前,請先完成下列事項:
- 指定 DR 副本。 您只能在主要執行個體和指定的 DR 副本之間執行切換。
- 確認主要執行個體和災難復原副本皆已上線。
- 如果您使用 DNS 寫入端點,請確認主要執行個體和 DR 副本的 SSL 設定相同。舉例來說,如果 DR 副本設為強制執行 SSL 加密,但主要執行個體允許未加密的連線,則切換作業完成後,用戶端將無法連線至新的主要執行個體。
- 隨選備份主要執行個體。這項備份措施是為了防範未然,以便在發生任何非預期故障時復原。
執行切換作業
控制台
如要執行切換作業,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出主要執行個體的指定 DR 副本。
- 按一下 DR 副本執行個體。災難復原副本的「Overview」(總覽) 頁面隨即顯示。
- 點選「切換」按鈕。
- 在「Perform switchover between the primary and DR replica」(在主要執行個體和災難備援副本之間執行切換) 頁面的「Instance ID」(執行個體 ID) 欄位中,輸入主要執行個體的名稱。
- 按一下「Switchover」(切換)。
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 副本設為新的主要執行個體,請使用第一個範例。範例包含 Terraform 設定變更的註解,您需要進行這些變更,才能切換主要執行個體和災難復原副本。
完成變更後,請執行 terraform plan,更新主要和 DR 副本。確認輸出內容包含 Plan: 0 to add, 1 to change, 0 to destroy.。如要執行切換,請執行 terraform apply。
此時,原先的主要執行個體會成為新主要執行個體的副本。不過,這項變更不會自動反映在 Terraform 狀態中。如要將原始主要執行個體設為 Terraform 狀態中新主要執行個體的副本,請使用第二個範例。第二個範例提供註解,說明執行第一個範例後需要進行的變更。
如果 Terraform 狀態更新成功,當您對第二個範例執行 terraform plan 時,系統會顯示類似以下的訊息:
No changes. Your infrastructure matches the configuration.
如果執行 terraform apply,系統會顯示類似以下的訊息:
Resources: 0 added, 0 changed, 0 destroyed.
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 副本會立即接替主要執行個體的角色,因此可能因為複製延遲,而未包含舊主要執行個體的所有資料。因此,副本容錯移轉可能會導致資料遺失。
在升級過程中,災難備援副本成為新的主要執行個體後,副本容錯移轉會立即備份新的主要執行個體 (先前的災難備援副本)。備份完成後,新的主要執行個體就會完全啟用時間點復原 (PITR) 功能。視新舊主要執行個體的磁碟大小而定,這項備份作業可能需要 5 到 15 分鐘才能完成。在這段備份期間,無法使用 PITR。
為縮短副本容錯移轉作業的總時間,Cloud SQL 會在容錯移轉作業完成後,透過獨立的非同步作業設定及啟用 PITR。
舊的主要執行個體恢復上線後,副本容錯移轉程序會進行備份。備份完成後,舊的主要執行個體會重新建立為新主要執行個體的唯讀副本。
如要進一步瞭解將 PITR 與進階災難復原搭配使用的注意事項,請參閱「將 PITR 與進階災難復原搭配使用」。
叫用副本容錯移轉作業後,DNS 寫入端點會解析為新的主要執行個體,而非舊的主要執行個體。
如果您在災難復原 (DR) 副本上設定 Private Service Connect 傳出連線,則在副本容錯移轉作業後,當 DR 副本升級為主要執行個體時,傳出連線會繼續在建立的新主要執行個體上運作。如果未在災難復原 (DR) 副本設定傳出連線,則必須在新的主要執行個體啟用 Private Service Connect 傳出連線,服務才能在副本容錯移轉作業後繼續運作。
事前準備
執行副本容錯移轉前,請先完成下列事項:
- 如果尚未指定 DR 副本,請先完成這項操作。您只能在主要執行個體和指定的災難復原副本之間,執行副本容錯移轉。
- 確認 DR 副本已上線且健康狀態良好。
執行備用資源容錯移轉作業
控制台
如要執行副本容錯移轉作業,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出主要執行個體的指定 DR 副本。
- 按一下 DR 副本執行個體。災難復原副本的「Overview」(總覽) 頁面隨即顯示。
- 按一下「Replica Failover」(副本容錯移轉) 按鈕。
- 在「Perform replica failover between the primary and DR replica」(在主要執行個體和災難復原副本之間執行副本容錯移轉) 頁面的「Instance ID」(執行個體 ID) 欄位中,輸入主要執行個體的名稱,確認要繼續執行作業。
- 如要啟動副本容錯移轉,請按一下「Replica Failover」(副本容錯移轉)。
gcloud
如要叫用副本容錯移轉至災難備援副本,請使用下列指令:
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 副本。第二階段是將舊的主要執行個體重新建立為唯讀副本。
如要查看副本容錯移轉的狀態,請查看各階段的狀態。
查看第一階段的狀態。
控制台
如要確認災難備援副本是否已升級為獨立執行個體,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 找出您升級的 DR 副本名稱。
- 確認新主要執行個體的「Type」(類型) 欄中顯示 MySQL VERSION。
gcloud
您可以執行下列指令來檢查狀態:gcloud sql instances describe DR_REPLICA_NAME
替換下列變數:
- DR_REPLICA_NAME:升級後的 DR 副本名稱
在輸出內容中,確認下列欄位顯示,且副本已成為獨立的 Cloud SQL 主要執行個體:
instanceType: CLOUD_SQL_INSTANCE
-
如要確認第二階段是否完成,請查看執行個體上的作業記錄,確認是否有
RECONFIGURE_OLD_PRIMARY訊息。這則訊息的顯示時間取決於舊的主要執行個體何時恢復上線,在發生災難時,可能需要幾分鐘或幾天。
如要進一步瞭解如何查看執行個體的作業記錄,請參閱「查看執行個體記錄」。
搭配使用 PITR 和進階災難復原
無論是切換或副本容錯移轉,只要災難備援副本升級為主要執行個體,系統就會進行下列變更,以支援備份和 PITR:
- 備份設定 (包括任何自動備份排程) 會從舊的主要執行個體複製到新的主要執行個體。
- 如果停用,系統會開啟 binlog 設定旗標,啟用時間點復原功能。
系統會建立新的備份,以便在新的主要執行個體上支援 PITR。
交易記錄保留政策會從舊的主要執行個體複製到新的主要執行個體。
無論是備份設定或交易記錄保留政策,建議您確認從舊主要執行個體沿用的設定,是否適用於新的主要執行個體。
時間點復原功能涵蓋範圍的開始時間
切換作業結束時,Cloud SQL 會排定自動備份,並為新的主要執行個體建立第一個備份。如要盡快開始 PITR 涵蓋範圍,建議您確認第一次備份是否成功。新升級的主要執行個體只有在第一次自動備份成功完成後,才會涵蓋 PITR。
如要進一步瞭解如何查看執行個體可用的備份,請參閱「查看備份清單」。
切換和副本容錯移轉期間,執行個體的 PITR 涵蓋範圍
執行個體參與切換或副本容錯移轉作業時,會有一段時間做為唯讀副本。在執行個體做為唯讀副本和主要執行個體期間,系統支援 PITR 和還原備份。
您可以將時間點復原至切換前,也就是執行個體還是主要執行個體時。無論是切換或副本容錯移轉作業,Cloud SQL 都會在新的主要執行個體升級後,立即啟動盡力備份作業。這項備份作業完成後,系統才會在升級後的執行個體上啟用 PITR。視磁碟大小而定,這項備份作業可能需要 5 到 15 分鐘才能完成。
Cloud SQL 會在切換或副本容錯移轉作業完成後,以非同步方式啟用 PITR,因此不會增加作業所需時間。
備用資源容錯移轉期間發生腦裂
如果主要執行個體繼續接受寫入作業,而副本透過副本容錯移轉升級,就可能發生腦裂。升級副本後,當舊的主要執行個體再次可用時,系統會將其重建為升級執行個體的副本,並建立最終備份。這個備份可用於復原未寫入升級副本的任何腦裂資料。
刪除副本的備份和交易記錄
如果啟用 PITR 和備份的主要執行個體變成唯讀副本,則系統會保留並套用其做為主要執行個體時的最後一個備份和 PITR 保留政策。即使新的主要執行個體未進行備份,系統仍會根據上次設定的政策,刪除唯讀副本上用於 PITR 的舊備份和交易記錄。
舉例來說,如果執行個體設為每天自動備份,並保留 7 個備份和 7 天的 PITR 記錄,則當這個執行個體成為唯讀副本時,系統會每天刪除超過 7 天的內容。
如需提前刪除備份,可以手動移除。詳情請參閱「刪除備份」。
VPC Service Controls 和進階災難復原建議
如果您使用 VPC Service Controls,請確認 service perimeter 允許所有復原作業 (例如時間點復原 (PITR) 作業) 的必要通訊,尤其是當您使用 CMEK 且金鑰位於其他專案時。
切換和副本容錯移轉等進階災難復原作業,可啟用或重新設定 PITR 等功能。如果未正確設定 CMEK 和跨專案金鑰存取權的 service perimeter,VPC Service Controls 可能會封鎖這些功能。
- 將 KMS 金鑰專案與執行個體放在同一個 perimeter:最佳做法是將包含 KMS 金鑰的專案,與 Cloud SQL 執行個體放在同一個 VPC Service Controls perimeter。
- 使用 perimeter bridge:另一個較不建議的做法是使用 perimeter bridge 連結不同 perimeter 中的專案。
- 測試:使用 VPC Service Controls 模擬測試模式,測試災難復原程序 (例如切換),並找出潛在的 VPC Service Controls 違規事項,而不強制執行。
詳情請參閱「設定 VPC Service Controls」。
限制
如果主要執行個體將時間點復原 (PITR) 的交易記錄儲存在磁碟上,您就無法將 Cloud SQL Enterprise Plus 版本唯讀副本執行個體指定為災難復原副本。如要查看執行個體儲存 PITR 記錄的位置,請參閱「查看用於 PITR 的交易記錄儲存位置」。
您無法將外部副本指定為災難復原副本。
Terraform 不支援副本容錯移轉作業。
疑難排解
| 問題 | 疑難排解 |
|---|---|
| 切換作業失敗。 |
|
| 切換作業失敗,主要執行個體卡在唯讀模式。 | 重新啟動資料庫,將主要執行個體切換回寫入模式。 |
| 切換作業已完成,但 Google Cloud 控制台未顯示執行個體的新反向角色。 | 重新整理瀏覽器,即可查看更新後的拓撲。 |
| 副本容錯移轉作業失敗。 |
|
| 切換作業完成後,新的副本無法複製,並顯示錯誤訊息「無法複製到伺服器...,因為目前的伺服器已清除必要的二進位記錄」。 |
其中一個根本原因,是在已啟用二進位記錄的唯讀副本 (例如災難復原副本) 上執行特定管理指令時,MySQL 會使用副本本身的伺服器 UUID 遞增副本的 GTID ( 為避免切換後發生這類複製失敗,請勿在唯讀副本上執行下列指令:
如要在唯讀副本上執行上述任一指令,請先停用用戶端工作階段的二進位記錄功能,再執行指令: SET SESSION sql_log_bin = 0; |
| 無法判斷是否未進行複製 | 連線至副本並輸入:
show slave status;
您也可以在 Cloud SQL 監控資訊主頁中,查看副本的複製狀態。詳情請參閱「監控 Cloud SQL 執行個體」。 |
您收到下列錯誤訊息:
|
如果執行個體在某段時間內切換至副本,您就無法對該時間範圍執行 PITR。執行個體為副本時,無法使用 PITR 記錄。
|
您收到下列錯誤訊息:
|
主要執行個體尚未將交易記錄的儲存位置切換至 Cloud Storage。請在交易記錄的儲存位置切換後再試一次,或嘗試為其他主要執行個體指定災難復原副本。 如要進一步瞭解如何移動用於 PITR 的交易記錄儲存位置,請參閱「使用時間點復原 (PITR)」。 |
您收到下列錯誤訊息:
|
如要進一步瞭解如何指定 DR 副本和正確的指令語法,請參閱「 指定主要執行個體的 DR 副本」。 |