使用傳輸在兩個 Amazon RDS 資料庫執行個體之間傳輸 PostgreSQL 資料庫 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用傳輸在兩個 Amazon RDS 資料庫執行個體之間傳輸 PostgreSQL 資料庫

由勞納克里沙巴(AWS)和吉泰爾庫馬爾(AWS)創建

環境:PoC 或試點

來源:數據庫:關係

目標:Amazon RDS for PostgreSQL

R 類型:搬遷

工作負載:開源

技術:移轉;資料庫

AWS 服務:Amazon RDS

Summary

此模式說明在兩個適用於 PostgreSQL 資料庫執行個體的 Amazon Relational Database Service (Amazon RDS) 之間移轉極大型資料庫的步驟,方法是使用 pg _port 延伸模組。此擴充套件提供實體的傳輸機制來移動每個資料庫。透過以最少的處理流式傳輸資料庫檔案,它提供了一種極快速的方法,在資料庫執行個體之間移轉大型資料庫,而且停機 此擴充功能使用提取模型,其中目標資料庫執行個體從來源資料庫執行個體匯入資料庫。

先決條件和限制

先決條件

  • 兩個資料庫執行個體都必須執行相同的 PostgreSQL 主要版本。

  • 資料庫不得存在於目標上。否則,傳輸會失敗。

  • 除了 pg_ port 之外,不得在來源資料庫中啟用任何擴充功能。

  • 所有來源資料庫物件都必須位於預設 pg_default 表格空間中。

  • 來源資料庫執行個體的安全群組應允許來自目標資料庫執行個體的流量。

  • 安裝 PostgreSQL 用戶端 (例如 psql),或PgAdmin與 Amazon RDS PostgreSQL 資料庫執行個體搭配使用。您可以在本機系統中安裝用戶端,也可以使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。在這種模式中,我們在 EC2 實例上使用 psql。

限制

  • 您無法在不同主要版本的 Amazon RDS 之間傳輸資料庫。

  • 來源資料庫的存取權限和擁有權不會轉移至目標資料庫。

  • 您無法在僅供讀取複本上或僅供讀取複本的父項執行個體上傳輸資料庫。

  • 您不能在計劃使用此方法傳輸的任何資料庫資料表中使用 reg 資料類型。

  • 您可以在資料庫執行個體上同時執行多達 32 個總傳輸 (包括匯入和匯出)。

  • 您無法重新命名或包含/排除表格。一切都按原樣遷移。

小心

  • 在移除擴充功能之前先進行備份,因為移除擴充功能也會移除相依物件以及對資料庫作業至關重要的一些資料。

  • 當您決定 pg_ port 的工作程式數目和work_mem值時,請考慮在來源執行個體上其他資料庫上執行的執行個體類別和處理序。

  • 傳輸開始時,來源資料庫上的所有連線都會結束,並將資料庫置於唯讀模式。

附註:傳輸在一個資料庫上執行時,不會影響相同伺服器上的其他資料庫。

產品版本

架構

在 Amazon RDS 資料庫執行個體之間傳輸 PostgreSQL 資料庫

工具

  • pg_port 提供了一個物理傳輸機制來移動每個數據庫。藉由以最少的處理方式串流資料庫檔案,實體傳輸會比傳統傾印和載入程序更快地移動資料,而且停機時間最少。PostgreSQL 可傳輸的資料庫使用提取模式,也就是目的地的資料庫執行個體從來源資料庫執行個體輸入資料庫。您可以在準備來源和目標環境時在資料庫執行個體上安裝此延伸模組,如此模式中所述。

  • psql 可讓您連接至您的 PostgreSQL 資料庫執行個體,並使用這些執行個體。若要在您的系統上安裝 psql,請參閱下載頁面。

史诗

任務描述所需技能

為目標系統建立參數群組。

指定可將其識別為目標參數群組的群組名稱;例如,pgtarget-param-group如需指示,請參閱 Amazon RDS 文件

DBA

修改參數群組的參數。

