關於 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 位址連線至副本,則不必為副本建立額外的虛擬私有雲私人連線,因為連線會沿用自主執行個體。

如要瞭解如何建立唯讀副本,請參閱「 建立唯讀副本」。如要瞭解如何管理唯讀副本,請參閱「 管理唯讀副本」。

最佳做法是,在主要執行個體上使用高可用性時,將唯讀副本放在與主要執行個體不同的可用區。這樣一來,即使主要執行個體所在的可用區發生中斷,唯讀副本仍可繼續運作。詳情請參閱「高可用性總覽」。

選取合適的機型

唯讀副本的 vCPU 數量和記憶體容量可以與主要執行個體不同。請監控執行個體的指標 (例如 CPU 和記憶體用量),確保副本執行個體的大小符合工作負載需求,尤其是副本執行個體小於主要執行個體時。如果副本執行個體過小,就更容易發生效能不佳的情況,例如頻繁出現記憶體不足 (OOM) 事件。

唯讀副本的儲存空間容量

調整主要執行個體的大小時,系統會視需要調整所有唯讀副本的大小,確保其儲存空間容量至少與更新後的主要執行個體相同。

跨區域唯讀副本

跨區域複製功能可讓您在與主要執行個體不同的區域中建立唯讀副本。建立跨區域唯讀副本的方式與建立區域內副本相同。

跨區域副本:

  • 在更靠近應用程式區域的位置提供副本,提高讀取效能。
  • 提供額外的災難復原功能,防範區域性故障。
  • 將資料從一個區域遷移至另一個區域。

如要進一步瞭解跨區域副本,請參閱「將副本升級為區域遷移或災難復原」。

串聯式唯讀副本

串連複製功能可讓您在相同或不同區域的其他唯讀副本下,建立唯讀副本。以下是使用串連副本的情境:

  • 災難復原:您可以使用唯讀副本的串聯階層,模擬主要執行個體及其唯讀副本的拓撲。服務中斷期間,將唯讀副本升級為主要執行個體後,新主要執行個體下的唯讀副本會繼續複製,並可供使用。
  • 提升效能:將複製工作卸載至多個唯讀副本,減輕主要執行個體的負擔。
  • 擴充讀取作業:您可以建立更多副本,分擔讀取負載。
  • 降低成本:在其他區域使用單一串聯副本搭配跨區域複製功能,即可降低網路費用。

術語

  • 串連副本:可擁有專屬副本的唯讀副本。
  • 層級:您可以在串聯副本階層中建立副本層級。舉例來說,如果您在執行個體中新增四個副本,這四個副本會位於同一層級。
  • 同層級執行個體:從相同主要執行個體複製的多個副本。同層級節點位於副本階層結構中的同一層級。一個副本最多可以有八個同層級副本。
  • 葉副本:沒有任何副本的唯讀副本。在多層級複製階層中,分葉副本是最後一個層級。
  • 升級:將階層中任何層級的副本轉換為主要執行個體的動作。升級後,副本的串聯副本階層會保留。

設定串連副本

串聯式副本可讓您將唯讀副本新增至任何現有副本。最多可以新增四個層級的副本,包括主要執行個體。如果升級串聯式副本階層頂端的副本,該副本會成為主要執行個體,其串聯式副本則會繼續複製。

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

災難復原

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

設定

顯示串聯式副本設定,其中串聯式副本位於不同區域

服務中斷

說明服務中斷期間的升級或副本

推送

顯示含有副本的新執行個體

如要在災難復原設定中使用區域 B 的執行個體,且具備:

  • 附加至主要執行個體 (副本 A) 的同區域副本
  • 其他區域的副本 (串聯副本) 附加至主要執行個體。

您可以在區域 B 的串聯式副本下建立唯讀副本。

在「Outage」(服務中斷) 分頁中,如果區域 A 發生服務中斷,串聯副本會升級為主要執行個體。由於下方已有唯讀副本,因此可縮短復原時間目標 (RTO)。

在「Promote」(升級) 分頁中,您會看到升級串連副本時,其副本也會升級,並繼續在該副本下複製。

多區域複製功能

串連副本的另一個用途,是以符合成本效益的方式,將讀取容量分配到第二個區域。您可以建立串聯式副本 C 和 D,從副本 B 複製資料。用戶端可以將讀取查詢分散到副本 B、C 和 D,減輕各副本的負載。跨區域網路流量費用只會產生一次,即從主要執行個體傳輸至副本 B。從 B 複製到 C 和 D 時,會使用區域內網路傳輸,這項服務不收費。

您可以使用串聯式副本進行多區域複製,建立最多四個執行個體的階層:

主要執行個體 A → 副本 B → 副本 C 和副本 D

限制

  • 您無法刪除含有副本的副本。如要刪除副本,必須從葉副本開始,依階層向上刪除。
  • 不支援循環區域依附關係。您無法從某個區域複製到另一個區域,然後再複製回原始區域。如要將串連副本的副本放在與主要執行個體相同的區域,串連副本也必須位於相同區域。

外部唯讀備用資源

外部唯讀副本是從 Cloud SQL 主要執行個體複製的外部 MySQL 執行個體。例如,在 Compute Engine 上執行的 MySQL 執行個體會視為外部執行個體。

外部唯讀副本有下列限制:

  • 外部副本的主要執行個體不得為 Cloud SQL 唯讀副本。
  • 您可能無法複製到其他雲端平台託管的 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_1 和 IP_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=1 和 innodb_support_xa=true。因此,每次寫入作業都需要額外的磁碟 fsync,這會降低效能。

  • 儲存空間負擔

    二進位記錄的儲存費用與一般資料相同。二進位記錄會自動截斷至最早自動備份的時間。Cloud SQL 會保留最近七個自動備份,以及所有隨選備份。二進位記錄的大小 (以及收費金額) 取決於工作負載。舉例來說,寫入密集型工作負載耗用的二進位記錄空間,會多於讀取密集型工作負載。

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

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

唯讀副本的二進位記錄

  • 唯讀副本執行個體 (僅限 MySQL 5.7 和 8.0) 支援二進位記錄功能。如要啟用副本的二進位記錄功能,請使用與主要執行個體相同的 API 指令,但將主要執行個體名稱替換為副本的執行個體名稱。請注意,enable binary logging 和 enable point-in-time recovery 這兩個詞可互換。

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

    即使主要執行個體停用備份功能,您仍可在副本上啟用二進位記錄。

    如果將已設定這個值的副本升級為獨立伺服器,則獨立伺服器上的設定會重設為安全值 1。

帳單

  • 唯讀副本的費率與標準 Cloud SQL 執行個體相同。資料複製作業不會產生費用。
  • 如果是外部副本,從主要執行個體流向外部副本的資料會以資料移轉計費。請參閱定價頁面,瞭解 Cloud SQL 執行個體類型的資料移轉定價。
  • 跨區域唯讀副本的定價,與在該區域建立新的 Cloud SQL 執行個體相同。請參閱 Cloud SQL 執行個體定價,並選取適當的區域。除了執行個體的一般費用外,跨區域副本還會產生跨區域資料移轉費用,用於從主要執行個體傳送至副本執行個體的複製記錄,詳情請參閱「網路輸出定價」。

Cloud SQL 唯讀副本快速參考指南

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

後續步驟