最近做了greenplum 4.3 --> greenplum 6.9 的遷移升級, 踩坑無數, 先寫個總結:
-
遷移方案:
- 構建新集群, 再將老集群數據遷移到新集群。
-
坑
- 自帶的gptransfer不能用, 執行時會報一個參數不存在。
- 最終只能回到原始的pg_dump。
- 理想的方式是gptransfer大表, 小表dump。
- greenplum 5開始不支持 date類型 --> text類型的自動隱式轉換, 會導致部分sql兼容性問題。
-
在使用mirror的情況下, 一次導入過多數據可能導致節點掛掉, 導致primary和mirror替換。
-
臨時的處理方案是導出數據時拆的更細一點
# 原導出操作 pg_dump -t 'dw.src*' dw | gzip > src.sql.gz # 拆分后的導出操作 pg_dump -t 'dw.src_c*' dw | gzip > src_c.sql.gz pg_dump -t 'dw.src_e*' dw | gzip > src_e.sql.gz pg_dump -t 'dw.src_f*' dw | gzip > src_f.sql.gz ... etc
- 實踐下來是沒有問題的。
-
-
客戶環境問題
- 偶爾會出現cpu異常導致的軟中斷進程ksoftrqd占滿資源, 具體底層應該和他們那一套基於openstack的超融合虛擬機的問題, 與我無瓜。
-
性能問題
-
Greenplum的查詢優化器對一個節點上多個segment的集群有比較好的優化, 一開始部署一台一個節點的時候性能反而不如老集群, 與官方社區溝通后是查詢優化器的問題, 后來一個節點上裝了3個segment后性能顯著提升, 復雜sql比老集群快了一倍多。
-
使用的gpinitsystem_config
#數據庫代號 ARRAY_NAME="Greenplum" #segment前綴 SEG_PREFIX=gpseg #primary segment 起始的端口號 PORT_BASE=33000 #指定primary segment的數據目錄,網上寫的是多個相同目錄,多個目錄表示一台機器有多個segment declare -a DATA_DIRECTORY=(/home/gpadmin/data/datap1 /home/gpadmin/data/datap2 /home/gpadmin/data/datap3) #master所在機器的host name MASTER_HOSTNAME=mdw #master的數據目錄 MASTER_DIRECTORY=/home/gpadmin/data/master #master的端口 MASTER_PORT=5432 #指定bash的版本 TRUSTED_SHELL=/usr/bin/ssh #將日志寫入磁盤的間隔,每個段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1 CHECK_POINT_SEGMENTS=8 #字符集 ENCODING=UNICODE #mirror segment 起始的端口號 MIRROR_PORT_BASE=44000 # mirror的數據目錄,和主數據一樣,一個對一個,多個對多個 declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/datam1 /home/gpadmin/data/datam2 /home/gpadmin/data/datam3)
-