【Greenplum避坑指南 II 】Greenplum 環境搭建和基本查錯

在Greenplum避坑指南系列的上一篇《「個人SQL跑了很長時間沒有結果怎麼辦?》中,咱們介紹瞭解決SQL卡住和運行時間長的緣由和解決方案。今天,咱們將爲你們講一講Greenplum用戶在剛開始接觸GP時常常會問的一個問題「Greenplum如何搭建?」以及一些避免掉坑的注意事項。html

Greenplum 是基於postgresql 技術研發的分佈式數據庫,相較於傳統型數據庫,分佈式設計能帶來較大的性能收益。正常安裝須要多臺節點,可是從學習和測試角度,咱們也能夠在單節點上安裝GPDB。Greenplum在不斷的迭代版本,目前已經發布了v4.3.x, v5.x, v6.x 。關於這幾個版本的區別,主要在於底層的postgresql 版本不一樣,而且每一個大版本,Greenplum都有發佈不少新的特性。具體能夠參考對應版本的產品說明(release note):git

GPDB版本 Postgresql 版本 產品說明
4.3.x 8.2.15 傳送門
5.x 8.3.23 傳送門
6.x 9.4.20 傳送門

關於安裝步驟,已經有很多的研究成果能夠直接使用,能夠參考Greenplum中文社區網站上的文章:github

  • 收藏版!手把手教你搭建 Greenplum 6.1 集羣

https://greenplum.cn/2019/11/30/how-to-set-up-greenplum-6-1-cluster/sql

  • Greenplum 編譯安裝和調試

https://greenplum.cn/2019/04/29/greenplum-compile-install/docker

CSDN,簡書等渠道上也有很多相關文章:數據庫

  • CentOS7 安裝GreenPlum詳細步驟

https://blog.csdn.net/qq_15758463/article/details/75305138segmentfault

  • centos 7.x 單機版安裝greenplum 6.0

https://www.jianshu.com/p/5df4b37f4d5ccentos

  • Docker 環境安裝Greenplum:

https://www.lagou.com/lgeduarticle/70026.html
https://gitop.cc/posts/install-greenplum-in-docker/
https://www.jianshu.com/p/1d07d3a703b8bash

須要強調的是,不管哪一個版本安裝,都建議和相應的官方文檔進行覈對,以確保使用正確的操做系統參數配置: session

GPDB v4.3.x

GPDB v5.x

GPDB v6.x

對於在單節點上運行GPDB的用戶,在運行gpinitsystem 的時候,能夠添加一個參數 --max_connections=20,這會相應下降Greenplum對系統資源的佔用。當設置master 實例最大鏈接數爲20時,運行gpinitsystem時,Greenplum也會自動下降對應的segment 實例上的最大鏈接數。官方建議segment 實例的最大鏈接數爲master 實例的3-5倍。

gpconfig -s max_connections

Values on all segments are consistent

GUC: max_connections

Master value: 20

Segment value: 60

若是須要後期對這個參數進行調整,可使用如下命令:

gpconfig -c max_connections -v 300 -m 60   (segment 300, master 50,重啓後生效)

當運行gpinitsystem 成功後,爲了下次訪問更方便,咱們還須要設置一下環境變量。一個典型的環境設置以下:

source /usr/local/greenplum-db-x.x.x.x/greenplum_path.sh  (GPDB庫文件的所在地)
export MASTER_DATA_DIRECTORY=/xxx/xxx/gpseg-xxx  (主目錄)
export PGPORT=xxxx   (master 實例的訪問端口,不設就默認5432)
export PGDATABASE=xxxx  (默認鏈接的數據庫,這個無關緊要)

若是這一個環境裏只有一個集羣,能夠將以上信息寫入~/.bashrc 中。若是一個環境裏有多個集羣,每次會手動選擇啓動須要的集羣,那麼能夠分別建立不一樣的環境變量文件。確保是文本文件便可。而後每次啓動GPDB前,先載入對應的設置,好比:

source env_5100
source env_600

系統啓動後,就可使用了。Greenplum 是一個分佈式的數據庫系統,用戶數據都保存在各個子節點上。若是但願調查數據分佈狀況,可使用Greenplm 自帶的gp_dist_random() 函數。示例以下:

gpadmin=# select count(1), gp_segment_id from gp_dist_random('pg_class') group by 2;
 count | gp_segment_id
-------+---------------
   440 |             9
   440 |            14
   440 |            19
   440 |             3
gpadmin=# select oid,relname,gp_segment_id from gp_dist_random('pg_class')  where relname='gp_pgdatabase_invalid';
  oid  |        relname        | gp_segment_id
-------+-----------------------+---------------
 11968 | gp_pgdatabase_invalid |            11
 11968 | gp_pgdatabase_invalid |            12
 11968 | gp_pgdatabase_invalid |            13
 11968 | gp_pgdatabase_invalid |            14

