本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
云原生數據倉庫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>
您可以根據需求保持原樣或自定義一個絕對路徑。COPY命令具體使用方式,請參見COPY。
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工具來遷移數據。具體操作,請參見DataWorks數據集成。