啟用及停用高可用性

本頁說明如何設定高可用性的執行個體。

您可以在建立執行個體時設定高可用性,也可以對現有執行個體啟用高可用性。

如要進一步瞭解高可用性,請參閱高可用性設定總覽

建立高可用性的新執行個體

建立高可用性執行個體時,Cloud SQL 會將該執行個體設定為區域執行個體。

建立高可用性的執行個體:

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

    前往 Cloud SQL 執行個體

  2. 選取「建立執行個體」
  3. 選取資料庫引擎。
  4. 在「Choose region and zonal availability」(選擇區域和可用區供應情形) 專區中,選取「Multiple zones (Highly available)」(多可用區 (高可用性))
  5. 展開「指定可用區」
  6. 選取主要和次要可用區。在建立或編輯執行個體時使用次要區域,須符合下列條件:
    • 主要可用區預設為 Any,次要可用區則為 Any (different from primary)
    • 如果同時指定主要和次要可用區,兩者必須不同。

  7. 按一下「儲存」

    系統會將您帶回主要執行個體的執行個體頁面,並更新執行個體。

  1. 建立區域執行個體:
    gcloud sql instances create REGIONAL_INSTANCE_NAME \
    --availability-type=REGIONAL \
    --database-version=DATABASE_VERSION \
    --cpu=NUMBER_CPUS \
    --memory=MEMORY_SIZE
    如需可用參數的完整清單,請參閱 gcloud sql instances create 參考頁面。
  2. 設定 root 使用者:
    gcloud sql users set-password root no-host \
    --instance=REGIONAL_INSTANCE_NAME \
    --password=PASSWORD

如要建立高可用性執行個體,請使用 Terraform 資源

resource "google_sql_database_instance" "postgres_instance_ha" {
  name             = "postgres-instance-ha"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf

    視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

    terraform destroy
如需此要求的完整參數清單,請參閱執行個體:插入頁面。

建立區域執行個體。

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

    • project-id:專案 ID
    • instance-name:執行個體名稱
    • database-version:資料庫版本列舉字串
    • region GCP 區域
    • machine-type 機器類型

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

    JSON 要求主體:

    {
      "name": "instance-name",
      "region": "region",
      "databaseVersion": "database-version",
       "settings": {
         "tier": "machine-type",
         "backupConfiguration": {
             "enabled": true,
             "pointInTimeRecoveryEnabled": true
          },
          "availabilityType": "REGIONAL"
       }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "CREATE",
      "name": "operation-id",
      "targetId": "instance-name",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  2. 執行個體完成初始化後,請更新執行個體的根密碼:

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • password:新的根使用者密碼

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=%25&name=postgres'

    JSON 要求主體:

    {
       "name": "postgres",
       "host": "nohost",
       "password": "password"}
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=%25&name=postgres'"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=%25&name=postgres'" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

如需此要求的完整參數清單,請參閱執行個體:插入頁面。

建立區域執行個體。

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

    • project-id:專案 ID
    • instance-name:執行個體名稱
    • database-version:資料庫版本列舉字串
    • region GCP 區域
    • machine-type 機器類型

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

    JSON 要求主體:

    {
      "name": "instance-name",
      "region": "region",
      "databaseVersion": "database-version",
       "settings": {
         "tier": "machine-type",
         "backupConfiguration": {
             "enabled": true,
             "pointInTimeRecoveryEnabled": true
          },
          "availabilityType": "REGIONAL"
       }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "CREATE",
      "name": "operation-id",
      "targetId": "instance-name",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  2. 執行個體完成初始化後,請更新執行個體的根密碼:

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • password:新的根使用者密碼

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=postgres'

    JSON 要求主體:

    {
       "name": "postgres",
       "host": "nohost",
       "password": "password"}
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=postgres'"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=postgres'" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

如需進一步瞭解如何建立執行個體,請參閱建立執行個體

為現有執行個體設定高可用性

您可以使用 Google Cloud 控制台、gcloud CLI 或 API,設定 Cloud SQL 執行個體的高可用性。

如要設定高可用性的執行個體,請按照下列步驟操作:

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

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「自動備份和高可用性」設定選項區段中,選取「高可用性 (地區性)」。此外,也建議啟用「自動備份」
  5. 按一下 [儲存]

如要將執行個體設定為高可用性的區域執行個體,請使用 gcloud sql instances patch 指令:

gcloud sql instances patch INSTANCE_NAME \
--availability-type REGIONAL

INSTANCE_NAME 改成您要設定高可用性的 Cloud SQL 執行個體名稱。

如要將執行個體設為區域高可用性執行個體,請按照下列步驟操作:

  1. 檢查執行個體是否已啟用自動備份和時間點復原功能。高可用性執行個體必須符合這些條件。

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

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

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "POSTGRES_13"
    }
    

    輸出內容應包含與以下類似的區段:

      "backupConfiguration": {
        "kind": "sql#backupConfiguration",
        "startTime": "12:00",
        "enabled": true,
        "pointInTimeRecoveryEnabled": true
        }
      
  2. 如果 enabledpointInTimeRecoveryEnabled 其中之一為 false,請使用 instances:patch 方法啟用這兩者。如要啟用備份,請將 enabled 設為 true,並將 startTime 設為備份時間的開始值。如要啟用二進位檔記錄,請將 pointInTimeRecoveryEnabled 設為 true

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的主要或讀取備用資源執行個體名稱
    • START_TIME:時間 (以小時和分鐘為單位)

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "pointInTimeRecoveryEnabled": true
        }
      }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_NAME",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  3. 將執行個體設為區域高可用性執行個體:

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "settings": {"availabilityType": "REGIONAL" }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

