gpexpand分析


歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐干貨哦~

本文由maxluo發表於雲+社區專欄

一、 gp擴容步驟

1.1 初始化機器

目標:新增加的機器需要初始化和已有機器環境一樣。

具體包括不限於以下內容: 創建用戶名,設置環境變量,創建數據目錄,安裝greenplum軟件包,解壓目錄路徑。

1.2 修改host

集群所有機器(包括已有機器和新擴容機器)的/etc/hosts文件中,增加新擴容機器的host配置。

1.3 修改GP配置文件

具體修改三個文件。

其中allhostlist,seghostlist文件中添加新增機器的host。

新增文件host_expand,並把新增機器的host寫入該文件中。

1.4 打通ssh互信登錄

執行命令:

/home/gpadmincloud/install/bin/gpssh-exkeys  -f  /home/gpadmincloud/deploy/host_expand

備注:host_expand只需是新增加機器的host,而非全部機器HOST。這樣也可以實現已有其他機器到新增機器的無密登錄。

1.5 生成擴容配置

a) 創建數據庫myexpand:執行命令create database myexpand;

作用: 用於存儲擴容進度等信息。

b) 執行命令,生成配置。gpexpand -f host_expand -D myexpand

在命令執行過程中,會交互式的讓用戶確認相關信息。其中一步是確定擴容節點的分布方式。

提示如下:

What type of mirroring strategy would you like?

 spread|grouped (default=grouped):

需要注意的是,這里的分布方式和集群初始化時選擇的方式不一定要求一致。也就是說以前機器如果是spread分布,新增加節點既可以是grouped,也可以是spread分布。

對於不同模式,新增機器數量限制如下:

Grouped Mirror: 則新增機器數量必須大於等於2,確保新增加的primary segment節點和mirror segment節點不在同一台機器上。

Spread Mirror: 新增的主機數至少要比每台主機上primary Segment的數量大於1,這樣才能確保Mirror可以平均分配在其他的Segment節點上。例如:如果現在單機primary segment數量為3,則新增機器必須大於等於4。

c) 配置文件內容如下:

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40000:/data/greenplum/primary/gpseg12:27:12:p:41000

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg12:51:12:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40001:/data/greenplum/primary/gpseg13:28:13:p:41001

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg13:55:13:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40002:/data/greenplum/primary/gpseg14:29:14:p:41002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg14:59:14:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40003:/data/greenplum/primary/gpseg15:30:15:p:41003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg15:63:15:m:51000

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40000:/data/greenplum/primary/gpseg16:31:16:p:41000

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg16:56:16:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40001:/data/greenplum/primary/gpseg17:32:17:p:41001

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg17:60:17:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40002:/data/greenplum/primary/gpseg18:33:18:p:41002

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg18:64:18:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40003:/data/greenplum/primary/gpseg19:34:19:p:41003

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg19:47:19:m:51000

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40000:/data/greenplum/primary/gpseg20:35:20:p:41000

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg20:61:20:m:51002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40001:/data/greenplum/primary/gpseg21:36:21:p:41001

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg21:65:21:m:51002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40002:/data/greenplum/primary/gpseg22:37:22:p:41002

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg22:48:22:m:51001

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40003:/data/greenplum/primary/gpseg23:38:23:p:41003

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg23:52:23:m:51001

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40000:/data/greenplum/primary/gpseg24:39:24:p:41000

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg24:66:24:m:51003

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40001:/data/greenplum/primary/gpseg25:40:25:p:41001

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg25:49:25:m:51002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40002:/data/greenplum/primary/gpseg26:41:26:p:41002

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg26:53:26:m:51002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40003:/data/greenplum/primary/gpseg27:42:27:p:41003

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg27:57:27:m:51002

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40000:/data/greenplum/primary/gpseg28:43:28:p:41000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg28:50:28:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40001:/data/greenplum/primary/gpseg29:44:29:p:41001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg29:54:29:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40002:/data/greenplum/primary/gpseg30:45:30:p:41002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg30:58:30:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40003:/data/greenplum/primary/gpseg31:46:31:p:41003

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg31:62:31:m:51003

1.6 初始化sgment並加入集群

1.6.1 執行命令

gpexpand -i gpexpand_inputfile_20180815_210146 -D myexpand

gpexpand_inputfile_20180815_210146 文件為在步驟1.5中生成的擴容配置文件。

1.6.2 異常處理

這里經常會出現問題,需要輸入gpexpand -r -D gpexpand讓你回滾擴容操作,但是此時數據庫關閉了,並且不能直接用gpstart啟動。

因此先執行gpstart –R 啟動數據庫。再執行gpexpand -r -D myexpand命令進行回滾操作。

回滾成功后,再按照1.6.1步驟,進行segment初始化。

1.7 重分布表

執行命令

gpexpand -D myexpand

該命令會對所有的數據庫和表進行重分布。按照對應表的分布鍵,把數據打散到各個節點,包括新增加的機器。從而實現了擴容操作。

1.8 臨時數據清理

執行命令:

gpexpand -c -D myexpand

該命令會對步驟1.6中在myexpand數據庫中生成的schema進行清理。

二、 擴容原理分析

