教學課程:使用移轉服務預覽版從 Amazon RDS for PostgreSQL 上線移轉至適用於 PostgreSQL 的 Azure 資料庫
本文探討如何將 PostgreSQL 資料庫從 Amazon RDS for PostgreSQL 上線移轉至適用於 PostgreSQL 的 Azure 資料庫。
適用於 PostgreSQL 的 Azure 資料庫中的移轉服務是已整合到 Azure 入口網站和 Azure CLI 中的完全受控服務。 其設計目的是要簡化適用於 PostgreSQL 的 Azure 資料庫伺服器的移轉旅程圖。
- 必要條件
- 執行移轉。
- 監視移轉
- 完全移轉
- 完成時檢查移轉
必要條件
若要完成移轉,您需要下列必要條件:
使用適用於 PostgreSQL 的 Azure 資料庫移轉服務開始移轉之前,請務必滿足下列必要條件,特別針對線上移轉案例所設計。
驗證來源版本
來源 PostgreSQL 伺服器版本必須是 9.5 或更新版本。
如果來源 PostgreSQL 版本小於 9.5,請在開始移轉之前將其升級至 9.5 或更高版本。
安裝 test_decoding - 來源設定
- test_decoding 會透過邏輯解碼機制接收 WAL,並將其解碼為所執行作業的文字表示法。
- 在 Amazon RDS for PostgreSQL 中,test_decoding 外掛程式已預安裝且準備好進行邏輯複寫。 這可讓您輕鬆地設定邏輯複寫位置及資料流 WAL 變更,以協助使用案例,例如異動資料擷取 (CDC) 或複寫至外部系統。
- 如需測試解碼外掛程式的詳細資訊,請參閱 PostgreSQL 文件
進行目標設定
- 移轉之前,必須先建立適用於 PostgreSQL 的 Azure 資料庫 – 彈性伺服器。
- 針對適用於 PostgreSQL 的 Azure 資料庫 – 彈性伺服器佈建的 SKU 應與來源相符。
- 若要建立新的適用於 PostgreSQL 的 Azure 資料庫,請造訪建立適用於 PostgreSQL 的 Azure 資料庫
啟用 CDC 作為來源
test_decoding
邏輯解碼外掛程式會從來源擷取變更的記錄。- 若要允許移轉使用者存取複寫權限,請執行下列命令:
GRANT rds_replication TO <<username>>;
在來源 PostgreSQL 執行個體中,建立新的參數群組來修改下列參數:
- 設定
rds.logical_replication = 1
- 將
max_replication_slots
設定為大於一的值;此值應大於針對移轉選取的資料庫數目。 - 將
max_wal_senders
設定為大於一的值。 它應該至少與max_replication_slots
相同,加上執行個體上已使用的寄件人數目。 wal_sender_timeout
參數會結束非使用中超過指定毫秒數的複寫連線。 AWS RDS for PostgreSQL 執行個體的預設值為30000 milliseconds (30 seconds)
。 將值設定為 0 (零) 將停用逾時機制且是移轉的有效設定。
- 設定
在目標彈性伺服器中,若要防止在線移轉用盡儲存體來儲存記錄,請確定您有足夠的資料表空間使用佈建的受控磁碟。 若要達成此目的,請在移轉期間停用伺服器參數
azure.enable_temp_tablespaces_on_local_ssd
,並在移轉後還原至原始狀態。
進行網路設定
網路設定對於移轉服務正常運作至關重要。 請確定來源 PostgreSQL 伺服器可以與目標適用於 PostgreSQL 的 Azure 資料庫伺服器通訊。 下列網路設定對於成功移轉而言非常重要。
如需網路設定的相關資訊,請參閱移轉服務的網路指南。
啟用延伸模組
若要確保使用 適用於 PostgreSQL 的 Azure 資料庫 中的移轉服務成功移轉,您可能需要驗證來源 PostgreSQL 實例的延伸模組。 延伸模組提供應用程式可能需要的功能和功能。 在起始移轉程式之前,請務必確認來源 PostgreSQL 實例上的延伸模組。
在 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的目標實例中,啟用來源 PostgreSQL 實例中所識別的支持擴充功能。
如需詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫 中的延伸模組。
注意
當您對 參數進行任何變更 shared_preload_libraries
時,需要重新啟動。
檢查伺服器參數
這些參數不會自動移轉至目標環境,必須手動設定。
藉由存取 Azure 入口網站中的 [伺服器參數] 區段,並據以手動更新參數值,讓來源 PostgreSQL 資料庫與適用於 PostgreSQL 的 Azure 資料庫有相符的伺服器參數值。
儲存參數變更,並視需要重新啟動適用於 PostgreSQL 的 Azure 資料庫以套用新的設定。
檢查使用者和角色
在移轉至適用於 PostgreSQL 的 Azure 資料庫時,務必要分開解決使用者和角色的移轉,因為這些項目的移轉需要您手動介入:
手動移轉使用者和角色:使用者及其相關聯的角色必須以手動方式移轉至適用於 PostgreSQL 的 Azure 資料庫。 為了能夠進行此程序,您可以使用
pg_dumpall
公用程式搭配--globals-only
旗標來匯出全域物件,例如角色和使用者帳戶。 請執行下列命令,並將<<username>>
取代為實際的使用者名稱,並將<<filename>>
取代為所需的輸出檔案名稱:pg_dumpall --globals-only -U <<username>> -f <<filename>>.sql
超級使用者角色的限制:適用於 PostgreSQL 的 Azure 資料庫不支援超級使用者角色。 因此,具有超級使用者權限的使用者必須先移除這些權限,才能進行移轉。 請務必據此調整權限和角色。
藉由遵循這些步驟,您可以確保使用者帳戶和角色正確移轉至適用於 PostgreSQL 的 Azure 資料庫,而不會遇到與超級使用者限制相關的問題。
在目標中停用高可用性 (可靠性) 和讀取複本
請務必要在目標環境中停用高可用性 (可靠性)和讀取複本。 請在移轉完成後,才啟用這些功能。
藉由遵循這些指導方針,可協助確保移轉程序順暢進行,而不會因為 HA 和讀取複本而增添變數。 移轉完成且資料庫穩定之後,便可以繼續啟用這些功能,以增強 Azure 中資料庫環境的可用性和可擴縮性。
執行移轉。
您可以使用 Azure 入口網站或 Azure CLI 來進行移轉。
Azure 入口網站提供簡單且直覺式的精靈體驗,可引導您進行移轉。 遵循本教學課程中所述的步驟,您可以將資料庫順暢地傳輸到適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器,並利用其強大的功能和可擴縮性。
若要使用 Azure 入口網站進行移轉,請先設定移轉工作、連線到來源和目標,然後執行移轉。
設定移轉工作
移轉服務會在 Azure 入口網站上提供簡單的精靈型體驗。 以下說明如何開始:
開啟 Web 瀏覽器,然後移至入口網站。 輸入您的認證來登入。 預設檢視是您的服務儀表板。
移至您的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器目標。
在彈性伺服器的 [概觀] 索引標籤左側功能表上,向下捲動至 [移轉] 並加以選取。
選取 [建立] 按鈕,從 Amazon RDS for PostgreSQL 移轉至適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如果這是您第一次使用移轉服務,會出現空白方格,並出現提示以開始您的第一次移轉。
如果您已建立移轉至適用於 PostgreSQL 的 Azure 資料庫目標,方格會包含嘗試移轉的相關資訊。
選取建立按鈕。 然後,您會瀏覽以精靈為基礎的索引標籤系列,以從 PostgreSQL 來源執行個體建立移轉至此適用於 PostgreSQL 的 Azure 資料庫目標。
設定
第一個索引標籤是 [設定] 索引標籤,使用者必須提供移轉詳細資料,例如用來起始移轉的移轉名稱來源類型。
移轉名稱是至此彈性伺服器目標的每個移轉的唯一識別碼。 此欄位只接受英數字元,不接受任何特殊字元,但連字號 (-) 除外。 名稱的開頭不能是連字號,而且對於目標伺服器而言應該是唯一的。 對相同彈性伺服器目標的任兩個移轉不能有相同的名稱。
來源伺服器類型 - 視 PostgreSQL 來源而定,您可以選取對應的來源類型,例如雲端式 PostgreSQL 服務、內部部署設定或虛擬機器。
移轉選項可讓您在觸發移轉前執行驗證。 您可以挑選下列任何選項:
- 驗證:檢查您的伺服器和資料庫整備程度,以移轉至目標。
- 移轉:略過驗證並開始移轉。
- 驗證並移轉—在觸發移轉之前執行驗證。 僅在沒有驗證失敗時,才會觸發移轉。
在執行移轉前先執行預先移轉驗證時,選擇 [驗證] 或 [驗證並移轉] 選項是很好的做法。 若要深入了解移轉前驗證,請參閱此文件。
- 移轉模式可讓您挑選移轉的模式。 預設選項為 [離線]。
選取 [下一步:連線至來源] 按鈕。
選取執行階段伺服器
移轉執行階段伺服器是移轉服務內的特製化功能,其設計目的是在移轉期間作為中繼伺服器。 它是個別的適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體,不是目標伺服器,但用來協助從只能透過私人網路存取的來源環境移轉資料庫。
如需執行階段伺服器的詳細資訊,請造訪移轉執行階段伺服器。
連線至來源
[連線至來源] 索引標籤會提示您提供與 [設定] 索引標籤中的所選來源相關的詳細資料,這是資料庫的來源。
- 伺服器名稱 - 提供來源 PostgreSQL 執行個體的主機名稱或 IP 位址
- 連接埠 - 來源伺服器的連接埠號碼
- 伺服器管理員登入名稱 - 來源 PostgreSQL 伺服器的使用者名稱
- 密碼 - 來源 PostgreSQL 伺服器的密碼
- SSL 模式—支援的值有偏好和必要。 當來源 PostgreSQL 伺服器上的 SSL 為 OFF 時,使用 SSLMODE=prefer。 如果來源伺服器上的 SSL 是 ON,則使用 SSLMODE=require。 您可以在 Postgresql.conf 檔案中確定 SSL 值。
- 測試連線—執行目標與來源之間的連線能力測試。 連線成功後,使用者可以繼續進行下一個步驟。 否則,我們必須識別目標與來源之間的網路問題,並確認來源的使用者名稱/密碼。 建立測試連線需要幾分鐘的時間。
測試連線成功後,請選取 [下一步:選取移轉目標]
選取移轉目標
[選取移轉目標] 索引標籤會顯示彈性伺服器目標的中繼資料,例如訂用帳戶名稱、資源群組、伺服器名稱、位置和 PostgreSQL 版本。
- 管理使用者名稱 - 目標 PostgreSQL 伺服器的管理使用者名稱
- 密碼 - 目標 PostgreSQL 伺服器的密碼
- 自定義 FQDN/IP (選擇性):自定義 FQDN/IP 欄位是選擇性的,而且當目標位於自訂 DNS 伺服器後方或具有自定義 DNS 命名空間時,可以使用它,使其只能透過特定的 FQDN 或 IP 位址存取。 例如,如果自定義 DNS 伺服器包含 DNS 區域
postgres.database.azure.com
或將此區域的查詢轉送至168.63.129.16
,則這可能包含 、198.1.0.2
或 PostgreSQL FQDN 之類的flexibleserver.postgres.database.azure.com
專案flexibleserver.example.com
,其中 FQDN 會在 Azure 公用或私人 DNS 區域中解析。 - 測試連線 - 執行目標與來源之間的連線能力測試。 連線成功後,使用者可以繼續進行下一個步驟。 否則,我們必須識別目標與來源之間的網路問題,並確認目標的使用者名稱/密碼。 測試連線會花幾分鐘的時間在目標與來源之間建立連線。
測試連線成功後,請選取 [下一步:選取要移轉的資料庫]
選取要移轉的資料庫
在此索引標籤下,使用者資料庫的清單位於設定索引標籤中選取的來源伺服器內。您可以在單一移轉嘗試中,選取並移轉最多八個資料庫。 如果有八個以上的使用者資料庫,則會對下一組資料庫重複來源和目標伺服器之間的移轉流程。
選取資料庫之後,請選取 [下一步:摘要]
摘要
[摘要] 索引標籤會摘要說明用於建立驗證或移轉的所有來源和目標詳細資料。 檢閱詳細資料,然後選取 [開始] 按鈕。
監視移轉
選取 [開始] 按鈕之後,通知將會在幾秒鐘內顯示,表示已成功驗證或建立移轉。 系統接著會自動將您重新導向至彈性伺服器的 [移轉] 頁面,該頁面具有最近所建立驗證或移轉的新項目。
顯示移轉的方格具有以下資料行:名稱、狀態、移轉模式、移轉類型、來源伺服器、來源伺服器類型、資料庫、持續時間和開始時間。 這些項目會以開始時間的遞減順序顯示,最上方為最近的項目。 您可以使用 [重新整理] 按鈕來重新整理驗證或移轉的狀態。 請選取方格中的移轉名稱,以查看相關聯的詳細資料。
當建立驗證或移轉時,其會移至 InProgress 狀態和 PerformingPreRequisiteSteps 子狀態。 此工作流程會花 2 到 3 分鐘的時間來設定移轉基礎結構和網路連線。
移轉詳細資料
在 [設定] 索引標籤中,我們已將移轉選項選取為 [驗證並移轉]。 在此案例中,會先執行驗證再開始移轉。 PerformingPreRequisiteSteps 子狀態完成之後,工作流程會移至 Validation in Progress 的子狀態。
- 如果驗證發生錯誤,移轉會進入 Failed 狀態。
- 如果驗證完成且沒有錯誤,則會開始移轉,且工作流程會移至 Migrating Data 的子狀態。
您可以在執行個體和資料庫層級查看驗證和移轉的結果。
某些可能的移轉狀態:
移轉狀態
State | 描述 |
---|---|
InProgress | 正在設定移轉基礎結構,或正在移轉實際的資料。 |
已取消 | 已取消或已刪除移轉。 |
失敗 | 移轉失敗。 |
驗證失敗 | 驗證失敗。 |
已成功 | 移轉成功且已完成。 |
WaitingForUserAction | 僅適用於線上移轉。 等候使用者動作以執行完全移轉。 |
移轉子狀態
子狀態 | 描述 |
---|---|
PerformingPreRequisiteSteps | 正在設定用於資料移轉的基礎結構。 |
驗證進行中 | 驗證正在進行中。 |
MigratingData | 資料移轉正在進行中。 |
CompletingMigration | 移轉處於完成的最終階段。 |
已完成 | 已完成移轉。 |
失敗 | 移轉失敗。 |
驗證子狀態
子狀態 | 描述 |
---|---|
失敗 | 驗證失敗。 |
已成功 | 驗證成功。 |
警告 | 驗證處於警告狀態。 |
完全移轉
如果同時使用 [移轉] 和 [驗證並移轉],則需要另一個步驟才能完成線上移轉,使用者必須進行完全移轉動作。 完成基底數據的複製/複製之後,移轉會移至 WaitingForUserAction
狀態和 WaitingForCutoverTrigger
子狀態。 在此狀態下,使用者可以選取該移轉,以從入口網站觸發完全移轉。
在起始完全移轉之前,請務必確保:
來源的寫入已停止 -
Latency
值為 0 或接近 0。 您可以自移轉詳細資料取得Latency
資訊,如下所示:latency
值減少至 0 或接近 0latency
值表示目標上次與來源同步的時間。 此時,可以停止寫入來源,且可以起始完全移轉。 如果來源有大量流量,建議先停止寫入,以便讓Latency
接近 0,然後起始完全移轉。 完全移轉作業會將來源的所有暫止的變更套用至目標,並完成移轉。 如果您觸發「完全移轉」,即使是非零Latency,
,複寫仍會停止直到該時間點為止。 所有在完全移轉點之前的來源資料,都會套用至目標。 假設延遲在完全移轉點為 15 分鐘,因此最後 15 分鐘內的所有變更資料都會套用至目標上。 時間將取決於過去 15 分鐘內發生的變更待辦項目。 因此,建議您在觸發完全移轉之前,將延遲移至零或接近零。Migrating Data
子狀態或完全移轉 (在線上移轉中) 成功完成時,移轉就會進入Succeeded
狀態。 如果Migrating Data
子狀態發生問題,移轉就會進入Failed
狀態。
完成時檢查移轉
資料庫完成後,必須手動驗證來源與目標之間的資料,並確認目標資料庫中的所有物件都已成功建立。
移轉之後,便可以執行下列工作:
- 確認彈性伺服器上的資料,並確定其是與來源執行個體完全相同的複本。
- 驗證後,視需要在彈性伺服器上啟用高可用性選項。
- 變更彈性伺服器的 SKU,以符合應用程式需求。 這項變更需要重新啟動資料庫伺服器。
- 如果您有在來源執行個體中變更任何伺服器參數的預設值,請在彈性伺服器中複製這些伺服器參數值。
- 將其他伺服器設定 (例如標籤、警示和防火牆規則 (如果適用的話)) 從來源執行個體複製到彈性伺服器。
- 對應用程式進行變更,以將連接字串指向彈性伺服器。
- 密切監視資料庫效能,確認資料庫是否需要微調效能。