如要將執行個體設為區域高可用性執行個體,請按照下列步驟操作:

  1. 檢查執行個體是否已啟用自動備份和時間點復原功能。高可用性執行個體必須符合這些條件。

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

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

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "POSTGRES_13",
    }
    

    輸出內容應包含與以下類似的區段:

      "backupConfiguration": {
        "kind": "sql#backupConfiguration",
        "startTime": "12:00",
        "enabled": true,
        "pointInTimeRecoveryEnabled": true
        }
      
  2. 如果 enabledpointInTimeRecoveryEnabled 其中之一為 false,請使用 instances:patch 方法啟用這兩者。如要啟用備份,請將 enabled 設為 true,並將 startTime 設為備份時間的開始值。如要啟用二進位檔記錄,請將 pointInTimeRecoveryEnabled 設為 true

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的主要或讀取備用資源執行個體名稱
    • START_TIME:時間 (以小時和分鐘為單位)

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "pointInTimeRecoveryEnabled": true
        }
      }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_NAME",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  3. 將執行個體設為區域高可用性執行個體:

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "settings": {"availabilityType": "REGIONAL" }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

啟動容錯移轉

測試容錯移轉是選用功能,但我們建議您執行這項功能,這樣才能瞭解應用程式在發生容錯移轉時的回應方式。

如要進一步瞭解容錯移轉,請參閱容錯移轉總覽

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

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下「容錯移轉」
  4. 在「Manually trigger a failover」(手動觸發容錯移轉) 對話方塊的文字欄位中,輸入執行個體的 ID,然後按一下「Trigger Failover」(觸發容錯移轉)

啟動容錯移轉:

gcloud sql instances failover PRIMARY_INSTANCE_NAME
  1. 描述主要執行個體,以取得 settingsVersion 欄位的值。

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

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

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "POSTGRES_13"
    }
    
  2. 啟動容錯移轉: <0x0

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

    • project-id:專案 ID
    • instance-name:執行個體名稱
    • settings-version:instanceInfo 中的 settingsVersion

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name/failover

    JSON 要求主體:

    {
      "failoverContext":
         {
            "settingsVersion":"settings-version"
         }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name/failover"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name/failover" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "CREATE",
      "name": "operation-id",
      "targetId": "instance-name",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  1. 描述主要執行個體,以取得 settingsVersion 欄位的值。

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • INSTANCE_NAME:您要設定高可用性的執行個體名稱

    HTTP 方法和網址:

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

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

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

    {
      "kind": "sql#instance",
      "state": "RUNNABLE",
      "databaseVersion": "POSTGRES_13"
    }
    
  2. 啟動容錯移轉: <0x0

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

    • project-id:專案 ID
    • instance-name:執行個體名稱
    • settings-version:instanceInfo 中的 settingsVersion

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name/failover

    JSON 要求主體:

    {
      "failoverContext":
         {
            "settingsVersion":"settings-version"
         }
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name/failover"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name/failover" | Select-Object -Expand Content

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-21T22:43:37.981Z",
      "operationType": "CREATE",
      "name": "operation-id",
      "targetId": "instance-name",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

執行個體開始容錯移轉,會有幾分鐘的時間無法提供資料。

驗證執行個體的高可用性設定

如要確認執行個體是否具備高可用性,並查看執行個體執行的區域,請按照下列步驟操作:

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

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 確認「Configuration」部分顯示下列高可用性設定:
    • 高可用性 (單一區域)
    • 「位於」會顯示執行個體目前的主要區域。
gcloud sql instances describe INSTANCE_NAME

輸出內容會顯示 availabilityTypeREGIONALgceZonesecondaryGceZone 欄位會顯示執行個體目前的主要和次要區域。

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

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • INSTANCE_NAME:您要設定高可用性的執行個體名稱

HTTP 方法和網址:

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

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

執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "POSTGRES_13"
}

輸出內容會顯示 availabilityTypeREGIONALgceZonesecondaryGceZone 欄位會顯示執行個體目前的主要和次要區域。

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

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • INSTANCE_NAME:您要設定高可用性的執行個體名稱

HTTP 方法和網址:

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

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

執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "POSTGRES_13",
}