另外若是但願單獨鏈接到一個子實例上進行調查,能夠用如下命令:

  • 先查詢所須要鏈接實例的主機名和端口信息
gpadmin=# select * from gp_segment_configuration where content=1 and role='p';
 dbid | content | role | preferred_role | mode | status | port  | hostname | address | replication_port
------+---------+------+----------------+------+--------+-------+----------+---------+------------------
    3 |       1 | p    | p              | s    | u      | 20134 | sdw3     | sdw3    |            24322
(1 row)
  • 獲取鏈接命令:
[gpadmin@mdw ~]$ gpstart -?|grep PG
  PGOPTIONS='-c gp_session_role=utility' psql
  • 最後進行鏈接:
[gpadmin@mdw ~]$ PGOPTIONS='-c gp_session_role=utility' psql -h sdw3 -p 20134 gpadmin
psql (8.3.23)
Type "help" for help.
  • 咱們能夠查詢一張表,來看看從master 實例進行查詢和在子實例進行查詢的不一樣結果:

Master:

gpadmin=# select count(1) from test2;
 count
-------
  9999
(1 row)

Segment (子實例):

gpadmin=# select count(1) from test2;
 count
-------
   402
(1 row)

由於Greenplum 數據庫也繼承了很大部分的postgresql數據庫的特性,日誌系統也是如此。正常使用中,GPDB會分別在master 日誌和各個segment 主實例中寫入對應的日誌。日誌就保存在各個實例的pg_log/目錄下。若是須要集中獲取全部節點的segment 實例路徑,能夠經過如下語句完成:

gpadmin=# select e.fsedbid "segment id", e.fselocation "segment location",c.hostname "segment server" from pg_filespace_entry e, gp_segment_configuration c where e.fsedbid=c.dbid;
 segment id |       segment location        | segment server
------------+-------------------------------+----------------
          1 | /data/master_519/gpseg_519_-1 | mdw
          2 | /data1/primary/gpseg_519_0    | sdw3
          8 | /data1/primary/gpseg_519_6    | sdw4

通常出現問題,咱們能夠先去master 實例的pg log 中查找PANIC /FATAL/ WARNING/ ERROR這些關鍵字。若是發現master 中提到了某個實例沒法鏈接或者再也不響應,那麼咱們就須要再到對應的segment 實例去查看日誌信息。

說到日誌,就不得不提日誌等級。GPDB也使用log_min_messages 參數來控制pg log中產生日誌的詳細程度。默認這個參數設爲WARNING,意思是WARNING 等級以上的錯誤纔會記錄下。若是須要更詳細的信息,能夠設爲「INFO」。若是設到更高的DEBUG1 - DEBUG5 等級,那麼日誌文件中的信息就成倍增長。須要當心使用。

在segment 節點上的日誌,每每會有不少重複出現的信息,咱們能夠手動過濾一下,最標準的就是gpperfmon相關的日誌。

cat gpdb-xxx.csv |grep -v perfmon |less

若是要調查primary 或者mirror 實例掉線的緣由,能夠查找關鍵字 filerep 就會特別有效。

cat gpdb-xxx.csv |grep -v perfmon |grep filerep |less

拿到日誌後,就能夠分析錯誤緣由了。由於Greenplum 不只繼承了許多postgresql 的特性,也包括了一部分bug。雖然在各個版本中在不斷修復,可是也不能保證全部postgresql 的bug 都修復了。若是在日誌中發現一些錯誤,可是又沒法理解,那麼就能夠經過如下途徑嘗試或者自助支持:

  1. Greenplum 中文社區https://greenplum.cnGreenplum 英文社區https://greenplum.org/ 這裏有大量的技術博文可供參考;
  2. Greenplum中文問答網站https://askgp.chapterx.cn/;這是Greenplum中文社區爲用戶和開發者提供的問答和交流專區,在這裏,Greenplumer能夠提出、解答問題,並沉澱優質問答內容,幫助社區成員的學習和進步;英文社區https://community.pivotal.io/s/topic/0TO0P000000IKdLWAW/pivotal-greenplum。這裏有大量的Greenplum 用戶的英文版提問和解答;
  3. Github 站點https://github.com/greenplum-db/gpdb。對於能力較強的用戶,也能夠直接訪問Greenplum 的github 站點,這裏有大量的Greenplum已公開的代碼,以及問題討論;
  4. Greenplum技術羣組,這裏有不少的技術大牛,掃描文章底部的二維碼,或者搜索gp_assistant,將有專人拉你入羣;
  5. Postgresql 社區。不管中文或者英文社區,postgresql 龐大的用戶量和代碼開源,都吸引力大量的用戶。每每咱們使用搜索引擎,就能找到不少須要的答案。

關於做者

鄢柯(Shawn), Greenplum 產品支持專家。一直致力於協助全球Greenplum用戶解決各種產品問題。

稿定設計導出-20200108-174928-1-1-768x432.png

相關文章
相關標籤/搜索