gpexpand命令對集群擴容的原理:首先把新增HOST節點添加到master元表。並按照步驟1.5生成的配置對各機器segment初始化和啟動操作。

最后執行alter table操作。

ALTER TABLE ONLY  xx   SET WITH(REORGANIZE=TRUE) DISTRIBUTED by(xx )。

該操作會導致greenplum對表數據進行重分布。從而實現把原集群數據打散分布到新集群中。

2.1 初始化過程分析

在步驟1.6中,執行gpexpand -i gpexpand_inputfile_20180815_210146 -D myexpand對擴容節點初始化。

完成事情有如下三步:

1, 把新增加的節點加入到master元素表中。可以通過select * from gp_segment_configuration order by dbid asc; 查詢到新節點已經被加入到集群中,但新增加節點暫時沒有數據。

2, 在myexpand數據庫中,創建名為gpexpand的schema,這個schema用於保存擴展的所有信息,例如每個表重分布的進度等詳細信息。

Status表用於記錄擴容進度信息。

 myexpand=# select  * from gpexpand.status;

​      status       |          updated           

-------------------+----------------------------

SETUP             | 2018-09-18 11:17:29.807489

SETUP DONE        | 2018-09-18 11:17:35.294699

EXPANSION STARTED | 2018-09-18 11:18:02.816792

expansion_progress記錄數據庫表重分布速度等信息。

myexpand=# select  * from gpexpand.expansion_progress;

             name             |         value         

------------------------------+-----------------------

Bytes Done                   | 53412116448

Estimated Time to Completion | 00:16:55.504644

Tables In Progress           | 1

Bytes Left                   | 59420929408

Bytes In Progress            | 142668912

Tables Left                  | 229

Tables Expanded              | 498

Estimated Expansion Rate     | 55.9369898011315 MB/s

status_detail表記錄各個表的重分布過程以及進度。

myexpand=# select  distinct(status) from gpexpand.status_detail where dbname='gpadmincloud';

   status    

\-------------

COMPLETED

NOT STARTED

IN PROGRESS

3, 將數據庫中的所有表全部修改為隨機分布(DISTRIBUTED RANDOMLY),這個狀態會在步驟1.7中采用alter方式修改回來。同時會把以前的分布鍵保存在gpexpand.status_detail中,供后面數據重分布恢復分布鍵。

修改SQL為:UPDATE gp_distribution_policy SET attrnums = NULL ,通過對數據字典表gp_distribution_policy 修改分布鍵。這種方式避免了數據的重分布。

2.2 數據重分布

在步驟1.7中,命令后gpexpand -D myexpand。會對每一張表執行命令。

ALTER TABLE ONLY t1 SET WITH(REORGANIZE=TRUE) DISTRIBUTED byxxx)。把初始化過程中修改為隨機分布的表進行還原。Alter命令會對所有數據重分布。從而實現歷史數據分散到所有節點(包括新擴容節點)。

三、 擴容性能分析

3.1 原始數據

3.1.1 100G數據

機器配置:

Segment配置:4 核 16 GB 160GB SSD雲盤。

Master規格 擴容目標 耗時(分鍾)
2核 8GB 3->6 19

3.1.2 300GB數據

機器配置:

Segment配置:4 核 16 GB 160G SSD雲盤。

Master規格 擴容目標 耗時(分鍾)
4 核 8 GB 5->8 30
4 核 16 GB 8->12 23
4 核 16 GB 12->16 18.5

3.1.3 600GB數據

機器配置:

Segment配置:8 核 32 GB 320G SSD雲盤。

Master規格 擴容目標 耗時(分鍾)
4 核 8 GB 10->16 36
4 核 16 GB 16->24 22.5
4 核 16 GB 24->32 17.3

3.1.4 1TB數據

機器配置:

Segment配置:8 核 32 GB 640G SSD雲盤。

Master規格 擴容目標 耗時
4 核 8 GB 20->40 31.7
4 核 16 GB 40->60 20.5

3.2 結論

1,同樣的數據量,節點越多,擴容速度越快。

2,同樣的節點數,擴容速度基本上和數據量成反比。

四、 常見問題小結

1, 執行命令gpexpand,出現Cannot allocate memory 。

原因: master節點內存不足。

解決辦法:升級master節點內存數量,或者替換master機器。

最主要是提前規划好master節點規格,包括CPU和內存。

2, 執行擴容過程中,已有鏈接是否會斷開?

答:會。

原因:在步驟1.6過程中,需要重啟Greeplum集群。所以已有鏈接會出現斷開情況。

解決辦法:業務方重新鏈接即可。

3,重分布過程,數據庫是否可用,只讀 or 可讀可寫?

答:可用,可讀可寫。

原因:

gpexpand是采用表重分布方式來對集群擴容。對於已經重分布的表,則新寫入的數據則根據分布鍵,按規則放置在不同節點。

如果是對還未重分布的表進行寫入數據,則這些新寫入的數據,按照隨機分布方式,分布到各個節點(也包括新增加的機器節點)。最后在執行alter 操作修改分布鍵時,數據重分布到所有其他節點。

相關閱讀
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社區發布,更多原文請點擊

搜索關注公眾號「雲加社區」,第一時間獲取技術干貨,關注后回復1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM