關於 Cloud SQL 中的複製功能

複製功能可讓您建立 Cloud SQL 執行個體或內部資料庫的副本,並將工作卸載至副本。

簡介

使用複製功能的主要原因,是為了在不降低效能的情況下,擴大運用資料庫中的資料。

其他原因包括:

  • 在區域之間遷移資料
  • 在不同平台之間遷移資料
  • 將資料從內部資料庫遷移至 Cloud SQL

此外,如果原始執行個體發生損毀,系統會將備援機制升級。

在提及 Cloud SQL 執行個體時,複製的執行個體稱為「主要執行個體」,而副本則稱為「唯讀備用資源」。主要執行個體和讀取備用資源位於 Cloud SQL 中。

當您參照的是內部資料庫時,複製情況稱為「從外部伺服器複製」。在這種情況下,複製的資料庫是來源資料庫伺服器。位於 Cloud SQL 中的副本稱為 Cloud SQL 備用資源。此外,還有一個代表 Cloud SQL 中來源資料庫伺服器的執行個體,稱為「來源表示法執行個體」

在災難復原情況下,您可以升級備用資源,將其轉換為主要執行個體。這樣一來,您就可以使用該執行個體,取代位於停機地區的執行個體。您也可以升級副本,以取代損毀的執行個體。

Cloud SQL 支援下列備援機制類型:

您可以使用連接器強制執行,強制只使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器連線至 Cloud SQL 執行個體。在連接器強制執行的情況下,Cloud SQL 會拒絕直接連線至資料庫。如果執行個體已啟用連接器強制執行,您就無法為該執行個體建立唯讀備用資源。同樣地,如果執行個體有唯讀備用資源,就無法為該執行個體啟用連接器強制執行。

您也可以使用資料庫移轉服務,從來源資料庫伺服器持續複製資料至 Cloud SQL。

Cloud SQL 不支援兩個外部伺服器之間的複製作業。不過,Cloud SQL 支援以全域交易 ID (GTID) 為基礎的複製功能。GTID 可用於在伺服器上和複本設定中,為每筆交易提供不重複的識別資訊。由於每筆交易都有專屬 ID,MySQL 伺服器可以追蹤已執行的交易。GTID 會使用絕對座標,讓 Cloud SQL 執行個體的複本可指向其主要執行個體,您也不必在 CHANGE MASTER 陳述式中指定二進位記錄的檔案名稱或位置。副本和時間點復原功能的錯誤較少。基於這些優點,您無法在 Cloud SQL 中停用以 GTID 為基礎的複製功能。

唯讀備用資源

您可以使用唯讀備用資源,從 Cloud SQL 執行個體卸載工作。讀取備用資源是主要執行個體的精確複本。主要例項的資料和其他變更會在讀取/寫入複本上以近乎即時的方式更新。

唯讀備用資源僅供讀取,無法寫入。唯讀備用資源會處理查詢、讀取要求和分析流量,進而減少主要執行個體的負載。

您可以直接使用複本的連線名稱和 IP 位址連線至複本。如果您使用私人 IP 位址連線至副本,則不需要為副本建立額外的 VPC 私人連線,因為連線會從主要執行個體繼承。

如要瞭解如何建立唯讀備用資源,請參閱「 建立唯讀備用資源」一文。如要瞭解如何管理唯讀副本,請參閱「 管理唯讀副本」。

最佳做法是在主要執行個體上使用 HA 時,將唯讀備用資源放在與主要執行個體不同的區域。這可確保在含有主要執行個體的區域發生中斷時,讀取用副本仍可繼續運作。詳情請參閱「高可用性總覽」。

選擇合適的機器類型

唯讀備用資源的 vCPU 數量和記憶體可以與主要執行個體不同。您應該監控執行個體的指標,例如 CPU 和記憶體用量,確保複本執行個體的大小能配合其工作負載,尤其是當複本執行個體小於主要執行個體時。大小不足的複本執行個體較容易發生效能不佳的情況,例如經常發生記憶體不足 (OOM) 事件。

唯讀備用資源的儲存空間容量

當主要執行個體的大小調整時,系統會視需要調整所有唯讀備用資源的大小,讓這些備用資源的儲存空間容量至少與更新後的主要執行個體一樣大。

跨地區唯讀備用資源

跨區域複製功能可讓您在主要執行個體所在的不同區域中建立唯讀備用資源。建立跨區域唯讀備用資源的方式,與建立區域內備用資源相同。

跨區域備用資源:

  • 將副本提供給靠近應用程式所在區域的用戶,以改善讀取效能。
  • 提供額外的災難復原功能,以防區域性故障。
  • 讓您將資料從一個區域遷移到另一個區域。

如要進一步瞭解跨區域備用資源,請參閱「推送備用資源,以進行區域性遷移或災難復原」。

連鎖唯讀備用資源

階層式複製功能可讓您在相同或不同區域的其他唯讀備用資源下建立唯讀備用資源。以下是使用階層式複本的用途:

  • 災難復原:您可以使用唯讀備用資源的串聯式階層,模擬主要執行個體及其唯讀備用資源的拓樸結構。在服務中斷期間,系統會將您選取的唯讀備用資源升級為主要執行個體,而新主要執行個體下的唯讀備用資源會繼續複製,並可供使用。
  • 改善效能:將複製工作卸載至多個唯讀備用資源,減輕主要執行個體的負擔。
  • 擴充讀取作業:您可以新增更多備用資源,以便分擔讀取負載。
  • 降低成本:您可以使用單一階層式複本,並在其他區域進行跨區域複製,藉此降低網路成本。

術語

  • 層疊備用資源:可具備專屬備用資源的唯讀備用資源。
  • 層級:您可以在串聯式備用資源階層中建立備用資源層級。舉例來說,如果您在執行個體中新增四個備份,這些備份就會位於同一層級。
  • 同層次的執行個體:從同一個主要執行個體複製的多個備用資源。在複本階層中,同層的複本為同胞複本。一個備份可以正式擁有八個兄弟姊妹。
  • 葉節點備用資源:沒有任何備用資源的唯讀備用資源。在多層級複製階層中,分葉複本是最後一層。
  • 升級:將階層中任何層級的備份資源轉換為主要例項的動作。升級時,備用資源的串聯備用資源階層會保留。

設定層疊備用資源

串聯式備用資源可讓您在任何現有備用資源中新增唯讀備用資源。您最多可以新增四個副本層級 (包括主要執行個體)。當您將串聯式備用資源階層頂端的備用資源升級為主要執行個體時,該備用資源就會成為主要執行個體,而其串聯式備用資源會繼續複製。

如要規劃設定,您必須先設定讀取副本的用途。接下來兩個部分將說明災難復原和多區域複寫的設定。

災難復原

如要瞭解分層複本如何在服務中斷期間協助您快速復原,請考慮下列複製情境:

設定

顯示串聯式備用資源設定,其中串聯式備用資源位於另一個區域

服務中斷

顯示停機期間的推送或備援

推送

顯示備用資源的新執行個體

如果您想在災難復原設定中使用區域 B 的執行個體,且符合下列條件:

  • 與主要執行個體連結的相同區域中的備用資源 (備用資源 A)
  • 其他區域的備援機器 (連鎖備援機器) 連結至主要機器。

您可以在區域 B 的串聯式備用資源下建立唯讀備用資源。

在「中斷」分頁中,如果區域 A 發生中斷情形,階層備用資源就會升級為主要執行個體。該資料表已包含下方的唯讀備用資源,可縮短復原時間目標 (RTO)。

在「提升」分頁中,您會發現當分層複本提升時,其複本也會提升,並繼續在其下方複製。

多區域複製功能

分層備援的另一個用途,是將讀取容量以經濟實惠的方式分散到第二個區域。可以建立串聯式備用資源 C 和 D,從備用資源 B 複製資料。用戶端可將讀取查詢分散至備用資源 B、C 和 D,以減輕各備用資源的負載。跨區域網路流量的費用只會從主要執行個體傳送至備用資源 B 時產生一次。從 B 複製至 C 和 D 的複寫作業會使用區域內網路傳輸,這項服務不收費。

您可以使用串聯式備用資源建立最多四個階層,用於多區域複製:

主要資源 A → 備用資源 B → 備用資源 C 和備用資源 D

限制

  • 您無法刪除具有備用資源的備用資源。如要刪除備份,您必須從葉節點備份開始,然後逐層向上刪除。
  • 系統不支援循環區域依附元件。如要讓層疊備用資源的備援機制與主要執行個體位於相同區域,層疊備用資源也必須位於相同區域。

外部唯讀備用資源

外部唯讀備用資源是從 Cloud SQL 主要執行個體複製的 MySQL 外部執行個體。舉例來說,在 Compute Engine 上執行的 MySQL 執行個體會被視為外部執行個體。

外部唯讀備用資源有下列限制:

  • 可能無法複製到其他雲端平台代管的 MySQL 執行個體;請查閱其他供應商的說明文件。舉例來說,您必須設定設定欄位 replicate-ignore-db,但系統不支援不允許這項操作的雲端服務供應商。如要瞭解其他必要的設定欄位,請參閱「 設定外部備用資源」。
  • 例如,如果複製只因網路或伺服器故障而中斷了幾小時,備用資源就會落後於主要執行個體。當備用資源重新連線主要執行個體並再次開始複製時,備用資源就會趕上。不過,如果複製中斷時間超過保留 Cloud SQL 複製記錄的時間 (七個備份),您就必須刪除備用資源並重新建立新備用資源。
  • 從主要執行個體流向外部備用資源的資料會被當成傳出資料移轉收費。如需 Cloud SQL 執行個體類型的資料傳輸定價,請參閱定價頁面。
  • 如果您為執行個體建立外部讀取複本,並強制要求僅使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器連線至已設定私人服務存取權的執行個體,則必須將複本的子網路範圍新增至主要執行個體的已授權網路。您必須將所有範圍都設為 Cloud SQL 執行個體的授權網路。

    gcloud

    如要為執行個體設定 IP 授權,允許來自外部讀取副本 IP 位址範圍的流量,請使用 gcloud sql instances patch 指令:

    gcloud sql instances patch \
    --authorized-networks=IP_ADDRESS_RANGE_1/24,IP_ADDRESS_RANGE_2/24

    IP_ADDRESS_RANGE_1IP_ADDRESS_RANGE_2 替換為外部讀取複本的 IP 位址範圍。

    REST

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

    • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
    • INSTANCE_NAME:Cloud SQL 執行個體的名稱
    • IP_ADDRESS_RANGE_1:外部讀取複本的第一個 IP 位址範圍
    • IP_ADDRESS_RANGE_2:外部讀取複本的第二個 IP 位址範圍

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "kind": "sql#instance",
      "name": INSTANCE_NAME,
      "project": PROJECT_ID,
      "settings": {
        "ipConfiguration": {
          "authorizedNetworks": [{"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_1/24"}, {"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_2/24"}]},
      "kind": "sql#settings"
      }
    }

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

    您應該會收到如下的 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-16T02:32:12.281Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_NAME",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

複製用途

以下是各類型複製作業的用途。

名稱 主要 備用資源 優點及用途 更多資訊
唯讀備用資源 Cloud SQL 執行個體 Cloud SQL 執行個體
  • 額外的讀取容量
  • 數據分析目標
跨區域唯讀備用資源 Cloud SQL 執行個體 Cloud SQL 執行個體
  • 額外的讀取容量
  • 數據分析目標
  • 額外的災難復原功能
  • 提高讀取效能
  • 在區域之間遷移資料
外部唯讀備用資源 Cloud SQL 執行個體 在 Cloud SQL 外部的 MySQL 執行個體
  • 減少外部連線的延遲時間
  • 數據分析目標
  • 到其他平台的遷移路徑
從外部伺服器複製 在 Cloud SQL 外部的 MySQL 執行個體 MySQL 適用的 Cloud SQL 執行個體
  • 到 Cloud SQL 的遷移路徑
  • 將資料複製到 Google Cloud
  • 數據分析目標

建立唯讀備用資源的先決條件

您必須先讓主要 Cloud SQL 執行個體符合下列條件,才能建立唯讀備用資源:

  • 必須啟用自動備份功能。
  • 您必須啟用二進位檔記錄功能,才能啟用時間點復原功能。請參閱這篇文章,進一步瞭解這些記錄的影響。
  • 啟用二進位記錄後,至少必須建立一個備份。

外部備援機制其他規定:

  • 備用資源的 MySQL 版本必須與主要執行個體的 MySQL 版本相同或較高。瞭解詳情
  • 為確保安全性,您必須在主要執行個體上設定 SSL/TLS。瞭解詳情

啟用二進位檔記錄功能的影響

您必須啟用時間點復原功能,才能在主執行個體上啟用二進位檔記錄功能,以便支援唯讀備用資源。這會造成下列影響:

  • 效能負擔

    Cloud SQL 會使用列式複製,並搭配 MySQL 旗標 sync_binlog=1innodb_support_xa=true。因此,每個寫入作業都需要額外的磁碟 fsync,這會降低效能。

  • 儲存空間額外負擔

    系統會以與一般資料相同的費率收取二進位檔記錄的儲存空間費用。系統會自動截斷二進位檔記錄,只保留最久的自動備份。Cloud SQL 會保留最近七次自動備份和所有隨選備份。二進位記錄的大小,以及因此產生的費用,取決於工作負載。舉例來說,需要大量寫入的工作負載會比需要大量讀取的工作負載,消耗更多二進位檔記錄空間。

    您可以使用 SHOW BINARY LOGS MySQL 指令查看二進位記錄檔的大小。

    備份時,記錄會與資料一併儲存在備份中。

