將 AlloyDB for PostgreSQL 叢集升級至較新的 PostgreSQL 主要版本,即可使用最新的資料庫功能、效能強化和安全性更新。您可以就地升級叢集的主要版本,或將資料遷移至執行較新 PostgreSQL 版本的叢集。
如要進一步瞭解如何建立叢集,請參閱「建立叢集及其主要執行個體」。
叢集和 PostgreSQL 版本相容性
建立 AlloyDB 叢集時,您必須選擇與叢集內執行個體相容的 PostgreSQL 主要版本。預設值為 17。
AlloyDB 會在定期維護期間,自動升級資料庫子版本。舉例來說,如果您建立的叢集與 17 相容,AlloyDB 會將資料庫伺服器升級至 17 的最新子版本。
不過,PostgreSQL 版本的主要版本升級,需要您自行規劃、測試及執行。
您可以透過多種方法升級叢集的主要版本:
- 就地主要版本升級:建議使用。
- 使用檔案式資料匯出功能遷移資料。
- 使用資料庫遷移服務。
每種升級解決方案各有優缺點。請參閱下表,瞭解各種方法的簡要比較,以便根據您的情境選擇合適的方法。
| 就地升級主要版本 | 以檔案為基礎的資料匯出 | 使用資料庫遷移服務進行遷移 |
|---|---|---|
| 叢集 (包括讀取執行個體) 會升級至所選的較高主要版本。 | 檔案匯出作業會移動資料庫的一次性快照。 | 資料庫遷移服務在遷移過程中提供持續複製功能,可降低新叢集遺失資料的可能性。 |
| 在升級前階段,您可以繼續使用叢集。 | 應用程式會經歷較長的停機時間,從您匯出資料時開始。在新叢集完全運作之前,您無法在原始叢集中接受資料庫寫入。 | 當您想將應用程式切換至使用新叢集時,應用程式的停機時間會縮短。 |
| 視結構定義而定,升級程序可能需要約 20 分鐘或更長的停機時間。升級後,您可以使用相同的 IP 位址存取叢集。 | 您可以更精細地控管要匯出的資料,並選擇不遷移特定資料表或其他實體。 | 資料庫遷移服務會自動遷移執行個體中的所有資料庫,以及叢集中的所有執行個體。您無法選擇從遷移資料中排除特定資料表或檢視表。 |
| 叢集可以啟用 SSL 強制執行模式。 | 叢集可以啟用 SSL 強制執行模式。 | 如要遷移,資料庫遷移服務會要求您停用來源叢集的 SSL 強制執行模式。 |
下一節將詳細說明執行主要版本升級的程序,包括遷移資料。
就地升級主要版本
就地升級會更新現有叢集,您不必設定任何額外叢集。詳情請參閱「就地升級資料庫主要版本」。
使用檔案式資料匯出功能進行遷移
如要使用與較高主要版本 PostgreSQL 相容的資料庫伺服器,您必須在相同區域中建立功能相同的叢集,然後將資料遷移至該叢集。
步驟如下:
建立叢集,並設定要使用的 PostgreSQL 相容性主要版本。在與目前叢集相同的區域中建立叢集。
使用新的主要版本設定新叢集,以符合目前叢集的設定:
-
建立次要叢集時,不必指定 PostgreSQL 主要版本號碼。AlloyDB 會將主要叢集的 PostgreSQL 版本套用至所有次要叢集。
更新新叢集的資料庫旗標,使其與目前叢集的旗標設定相符。
應用程式可以透過新 IP 位址連線至新叢集的執行個體。
使用資料庫遷移服務進行遷移
您可以使用資料庫遷移服務,將 PostgreSQL 資料庫中的資料移至 AlloyDB 叢集。資料庫遷移服務不提供專為 AlloyDB 資料來源設計的設定,但 AlloyDB 與 PostgreSQL 相容,因此您可以使用一般 PostgreSQL 來源的設定。
這個遷移路徑並非就地升級,而是會建立具有不同 IP 位址的新叢集。建議您先複製叢集並執行測試遷移,確認應用程式是否與這個方法相容。
重要事項
準備使用資料庫遷移服務遷移前,請仔細考量下列限制,確保這項遷移路徑符合您的升級情境。
- 限制
-
- 不支援設有 Private Service Connect 的 AlloyDB 執行個體。
- 遷移期間,您無法對來源叢集執行執行個體更新或容錯移轉要求。這些作業可能會導致遷移工作失敗。
- PostgreSQL 至 AlloyDB 遷移作業的所有標準限制均適用於這個情境。如需其他限制的完整清單,請參閱資料庫遷移服務說明文件中的「 已知限制」。
- 遷移作業準確度
- 系統不會遷移特定資料類型,例如大型物件。如需支援資料的完整清單,請參閱資料庫遷移服務說明文件中的「 遷移作業準確度」。
- 來源資料庫鎖定和停機時間
-
資料庫遷移服務會使用持續遷移作業,將資料移至 AlloyDB 叢集。這類遷移作業會在建立初始資料轉儲時,對來源資料庫資料表造成短暫 (不到 10 秒) 的鎖定,一次一個。
遷移作業完成後,您必須停止來源資料庫的所有寫入作業,才能將應用程式切換至新叢集。這項程序需要一些停機時間。如需更詳細的總覽,請參閱資料庫遷移服務說明文件中的「 持續遷移」一節。
- 複製限制
-
遷移工作進入變更資料擷取 (CDC) 階段後,資料庫遷移服務會持續複製寫入來源資料庫的新資料。
如果資料表沒有主鍵,在 CDC 階段只會複製
INSERT陳述式。在 CDC 階段,對沒有主鍵的資料表執行的任何CREATE、UPDATE或DELETE動作,都必須在目的地資料庫手動重新建立,以免資料遺失。
事前準備
啟用 Database Migration Service API (如果尚未啟用)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。-
確認您具備下列專案角色:
- 下列其中一項:
- AlloyDB > AlloyDB 管理員
- 基本 > 擁有者
- 基本 > 編輯器
- 您也必須在使用的 Google Cloud 專案中具備
compute.networks.list權限。如要取得這項權限,同時遵循最小權限原則,請要求管理員授予您「Compute Engine」>「Compute 網路使用者」角色 (roles/compute.networkUser)。 - 資料庫遷移管理員
檢查角色
-
前往 Google Cloud 控制台的「IAM」頁面。
前往「IAM」頁面 - 選取專案。
-
在「Principal」(主體) 欄中,找出所有代表您或您所屬群組的資料列。如要瞭解您所屬的群組,請與管理員聯絡。
- 在指定或包含您的所有資料列中,查看「Role」(角色) 欄,確認角色清單是否包含必要角色。
授予角色
-
前往 Google Cloud 控制台的「IAM」頁面。
前往「IAM」頁面 - 選取專案。
- 按一下「Grant access」(授予存取權)。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是指 Google 帳戶的電子郵件地址。
- 按一下「Select a role」(選取角色),然後搜尋角色。
- 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
- 按一下「Save」(儲存)。
- 下列其中一項:
- 確認您使用的 Google Cloud 專案中的虛擬私有雲 (VPC) 網路已設定為 AlloyDB 的私人服務存取權。
- 決定要在哪個區域建立目的地叢集。所有資料庫遷移服務實體 (連線設定檔、遷移工作) 都必須在目的地叢集所在的區域建立。
- 準備要連線至叢集的資料庫使用者,並在來源資料庫執行遷移陳述式。這個資料庫使用者需要一組特定的權限和角色。建議您 建立新的資料庫使用者,並指定該使用者專門執行遷移作業。
設定來源執行個體
資料庫遷移服務需要特定設定,才能連線並將資料從來源叢集複製到新的目的地叢集。
如要設定 AlloyDB 來源執行個體,請按照下列步驟操作:
-
在來源叢集的每個執行個體上
設定資料庫旗標。
請使用下列值:
標記 值 alloydb.logical_decoding設為 on。alloydb.enable_pglogical設為 on。max_replication_slots這個旗標定義了來源執行個體可支援的複製運算單元數量上限。這個旗標的最小值為 50。請使用下列公式計算最小值:
(the number of databases in your instance) * (the number of simultaneous migration jobs you want to perform) + (slots reserved for table synchronization) + (the number of replication slots that you use for your read replicas)假設有以下情況:
- 來源中沒有唯讀副本。
- 主要來源執行個體上有 30 個資料庫。
- 您想為來源叢集建立 2 項遷移工作。
- 您想使用 10 個運算單元進行資料表複製作業。
max_replication_slots的數量必須至少為70,計算方式為30 * 2 + 10 + 0。max_wal_senders請將這個旗標設為比 max_replication_slots值加上執行個體已使用的傳送者數量多至少 10。舉例來說,如果您將
max_replication_slots旗標設為70,且已使用 2 個傳送者,則max_wal_senders應至少為82(計算方式為70 + 10 + 2 = 82)。max_worker_processes請將這個旗標設為至少等於執行個體中的資料庫數量,加上已使用的 max_worker_processes數量。舉例來說,如果來源執行個體上有 30 個資料庫,且不使用任何 worker 程序,請將這個旗標設為
30。 - 停用來源叢集中每個執行個體的 SSL 強制執行模式。
設定來源資料庫
您必須安裝 pglogical 擴充功能,並在執行個體的每個資料庫中,將必要權限授予指定為遷移使用者的資料庫使用者。
如要設定資料庫,請按照下列步驟操作:
- 使用
psql用戶端連線至預設postgres資料庫。 執行下列指令,安裝
pglogical擴充功能:CREATE EXTENSION IF NOT EXISTS pglogical;授予遷移資料庫使用者所有結構定義的權限,除了
information結構定義和名稱開頭為pg_前置字元的結構定義。執行下列陳述式:GRANT USAGE on SCHEMA SCHEMA_NAME to USER_NAME; GRANT SELECT on ALL TABLES in SCHEMA SCHEMA_NAME to USER_NAME; GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA_NAME to USER_NAME;更改下列內容:
SCHEMA_NAME:資料庫中現有的結構定義名稱USER_NAME:您在「事前準備」一節中準備的資料庫使用者名稱
對資料庫中的每個結構定義重複執行這個步驟,但不包括
information結構定義,以及名稱開頭為pg_前置字元的結構定義。您可以使用\dn中繼指令列出所有資料庫結構定義。授予其餘必要權限。執行下列陳述式:
GRANT USAGE on SCHEMA pglogical to PUBLIC; GRANT SELECT on ALL TABLES in SCHEMA pglogical to USER_NAME; ALTER USER USER_NAME with REPLICATION;將
USER_NAME替換為您在「事前準備」一節中準備的資料庫使用者名稱。連線至執行個體中的所有其他資料庫,並重複步驟 2、3 和 4。
您可以使用
\list中繼指令,列出執行個體中的所有資料庫。您可以使用
\connect DATABASE_NAME指令切換至其他資料庫,而不必重設psql用戶端連線。
針對來源 AlloyDB 叢集中的每個執行個體,重複執行這項程序。
在資料庫遷移服務中執行遷移作業
步驟如下:
為 AlloyDB 叢集 建立來源連線設定檔。請使用下列值:
- 「資料庫引擎」:選取「PostgreSQL」。
- Hostname/IP:使用叢集中主要執行個體的 IP 位址。
- 使用者名稱/密碼:輸入您在「事前準備」一節中準備的資料庫使用者憑證。
- 「Port」(通訊埠):輸入
5432。 - 區域:選取目的地叢集所在的區域。
- 加密類型:選取「無」。
建立並執行遷移工作。
您可以預先建立新的 AlloyDB 叢集,或在設定遷移工作時,由資料庫遷移服務為您建立叢集。詳情請參閱資料庫遷移服務說明文件中的「遷移工作總覽」。
如要讓資料庫遷移服務在設定遷移工作期間,為您建立目的地叢集,請按照「建立遷移工作至新的目的地執行個體」程序中的步驟操作。
如要在資料庫遷移服務以外建立目的地叢集,請按照「建立遷移工作,遷移至現有目的地執行個體」程序中的步驟操作。
遷移工作的狀態變更為「CDC」CDC時,請升級遷移工作。您可以在遷移總覽頁面查看遷移工作狀態。請參閱資料庫遷移服務說明文件中的「查看遷移工作」。
這項操作會使目的地叢集退出啟動程序模式 (也就是說,目的地 AlloyDB 叢集不再處於唯讀狀態)。
(選用) 檢查沒有主鍵的資料表是否缺少陳述式。
如果來源 AlloyDB 資料庫包含沒有主鍵的資料表,您可能需要手動遷移任何缺少的
UPDATE或DELETE陳述式。請參閱資料庫遷移服務說明文件中的「遷移非主鍵資料表的 UPDATE 和 DELETE 作業」。將應用程式切換至新叢集。應用程式可以透過新 IP 位址連線至新叢集的執行個體。