輸出內容會顯示 availabilityTypeREGIONALgceZonesecondaryGceZone 欄位會顯示執行個體目前的主要和次要區域。

變更高可用性執行個體的可用區

變更現有高可用性執行個體的一或兩個可用區時,執行個體會重新設定,因此會停機幾分鐘。如要查看高可用性執行個體目前執行的主要和次要區域,請參閱驗證執行個體的高可用性設定

如要變更高可用性執行個體的可用區,請按照下列步驟操作:

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

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「Choose region and zonal availability」(選擇區域和可用區供應情形) 專區中,展開「Specify zones」(指定可用區) 並選取新可用區。主要可用區預設為 Any,次要可用區則為 Any (different from primary)。相關限制如下:
    • 您可以只指定主要可用區,也可以同時指定主要和次要可用區。
    • 如果同時指定主要和次要可用區,這兩個可用區不得相同。
  5. 按一下「儲存」

    系統會將您帶回主要執行個體的執行個體頁面,並更新執行個體。

變更執行個體執行的區域:

gcloud sql instances patch INSTANCE_NAME \
  --zone=PRIMARY_ZONE --secondary-zone=SECONDARY_ZONE

--secondary-zone 參數為選用參數。如果省略,Cloud SQL 會選取與主要區域不同的可用區。

相關限制如下:

  • 可用區必須是有效的可用區,且與 Cloud SQL 執行個體位於相同區域。
  • 如果指定次要可用區,則必須與主要可用區不同。
  1. 變更地區執行個體的可用區:

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

    • PROJECT_ID:專案 ID
    • INSTANCE_NAME:執行個體名稱
    • PRIMARY_ZONE:主要可用區
    • SECONDARY_ZONE:次要區域

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
    "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}}
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

    secondaryZone 參數為選用參數。如果省略,Cloud SQL 會選取與主要區域不同的可用區。

    相關限制如下:

    • 可用區必須是有效可用區。
    • 您選擇的任何可用區都必須與 Cloud SQL 執行個體位於相同區域。
  1. 變更地區執行個體的可用區:

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

    • PROJECT_ID:專案 ID
    • INSTANCE_NAME:執行個體名稱
    • PRIMARY_ZONE:主要可用區
    • SECONDARY_ZONE:次要區域

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
    "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}}
    }
    

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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method PATCH `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

    您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

    secondaryZone 參數為選用參數。如果省略,Cloud SQL 會選取與主要區域不同的可用區。

    相關限制如下:

    • 可用區必須是有效可用區。
    • 您選擇的任何可用區都必須與 Cloud SQL 執行個體位於相同區域。

停用執行個體的高可用性

如要停用 Cloud SQL 執行個體的高可用性,請使用 Google Cloud 控制台、gcloud CLI 或 API。

如果停用執行個體的高可用性,一旦發生區域服務中斷,您就必須手動復原執行個體。詳情請參閱「獨立執行個體的復原選項」。

如要停用執行個體的高可用性,請按照下列步驟操作:

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

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 開啟「自動備份」
  5. 在「可用性」部分中,按一下「單一可用區」
  6. 按一下 [儲存]。這項編輯需要重新啟動執行個體後才會生效。
  7. 對話方塊出現時,請按一下「儲存並重新啟動」

如要停用執行個體的高可用性,請使用 gcloud sql instances patch 指令:

gcloud sql instances patch INSTANCE_NAME \
--availability-type ZONAL

INSTANCE_NAME 改成要停用高可用性的 Cloud SQL 執行個體名稱。

如要將執行個體的可用性類型變更為 ZONAL,請使用 instances:patch 方法。這個方法會停用執行個體的高可用性。

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

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • INSTANCE_NAME:要停用高可用性的執行個體名稱

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {"availabilityType": "ZONAL" }
}

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

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

如要將執行個體的可用性類型變更為 ZONAL,請使用 instances:patch 方法。這個方法會停用執行個體的高可用性。

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

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • INSTANCE_NAME:要停用高可用性的執行個體名稱

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {"availabilityType": "ZONAL" }
}

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

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到執行成功的狀態碼 (2xx) 和空白回應。

疑難排解

問題 疑難排解
找不到手動容錯移轉的指標。 只有自動容錯移轉會納入指標。
Cloud SQL 執行個體資源 (CPU 和 RAM) 的使用率接近 100%,導致高可用性執行個體停止運作。 執行個體機器大小過小,無法處理負載。

編輯執行個體,升級至較大的機器大小,取得更多 CPU 和記憶體。

後續步驟