了解更多Greenplum技術幹貨,歡迎通路Greenplum中文社群網站
gpcopy 是新一代的 Greenplum 資料遷移工具,可以幫助客戶在不同叢集間,不同版本間,快速穩定地遷移資料。同上一代遷移工具 gptransfer 相比,gpcopy 具有巨大的優勢:更快,更穩定,更易用,功能更豐富。另外,gpcopy 隻包含在商業版本中。
gpcopy 可以幹什麼
gpcopy 可以遷移整個叢集,也可以具體傳輸某些資料庫、某些命名空間和某些表;可以從檔案讀取傳輸或者略過的表,支援正規表達式;可以略過、追加或者替換目标叢集的資料;可以并行傳輸;可以隻遷移結構資訊;可以靜默自動化執行……
簡單說,就是叢集間遷移所存儲的資訊,使得使用者業務可以遷移:

和 gptransfer 的速度對比
gpcopy vs. gptransfer
為什麼 gpcopy 可以更快速
segment 間直接傳輸
gpcopy 的資料傳輸利用了 Greenplum 最新的 COPY ON SEGMENT 特性,首先 COPY 相較于 gptransfer 單純使用的外部表就更快,因為它是批量操作,而外部表的 SELECT 和 INSERT 都是逐條操作;另外 COPY ON SEGMENT 特性使得 gpcopy 可以做到兩個叢集的多節點間并發傳輸,快上加快。
以下是 gpcopy 應用于相同節點數 Greenplum 叢集間傳輸的架構,還是很簡單直接的。
相同節點數的叢集遷移
Snappy 壓縮傳輸
gpcopy 預設打開壓縮選項,使用 Google 的 Snappy 格式對所傳輸得資料進行壓縮,網絡傳輸少了很多壓力,速度也更快。
Snappy 對大多數的輸入比 zlib 的最快模式要快幾個數量級。在 core i7 的單核64位模式下,Snappy 壓縮速度可以達到250MB/s或者更快,解壓縮可以達到大約500MB/s或更快。
更快的資料校驗
判斷兩個資料庫系統的表是否一緻從來不是一個簡單的問題,簡單使用哈希校驗的話要考慮條目的順序,排序的話又會把速度拖得更慢。如果這兩個資料庫系統和 Greenplum 一樣是叢集系統,這個問題就更難了。而 gpcopy 靈活地解決了這個問題,不需要排序,資料校驗的速度是對所導出CSV格式檔案做哈希的幾倍!
為什麼 gpcopy 可以更穩定
沒有命名管道檔案
命名管道以檔案的形式存在于檔案系統中,任何程序隻要有權限,打開該檔案即可通信。指令管道遵守先進先出的規則,對命名管道讀總是從開始處傳回資料,讀過的資料不再存在于命名管道中,對它寫則是添加到末尾,不支援lseek等操作。
命名管道檔案難以管理,也容易出問題。例如不限制其它程序讀、讀過的資料不再存在這兩個特點,結合起來會發生什麼?想象一下,如果使用者系統中存在着防毒軟體,所有檔案都會被它讀取采樣……(這是一個真實案例)
完善的日志記錄和錯誤處理
gpcopy 在這一塊花了很大力氣,每一步的操作,執行的查詢,指令和結果都寫到了日志檔案,并根據使用者指定的級别顯示到标準輸出。
遷移操作也都在事務内,發生錯誤可以做到表一級的復原。運作結束的時候會有詳細的成功和失敗總結,同時生成和提示使用者運作指令去重試所有的錯誤。
可以說,萬一使用者環境出現了錯誤,結合 gpcopy 和 Greenplum 的日志檔案,我們的支援人員可以迅速地定位問題和給出解決方案,最大程度保障客戶順利遷移。
“能用”而且好用的資料校驗
這個前面提過了,前代 gptransfer 的資料校驗是對資料進行排序然後哈希,使用者基本都因為太慢而不得不略過,“穩定和一緻”也就無從談起了。
gpcopy 可以用于更新
Greenplum 版本更新一般會有 catalog 變化,隻更新可執行檔案是不相容的。而利用 gpcopy 則可以做到原地更新,另外因為有了快速好用的資料校驗,使用者也可以放心地一邊遷移資料一邊釋放空間。(即使這樣也強烈建議備份)
gpcopy 1.1.0 現已支援不同節點數的 Greenplum 叢集間傳輸!
現階段導出依然是最快的 COPY ON SEGMENT,導入則是利用外部表。多節點間并發傳輸、壓縮和更快的資料校驗,一個特性也不少。後續還會針對這個場景做更多的優化,敬請期待。
以下是 gpcopy 從小叢集到大叢集傳輸的基本架構,圖檔之外我們還做了傳輸量傾斜的優化。
從小叢集到大叢集
以下是 gpcopy 從大叢集到小叢集傳輸的基本架構,一樣也會有避免傾斜的優化。
歡迎大家試用 gpcopy。下面是 gpcopy 的官方文檔供大家參考。
- https://gpdb.docs.pivotal.io/5120/utility_guide/admin_utilities/gpcopy.html
- https://gpdb.docs.pivotal.io/5120/admin_guide/managing/gpcopy-migrate.html