設定下列參數:

  1. 加入pg_transportshared_preload_libraries參數。

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. 設定 pg_transport.num_workers 參數。選擇您要用來執行傳輸的工作者數目。您設定的值會決定將在來源中建立的 transport.send_file Worker 數目。

  3. 將的值增加max_worker_processes到的值的三倍以上pg_transport.num_workers。例如,如果您將值設定pg_transport.num_workers為 4,則max_worker_processes值應至少為 13。如果失敗,pg_port 會建議使用最小值。 

  4. 設定pg_transport.timing為 1。此設定可讓您在傳輸期間報告計時資訊。

  5. 設定 pg_transport.work_mem 參數。此參數指定要配置給每個 Worker 的最大記憶體。預設值為 128 MB。

如需這些參數的詳細資訊,請參閱 Amazon RDS 文件

DBA
任務描述所需技能

建立來源系統的參數群組。

指定可將其識別為來源參數群組的群組名稱;例如,pgsource-param-group如需指示,請參閱 Amazon RDS 文件

DBA

修改參數群組的參數。

設定下列參數:

  1. 加入pg_transportshared_preload_libraries參數。

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. 設定 pg_transport.num_workers 參數。此參數在目標中定義的值會決定要使用的 transport.send_file Worker 數目。如果您有在此執行個體上執行的匯入,請增加此值,但請考慮已在執行的 Worker 數目。

  3. max_worker_processes將的值增加到目標上的值的三倍以pg_transport.num_workers上。例如,如果您將目標上pg_transport.num_workers的值設定為 4,則來源上的max_worker_processes值應至少為 13。如果失敗,pg_port 會建議使用最小值。 

  4. 設定 pg_transport.work_mem 參數。此參數指定要配置給每個 Worker 的最大記憶體。預設值為 128 MB。

如需這些參數的詳細資訊,請參閱 Amazon RDS 文件

DBA
任務描述所需技能

建立新的 Amazon RDS 資料庫執行個體,以將您的來源資料庫傳輸到該執行個體。

根據您的業務需求判斷執行個體類別和 PostgreSQL 版本。

DBA, 系統管理員, 資料庫架構師

修改目標的安全群組,以允許從 EC2 執行個體在資料庫執行個體連接埠上進行連線。

根據預設,PostgreSQL 執行個體的連接埠是 5432。如果您使用其他連接埠,則必須為 EC2 執行個體開啟與該連接埠的連線。

DBA, 系統管理員

修改例證,並指定新目標參數群組。

例如 pgtarget-param-group

DBA

重新啟動目標 Amazon RDS 資料庫執行個體。

參數shared_preload_librariesmax_worker_processes是靜態參數,需要重新啟動實例。

DBA, 系統管理員

使用 psql 從 EC2 實例 Connect 到數據庫。

使用 命令: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

建立傳輸延伸模組。

以具有該rds_superuser角色的使用者身分執行下列查詢:

create extension pg_transport;
DBA
任務描述所需技能

修改來源的安全群組,以允許來自 Amazon EC2 執行個體和目標資料庫執行個體的資料庫執行個體連接埠

根據預設,PostgreSQL 執行個體的連接埠是 5432。如果您使用其他連接埠,則必須為 EC2 執行個體開啟與該連接埠的連線。

DBA, 系統管理員

修改例證並指定新來源參數群組。

例如 pgsource-param-group

DBA

重新啟動來源 Amazon RDS 資料庫執行個體。

參數shared_preload_librariesmax_worker_processes是靜態參數,需要重新啟動實例。

DBA

使用 psql 從 EC2 實例 Connect 到數據庫。

使用 命令: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

建立 pg_port 延伸模組,並從要傳輸的資料庫中移除所有其他擴充功能。

如果來源資料庫上安裝了 pg_port 以外的任何副檔名,傳輸將會失敗。此命令必須由具有該rds_superuser角色的使用者執行。

DBA
任務描述所需技能

執行乾運行。

首先使用該transport.import_from_server功能執行乾運行:

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

此函數的最後一個參數(設置為true)定義了空運行。

此函數會顯示執行主要傳輸時會看到的任何錯誤。請先解決錯誤,然後再執行主要傳輸。

DBA

如果無法執行成功,請初始化資料庫傳輸。

執行transport.import_from_server函數以執行傳輸。它連接到源並導入數據。 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

此函數的最後一個參數(設置為false)表示這不是乾運行。

DBA

執行傳輸後的步驟。

資料庫傳輸完成之後:

  • 驗證目標環境中的資料。

  • 將所有角色和權限新增至目標。

  • 視需要啟用目標和來源中所有必要的擴充功能。

  • 還原max_worker_processes參數的值。

DBA

相關資源