本頁面詳細說明 AlloyDB for PostgreSQL 的資料庫伺服器版本更新程序,並說明如何將資料遷移至與較新版 PostgreSQL 相容的叢集。
如要進一步瞭解如何建立叢集,請參閱「建立叢集及其主要執行個體」。
叢集和 PostgreSQL 版本相容性
建立 AlloyDB 叢集時,請選擇與叢集執行個體相容的 PostgreSQL 主要版本。預設值為 17。
AlloyDB 會在定期維護期間自動升級資料庫子版本。舉例來說,如果您建立的叢集相容於 17,AlloyDB 會將資料庫伺服器升級至 17 的最新子版本。
不過,如要升級 PostgreSQL 版本的主要版本,您必須自行規劃、測試及執行升級作業。
您可以透過幾種方法升級叢集的主要版本:
- 建議使用就地升級主要版本。
- 透過檔案匯出資料來遷移資料。
- 使用資料庫遷移服務。
每種升級解決方案各有優缺點。請參閱下表簡要比較,協助您為自己的情境選擇合適的方法。
| 直接升級主要版本 | 以檔案為基礎匯出資料 | 使用資料庫移轉服務進行遷移 |
|---|---|---|
| 叢集 (包括讀取執行個體) 會升級至所選的較高主要版本。 | 檔案型匯出作業會移動資料庫的單次快照。 | 資料庫遷移服務會在遷移程序中持續複製資料,降低新叢集遺失資料的機率。 |
| 在升級前階段,您可以繼續處理叢集。 | 應用程式會經歷較長的停機時間,從您匯出資料時開始。在新叢集完全運作之前,您無法在原始叢集接受資料庫寫入作業。 | 應用程式停機時間較短,從您想切換應用程式以使用新叢集時開始。 |
| 視結構而定,升級程序期間的停機時間大約為 20 分鐘以上。升級後,您可以使用相同的 IP 位址存取叢集。 | 您可以更精細地控管要匯出的資料,並選擇不遷移特定資料表或其他實體。 | 資料庫遷移服務會自動遷移執行個體中的所有資料庫,以及叢集中的所有執行個體。您無法選擇從遷移資料中排除特定資料表或檢視畫面。 |
| 叢集可以啟用 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動作,則必須在目的地資料庫中手動重新建立這些動作,以免資料遺失。
事前準備
啟用 資料庫遷移服務 API。
啟用 API 時所需的角色
如要啟用 API,您需要服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。-
請確認您在專案中具備下列角色:
- 下列其中一項:
- Cloud AlloyDB > Cloud AlloyDB 管理員
- 「基本」>「擁有者」
- 基本 > 編輯者
- 此外,您還必須在使用的 Google Cloud 專案中具備
compute.networks.list權限。如要在遵循最小權限原則的情況下取得這項權限,請要求管理員授予您「Compute Engine」>「Compute Network User」(Compute 網路使用者) 角色 (roles/compute.networkUser)。 - 資料庫遷移管理員
檢查角色
-
前往 Google Cloud 控制台的「IAM」頁面。
前往「IAM」頁面 - 選取專案。
-
在「主體」欄中,找出所有識別您或您所屬群組的資料列。如要瞭解自己所屬的群組,請與管理員聯絡。
- 針對指定或包含您的所有列,請檢查「角色」欄,確認角色清單是否包含必要角色。
授予角色
-
前往 Google Cloud 控制台的「IAM」頁面。
前往「IAM」頁面 - 選取專案。
- 按一下「Grant access」(授予存取權)。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是指 Google 帳戶的電子郵件地址。
- 按一下「選取角色」,然後搜尋角色。
- 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
- 按一下「Save」(儲存)。
- 下列其中一項:
- 確認您使用的 Google Cloud 專案中的虛擬私有雲網路已設定私人服務存取權,可連線至 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 you currently 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 flag設為70,且已使用 2 個寄件者,則max_wal_senders至少應為82(計算方式為70 + 10 + 2 = 82)。max_worker_processes請將這個旗標設為至少等於執行個體中的資料庫數量,加上您已使用的 max_worker_processes數量。舉例來說,如果來源執行個體上有 30 個資料庫,且未使用任何工作程序,請將這個標記設為
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;更改下列內容:
針對資料庫中的每個結構定義 (
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。
您可以使用
\listmeta 指令,列出執行個體中的所有資料庫。您可以使用
\connect {database_name_here}指令切換至其他資料庫,不必重設psql用戶端連線。
針對來源 AlloyDB 叢集中的每個執行個體重複執行這項程序。
在資料庫移轉服務中執行遷移作業
步驟如下:
為 AlloyDB 叢集 建立來源連線設定檔。請使用下列值:
- 「資料庫引擎」:選取「PostgreSQL」。
- 主機名稱/IP:使用叢集主要執行個體的 IP 位址。
- 使用者名稱/密碼:輸入您在「事前準備」一節中準備的資料庫使用者憑證。
- 「Port」(通訊埠):輸入
5432。 - 區域:選取目的地叢集所在的區域。
- 加密類型:選取「無」。
建立並執行遷移工作。
您可以預先建立新的 AlloyDB 叢集,也可以在設定遷移工作時,讓資料庫遷移服務為您建立叢集。詳情請參閱資料庫移轉服務說明文件中的「移轉作業總覽」。
如要讓資料庫遷移服務在設定遷移工作時建立目的地叢集,請按照「建立遷移工作,將資料遷移至新的目的地執行個體」程序中的步驟操作。
如要在資料庫遷移服務外部建立目的地叢集,請按照「建立遷移工作至現有目的地執行個體」程序中的步驟操作。
當遷移工作狀態變更為「CDC」時,請升級遷移工作。CDC您可以在遷移作業總覽頁面中查看遷移工作狀態。請參閱資料庫遷移服務說明文件中的「查看遷移工作」。
這項操作會導致目的地叢集退出啟動程序模式 (也就是說,目的地 AlloyDB 叢集不再處於唯讀狀態)。
(選用) 檢查沒有主鍵的資料表是否缺少陳述式。
如果來源 AlloyDB 資料庫包含沒有主鍵的資料表,您可能需要手動遷移任何缺少的
UPDATE或DELETE陳述式。請參閱資料庫移轉服務說明文件中的「遷移非主鍵資料表的 UPDATE 和 DELETE 作業」。將應用程式切換至新的叢集。您的應用程式現在可以連線至新叢集的執行個體,並使用新的 IP 位址。