雲原生資料倉儲AnalyticDB PostgreSQL版基於Greenplum構建,並深度最佳化演化,支援向量化計算,在Multi-Master架構下支援交易處理,對外介面完全相容社區版Greenplum。本文介紹如何將自建Greenplum叢集的資料移轉至AnalyticDB PostgreSQL版執行個體。
遷移流程
評估遷移風險,確定遷移方案和計劃。
採購AnalyticDB PostgreSQL版測試執行個體,驗證遷移方案(包含資料移轉驗證和應用遷移驗證)。
採購AnalyticDB PostgreSQL版生產執行個體,遷移自建Greenplum叢集生產庫。
將業務切換到AnalyticDB PostgreSQL版生產執行個體,驗證業務。
注意事項
目前僅支援資料移轉,不支援資料同步,如果遷移過程中新寫入了資料,需要在遷移完成後主動補數。
請盡量在業務停止寫入的情況下進行遷移。如果遷移過程中業務不暫停,資料移轉會對業務效能產生一定影響,且資料移轉速度會降低。
遷移完成後,AnalyticDB PostgreSQL版執行個體會執行ANALYZE來收集統計資訊,以產生合適的執行計畫。執行ANALYZE過程中,Master節點的CPU水位會暫時升高,CPU水位升高的時間由資料量決定。
建立的AnalyticDB PostgreSQL版執行個體的Segment節點數量建議大於或等於源Greenplum叢集的節點數量。如果使用gpcopy進行遷移,節點數量相同的情況下可以獲得最佳遷移速度。
請確認自建Greenplum叢集與AnalyticDB PostgreSQL版執行個體支援的外掛程式(Extension)差異,關於AnalyticDB PostgreSQL版支援的外掛程式,請參見擴充外掛程式列表。
AnalyticDB PostgreSQL版執行個體與Greenplum 4X版本的文法存在部分文法不相容的情況,需要您手動修改。
如果自建Greenplum叢集中有分區表或INHERIT表,建議您從子表粒度遷移。
選擇遷移方法
遷移方法 | 情境 |
自建Greenplum叢集可以訪問AnalyticDB PostgreSQL版執行個體。 重要 AnalyticDB PostgreSQL版儲存彈性模式7.0版和Serverless執行個體暫不支援使用gpcopy遷移資料。 | |
AnalyticDB PostgreSQL版執行個體可以訪問自建Greenplum叢集。 | |
自建Greenplum叢集和AnalyticDB PostgreSQL版執行個體無法互相訪問。 |
使用gpcopy遷移資料
提交工單聯絡阿里雲支援人員,並將AnalyticDB PostgreSQL版執行個體ID、自建Greenplum叢集的IP地址和連接埠號碼、可用於遷移資料的Greenplum superuser許可權帳號和安裝自建Greenplum叢集的伺服器的IP地址提供給阿里雲支援人員。
在AnalyticDB PostgreSQL版執行個體設定IP白名單為0.0.0.0/0,允許外部IP訪問。
警告設定為0.0.0.0/0表示對訪問的IP地址來源不作任何限制,此時AnalyticDB PostgreSQL版執行個體將面臨高安全風險,請在資料移轉完成後立即修改IP白名單。
在自建Greenplum叢集所在的伺服器上下載gpcopy,同時讓阿里雲支援人員在AnalyticDB PostgreSQL版執行個體上下載並安裝gpcopy。
說明本文使用的gpcopy版本為2.3.2,建議您使用2.3.x版本的gpcopy遷移資料。如果使用2.4.x版本的gpcopy遷移,需要開啟SSL鏈路加密。AnalyticDB PostgreSQL版執行個體設定SSL加密的方法,請參見設定SSL加密。
在gpcopy壓縮包所在的目錄下執行以下指令碼,用以安裝gpcopy。
#!/bin/bash tar xzvf gpcopy-2.3.2.tar.gz cd gpcopy-2.3.2/ cp gpcopy $GPHOME/bin cp gpcopy_helper $GPHOME/bin chmod 755 $GPHOME/bin/gpcopy chmod 755 $GPHOME/bin/gpcopy_helper host_sql=`psql -A -t -c "select address from gp_segment_configuration where role = 'p' and content >= 0 group by address"` host=(${host_sql}) host_len=${#host[@]} host_str="" for ((i=0; i<$host_len; ++i)); do host_str=$host_str" -h "${host[$i]} done gpscp $host_str gpcopy_helper =:$GPHOME/bin gpssh $host_str -e "chmod 755 $GPHOME/bin/gpcopy_helper"
執行以下命令遷移資料。
gpcopy --full --source-host <SOURCEHOST> --source-port <SOURCEPORT> --source-user <SOURCEUSER> --dest-host <DESTHOST> --dest-port <DESTPORT> --dest-user <DESTUSER> --jobs 4 --drop --validate count
參數說明如下:
參數
說明
--full
表示全量遷移Greenplum叢集的資料。
如果只遷移Greenplum叢集中的一個資料庫,可以替換為
-d <資料庫名稱>
進行遷移。--jobs
表示遷移任務的並發數,預設為4,即並行傳輸4張表。
您需要根據業務需求調整並發數,建議設定為串連數的2*n+1個。
<SOURCEHOST>
自建Greenplum叢集所在的伺服器的IP地址。
如果在自建Greenplum叢集所在的伺服器上執行遷移命令,可以使用
localhost
代替。<SOURCEPORT>
自建Greenplum叢集的連接埠號碼,預設為5432。
您可以在自建Greenplum叢集所在的伺服器上執行
gpstate -s
命令查看實際連接埠號碼。<SOURCEUSER>
自建Greenplum叢集下具有superuser許可權的帳號。
<DESTHOST>
AnalyticDB PostgreSQL版執行個體的Master節點的IP地址,請聯絡阿里雲支援人員擷取。
<DESTPORT>
AnalyticDB PostgreSQL版執行個體的Master節點的連接埠號碼,請聯絡阿里雲支援人員擷取。
<DESTUSER>
AnalyticDB PostgreSQL版執行個體下superuser許可權帳號,請聯絡阿里雲支援人員進行擷取。
完成遷移後需要將AnalyticDB PostgreSQL版執行個體的IP白名單修改為業務所需的IP地址,並讓阿里雲支援人員將安全性群組、pg_hba免密、superuser許可權帳號等資訊進行複原。
使用gptransfer遷移資料
建立AnalyticDB PostgreSQL版執行個體的初始帳號,操作方法,請參見建立初始帳號。
將AnalyticDB PostgreSQL版執行個體的IP白名單設定為0.0.0.0/0,允許外部IP訪問。
警告設定為0.0.0.0/0表示對訪問的IP地址來源不作任何限制,此時AnalyticDB PostgreSQL版執行個體將面臨高安全風險,請在資料移轉完成後立即修改IP白名單。
將AnalyticDB PostgreSQL版執行個體的核心版本升級至最新版,如何查看核心版本和升級核心版本,請參見查看核心小版本和版本升級。
提交工單聯絡阿里雲支援人員,將AnalyticDB PostgreSQL版的執行個體ID、自建Greenplum叢集的IP地址和連接埠號碼、可以用於遷移資料的Greenplum的帳號、Greenplum叢集所在伺服器的IP地址等資訊提供給阿里雲支援人員。
等待資料移轉完成。
將AnalyticDB PostgreSQL版執行個體的IP白名單修改為業務所需的IP地址,並對資料進行驗證。完成後即可將業務的串連地址切換至AnalyticDB PostgreSQL版執行個體。
使用OSS外表遷移資料
Schema遷移
在自建Greenplum叢集的Master節點,通過pg_dumpall或pg_dump工具匯出DDL Schema,Bash命令樣本如下。
export PGHOST=<自建Greenplum叢集的IP地址> export PGPORT=<自建Greenplum叢集的連接埠號碼> export PGUSER=<自建Greenplum叢集的superuser許可權帳號> export PGPASSWORD=<以上superuser許可權帳號的密碼> #-- Greenplum 4X版本匯出全部Schema。 pg_dumpall -s -q --gp-syntax > full_schema.sql #-- Greenplum 5X或6X版本匯出全部Schema。 pg_dumpall -s --gp-syntax > full_schema.sql
使用psql登入自建Greenplum叢集,檢查是否存在自訂library,如果存在自訂library,則需要手動在AnalyticDB PostgreSQL版資料庫中建立對應的Schema。檢查否存在自訂library的語句如下。
SELECT * FROM pg_catalog.pg_library;
在伺服器上執行DDL Schema,Bash命令樣本如下。
export PGHOST=<AnalyticDB PostgreSQL執行個體的串連地址> export PGPORT=<AnalyticDB PostgreSQL執行個體的連接埠號碼> export PGUSER=<AnalyticDB PostgreSQL執行個體的初始帳號> export PGPASSWORD=<AnalyticDB PostgreSQL執行個體的初始帳號的密碼> psql postgres -f full_schema.sql > psql.log 2>&1 &
Bash命令執行過程中請注意psql.log檔案中是否產生錯誤資訊,並對錯誤資訊進行分析解決。錯誤資訊基本都與SQL文法有關(尤其4X版本),不相容項的相關檢查,請參見4.3版本與6.0版本相容性注意事項和4.3版升級6.0版不相容項檢查參考指南。
表資料移轉
匯出自建Greenplum叢集的資料,您可以通過COPY TO命令或GPFDIST外表兩種方法匯出。
COPY TO命令
在psql用戶端使用COPY TO命令匯出表資料,SQL樣本如下:
Greenplum 4X、5X、6X版本匯出表資料的語句樣本如下。
COPY public.t1 TO '/data/gpload/public_t1.csv' FORMAT CSV ENCODING 'UTF8';
Greenplum 5X、6X版本支援ON SEGMENT語句,可以使用以下語句。
COPY public.t1 TO '<SEG_DATA_DIR>/public_t1_<SEGID>.csv' FORMAT CSV ENCODING 'UTF8' ON SEGMENT;
說明請不要修改字串
<SEGID>
,系統在匯出時會自動產生對應的<SEGID>
。字串<SEG_DATA_DIR>
您可以根據需求保持原樣或自訂一個絕對路徑。
GPFDIST外表
啟動GPFDIST服務(GPFDIST在自建Greenplum啟動程式的bin目錄下),Bash命令如下:
mkdir -p /data/gpload gpfdist -d /data/gpload -p 8000 &
使用psql串連自建Greenplum資料庫,匯出表資料,SQL樣本如下。
-- public.t1為已知要遷移的表 CREATE WRITABLE EXTERNAL TABLE ext_w_t1 (LIKE public.t1) LOCATION ('gpfdist://<Greenplum串連地址>:8000/public_t1.csv') FORMAT 'CSV' ENCODING 'UTF8'; -- 寫入外表 INSERT INTO ext_w_t1 SELECT * FROM public.t1;
將匯出的資料上傳到阿里雲OSS上,如何將資料上傳到阿里雲OSS,請參見控制台上傳檔案。
說明阿里雲OSS需要和AnalyticDB PostgreSQL版執行個體在同一地區。
使用OSS外表將資料匯入到AnalyticDB PostgreSQL版執行個體中。具體操作,請參見匯入OSS資料到本地表。
資料驗證
對比AnalyticDB PostgreSQL版執行個體內的資料與自建Greenplum叢集內的資料,確保資料和業務沒有區別。資料驗證分為資料一致性驗證和業務一致性驗證:
資料一致性驗證:您可以全量對比資料也可以抽樣對比資料,抽樣對比需要重點驗證表資料量是否一致和數實值型別欄位彙總計算結果是否一致。
業務一致性驗證:您需要將應用系統配置源指向AnalyticDB PostgreSQL版執行個體,檢查業務功能和執行結果是否正常。
其他遷移方式
您可也以使用阿里雲DataWorks工具來遷移資料。具體操作,請參見DataWorksData Integration。