在唯讀備用資源上記錄二進位檔

  • 唯讀備用資源 (僅限 MySQL 5.7 和 8.0) 支援二進位記錄。您可以使用與主要執行個體相同的API 指令,在複本上啟用二進位記錄功能,但請使用複本的執行個體名稱,而非主要執行個體的名稱。請注意,enable binary loggingenable point-in-time recovery 這兩個詞可互換。

    您可以使用 sync_binlog 旗標,設定複本 (但不是主要) 執行個體的二進位記錄耐用性,該旗標可控制 MySQL 伺服器將二進位記錄同步至磁碟的頻率。

    即使在主要備用資源上停用備份功能,您還是可以在備用資源上啟用二進位檔記錄功能。

    如果設定了此值的複本升級為獨立伺服器,則設定會重設為獨立伺服器上的安全值 1

帳單

  • 唯讀備用資源的計費方式與標準 Cloud SQL 執行個體相同。資料複製作業不收費。
  • 對於外部備用資源,從主要執行個體流向外部備用資源的資料會以資料移轉費率計費。如需 Cloud SQL 執行個體類型資料傳輸定價,請參閱定價頁面。
  • 跨區域唯讀備用資源的定價與在該區域中建立新 Cloud SQL 執行個體相同。參閱 Cloud SQL 執行個體定價,然後選取適當的區域。除了與執行個體相關聯的一般費用外,跨區域備用資源也會產生跨區域資料移轉費用,因為從主要執行個體傳送至備用資源的複製記錄會產生這類費用,詳情請參閱「網路輸出定價」。

Cloud SQL 唯讀備用資源快速參考

主題 討論
備份 您不能設定備用資源的備份。
核心和記憶體 唯讀備用資源的核心數和記憶體容量可能與主要執行個體不同。
刪除主要執行個體 刪除主要執行個體之前,必須將其所有唯讀備用資源推送至獨立執行個體,或刪除唯讀備用資源。
刪除備用資源 刪除副本時,主要執行個體的狀態不會受到影響。
停用二進位檔記錄功能 在您停用主要執行個體上的二進位檔記錄之前,必須推送或刪除它的所有唯讀備用資源。
容錯移轉 只有在備用資源是 DR 備用資源的情況下,主要執行個體才能容錯移轉至備用資源。唯讀備用資源在服務中斷期間也無法以任何方式容錯移轉。
高可用性 您可以透過唯讀備用資源,在備用資源上啟用高可用性
負載平衡 Cloud SQL 不提供備用資源之間的負載平衡。您可以選擇為 Cloud SQL 執行個體實作負載平衡。您也可以使用連線集區,透過負載平衡設定將查詢分散到各個複本,以提升效能。
維護期間 唯讀備用資源與主要執行個體共用維護期間。備用資源會遵循主要執行個體的維護設定,包括維護期間、重新排程和拒絕維護期間。在維護期間,Cloud SQL 會先更新所有唯讀備用資源,再更新主要執行個體。
多個唯讀備用資源 Cloud SQL 支援串聯式備用資源。因此,您最多可以為單一主要執行個體建立 10 個備用資源,並為這些備用資源建立備用資源,最多可建立四個層級 (包括主要執行個體)。
平行複製 如要進一步瞭解如何使用平行複製功能來改善效能,請參閱「 設定平行複製功能」。
私人 IP 如果您使用私人 IP 位址連線至複本,則不需要為複本建立額外的 VPC 私人連線,因為複本會繼承主要執行個體的連線。
還原主要執行個體 存在備用資源時,您無法還原備用資源的主要執行個體。從備份還原執行個體,或對它執行時間點復原之前,您必須 推送或刪除它的所有備用資源。
設定 主要執行個體的 MySQL 設定會推送至備用資源,包括根密碼與對使用者資料表的變更。CPU 和記憶體變更不會傳播至複本。
停止備用資源 您無法 stop 備用資源。您可以對其執行 restartdeletedisable replication,但無法像主要執行個體一樣停止。
升級備用資源 唯讀備用資源可能會隨時遇到造成服務中斷的升級。
使用者資料表 您無法變更備用資源。所有使用者變更都必須在主要執行個體上完成。

後續步驟