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

隨着Greenplum大數據平臺正式進入6時代,Greenplum 新版本在功能和性能上都實現大幅度地提高。Greenplum 用戶麥煜遙將在本文詳細介紹如何在Linux上搭建Greenplum 6.1集羣。html

1. 安裝說明

1.1 環境說明

操做系統:  CentOS release 6.6linux

數據庫: Greenplum 6.1git

輔助工具:  Winscp, Puttygithub

Winscp: 以root權限登陸,遠程鏈接Linux修改文檔內容。Putty: 遠程鏈接Linux運行命令。sql

1.2 參考安裝教程

• Greenplum 5 <Greenplum 企業應用實戰> 何勇,陳曉峯數據庫

• Greenplum 6 官網windows

https://gpdb.docs.pivotal.io/6-1/install_guide/prep_os.html#topic1

1.3  Greenplum 6.1 下載

https://github.com/greenplum-db/gpdb/releases/tag/6.1.0

備註:Greenplum 6.1 安裝有兩種方法:bash

    一是,下載源碼,本地編譯、安裝;服務器

    二是,直接下載編譯好的包安裝。cookie

    這裏選擇的是,下載編譯好的包安裝,對於POC來說,比較節省時間。

1.4 集羣介紹

我搭建的 Greenplum 集羣,使用1個 Master ,3個 Segment 的集羣,以下:

192.168.xxx.1 Master 
192.168.xxx.3 Segment
192.168.xxx.4 Segment
192.168.xxx.5 Segment

備註:192.168.xxx.2 是 ETL 的 Pentaho 服務器,後面用來作測試的,沒有在此列。

1.5 Master 與 Segment 職責對比

Master: 

 (1) 創建與客戶端的回話鏈接和管理

 (2) SQL的解析並造成分佈式的執行計劃

 (3) 將生成好的執行計劃分發到每一個 Segment 上執行

 (4) 收集 Segment 的執行結果

 (5) Master 不存儲業務數據,只存儲數據字典

 (6) Master 主機能夠一主一備,分佈在兩臺機器上

 (7) 爲了提升性能, Master 最好單獨佔用一臺機器

Segment: 

 (1) 業務數據的存儲和存取

 (2) 執行 Master 分發的 SQL 語句

 (3) 對於 Master 來說,每一個 Segment 都是對等的,負責對應數據的存儲和計算

 (4) 每一臺機器上能夠配置一到多個 Segment

 (5) 因爲每一個 Segment 都是對等的,建議採用相同的機器配置

 (6) Segment 分 primary 和 mirror 兩種,通常交錯的存放在子節點上。

2.安裝環境準備

2.1 關閉SELINUX  (4臺)

• /etc/selinux/config

SELINUX=disabled

備註:關閉後,就不用再開啓,也不須要reboot。另外,用 Winscp 去編輯文檔,比在命令環境方便多了。

2.2 關閉防火牆  (4臺)

配置的時候,要保證全部的機器的網絡都是通的,而且每臺機器的防火牆都是關閉的,避免存在網絡不通的狀況。

  • 查看防火牆狀態

> service iptables status

  • 關閉防火牆

> service iptables stop

  • 永久關閉防火牆

> chkconfig iptables off

備註:CentOS 6的命令是iptables,和CentOS 7不一樣。防火牆關閉後,就不用再開啓。

2.3 配置/etc/hosts  (4臺)

主要是爲以後 Greenplum 可以在各個節點之間相互通訊作準備。習慣將 Master 叫 mdw,Segment 叫 sdw 。4臺都要設置:

192.168.xxx.1  (主機名)  mdw
192.168.xxx.3  (主機名)  sdw1
192.168.xxx.4  (主機名)  sdw2
192.168.xxx.5  (主機名)  sdw3

備註:hosts文件是Linux系統中負責ip地址與域名快速解析的文件,我這臺DEV服務器裝了不少東西,主機名已經配置了。因此,mdw只是一個主機的別名,不影響程序去查找IP。

若是你想知道添加是否成功,ping一下便可:

2.4 修改內核配置參數 (4臺)

  • /etc/sysctl.conf (這是官網貼的配置,上面有說明)

kernel.shmall = 4000000000
kernel.shmmax = 500000000
kernel.shmmni = 4096
vm.overcommit_memory = 2 
vm.overcommit_ratio = 95 
net.ipv4.ip_local_port_range = 10000 65535 
kernel.sem = 500 2048000 200 40960
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 0 
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296

  • 執行命令使之生效

> sysctl -p

2.5 配置資源限制參數 (4臺)

  • /etc/security/limits.conf

* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072

2.6  建立用戶和用戶組 (4臺)

建立 gpadmin 用戶及用戶組,將其做爲安裝 greenplum 的操做系統用戶。

• 若是已經存在,先刪除

> groupdel gpadmin
> userdel gpadmin

• 建立新的用戶和用戶組

> groupadd -g 530 gpadmin
> useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin

• 對文件夾進行賦權,爲新用戶建立密碼

> chown -R gpadmin:gpadmin /home/gpadmin/
> passwd gpadmin

備註:密碼提示太簡單,連續輸入兩次便可。

2.7 建立安裝目錄,並賦權限 (4臺)

> mkdir /usr/local/greenplum
> chown -R gpadmin:gpadmin /usr/local/greenplum/

備註:

    • greenplum 5的書本提示安裝在/opt,greenplum 6 裝在/usr/local 。

    • /opt通常是安裝系統後用戶本身安裝的其餘應用軟件,通常是源碼包的軟件、大型軟件、或者是一些服務程序的安裝目錄。

    • /usr 通常是安裝軟件的目錄,這個目錄就至關於在 windows 下的 Program Files 目錄。由於我是POC,無所謂,因此裝在 /usr/local 。

3. 安裝 Greenplum DB - Master

3.1 準備好安裝文件

拷貝至 Master 主節點 /usr/local/greenplum 目錄下 (其實能夠放置在隨意的目錄)

3.2 安裝

• 執行命令安裝  

> cd /usr/local/greenplum
> yum install greenplum-db-6.1.0-rhel6-x86_64.rpm

自動安裝依賴,沒有要求輸入安裝路徑,自動安裝到 /usr/local。

備註:greenplum 5 是用rpm命令的,而greenplum 6 則用 yum install 直接安裝依賴。生成的文件夾以下,並自動建立軟鏈接。

• 賦權限

由於我是用root權限安裝的,因此Owner是root,要把Owner換成gpadmin,不然gpadmin無權操做該目錄的文件。

chown -R gpadmin:gpadmin /usr/local/greenplum*

• 應用環境變量

安裝完成後,greenplum的環境變量,已經在 greenplum_path.sh 中設置了,這裏須要應用一下變量。用 gpadmin 用戶,登陸到 master host:

> su gpadmin
> source /usr/local/greenplum-db-6.1.0/greenplum_path.sh

4. 安裝 Greenplum DB - Segment

4.1 Enabling Passwordless SSH (免密登陸)

Master,Segment之間是經過SSH鏈接登陸的,SSH登陸有2種方式:密碼,Host key。固然還能夠兩個都驗證。可是,在服務器之間不可能每次都輸入密碼,因此咱們只須要用Host key 登陸便可。

  • 建立公私鑰對 (4臺)

個人Linux尚未公私鑰對,因此,要先生成一個。生成時不要輸入密碼,不然還要用密碼打開key。注意,個人登陸用戶是gpadmin。

> ssh-keygen -t rsa

選擇生成的位置是/home/gpadmin/.ssh/id_rsa,是私鑰。另外,還會產生一個公鑰 id_rsa.pub,生成以下:

• 添加信任其餘機器的Host key (4 臺)

> ssh-copy-id mdw
> ssh-copy-id sdw1
> ssh-copy-id sdw2
> ssh-copy-id sdw3

在集羣的每一臺使用 ssh-copy-id 命令,把 gpadmin 的 public key 拷到 known_hosts。這樣,集羣的機器互相訪問就是經過這個設定互相信任的。(其實,我的以爲known_hosts是不須要放本機的key,放其餘的機器key便可。而authorized_keys裏面放的是本機的key。)

• 建立 hostlist,seg_hosts  (Master)

目錄/home/gpadmin/conf,再分別建立hostlist,seg_hosts 。我這裏 hostlist 中填寫全部節點的主機別名,seg_hosts 中填寫全部Segment 的主機別名。

> mkdir /home/gpadmin/conf
> cd /home/gpadmin/conf
> touch hostlist
> touch seg_hosts

而後,我喜歡使用winscp去修改內容:

4.2 使用 gpssh-exkeys 打通全部服務器  (Master)

  • 使用 gpssh-exkeys 將全部機器的通道打開,這樣在每臺機器之間跳轉,就不須要輸入密碼。

> cd /home/gpadmin/conf  
> gpssh-exkeys -f hostlist

  • 在打通全部機器通道以後,咱們就可使用 gpssh 命令對全部機器進行批量操做了。

> gpssh -f hostlist

備註:這是一個神奇的功能,原來我接觸的集羣部署,須要運行 SCP 遠程拷貝命令。若是有100臺,就須要操做100次。可是,這裏只須要操做一次,就完成到所有集羣的操做,前面帶 "=>",exit 退出。

4.3 分發數據庫文件

• 打包

> cd /usr/local
> tar -cf gp6.tar greenplum-db-6.1.0/
> chown -R gpadmin:gpadmin /usr/local/gp6.tar

打包的時候權限不夠,我換成root,而後再把.tar的權限還給gpadmin。

最後,要用gpadmin操做,由於前面設置了gpadmin免密。

• 分發

> gpscp -f /home/gpadmin/conf/hostlist gp6.tar =:/usr/local/greenplum

官網沒有這部分的說明,書上看到用的是 hostlist 做爲參數去操做。可是 hostlist 裏面的是配置包括 master 的主機別名,因此,主機到主機也複製了一份。

書上的用意應該是,把 greenplum-db-6.1.0 放進 greenplum 裏面,外面那套greenplum重複了,就刪掉。而後,4臺機器都在同一個目錄下。

• 解壓

在master上運行,一臺上敲命令,操做4臺。

> gpssh -f /home/gpadmin/conf/hostlist
=> cd /usr/local/greenplum
=> tar -xf gp6.tar
=> ln -s greenplum-db-6.1.0 greenplum-db

最後,退出。

5.環境配置

5.1 建立數據存儲空間 

以上安裝的是程序,接下來要建立數據存儲空間 。

• Master

Master 不存儲 user data,僅有 system catalog tables 和 system metadata ,我這裏沒有 Standby Master。因此,只在 Master 建立一個目錄便可。

> mkdir -p /home/gpadmin/data/master

• Segment

數據存儲在Segment 中,而且須要 primary segments 和 mirror segments,其他3臺segment 用 gpssh分別建立2個目錄。

> source /usr/local/greenplum-db/greenplum_path.sh 
> gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/primary'
> gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/mirror'

5.2  配置 .bash_profile 環境變量

• /home/gpadmin/.bash_profile, 網上沒有確切說要配置幾臺,我4臺都配置了。

source /usr/local/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/data/master/gpseg-1
export PGPORT=5432
export PGUSER=testDB

其中,greenplum_path.sh中包括greenplun運行的一些環境變量設置,包GPHOME等,由於安裝後把位置改了,4臺都修正之。

• 使之生效

> source /home/gpadmin/.bash_profile

5.3  初始化配置文件

• configuration file
模板在:$GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config,拷貝過來。

> mkdir /home/gpadmin/gpconfigs
> cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
#數據庫代號
ARRAY_NAME="Greenplum"

#segment前綴
SEG_PREFIX=gpseg

#primary segment 起始的端口號
PORT_BASE=33000

#指定primary segment的數據目錄,網上寫的是多個相同目錄,多個目錄表示一臺機器有多個segment
declare -a DATA_DIRECTORY=(/home/gpadmin/data/primary)

#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/mirror)

• host file

6. 初始化數據庫

 6.1 安裝

> cd ~
> gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem

期間會提示,是否繼續,輸入y便可:

• 以上提示安裝失敗

• 查看日誌,排查異常

[FATAL]:-Not on original master host Master, backout script exiting!
解決:不使用這個腳本清理中間數據,按照backout裏面的步驟一個個刪除。

• 經歷過不少次失敗,最後成功了,也忘記怎麼過來的。多是我在gpadmin和root之間頻繁切換,要Source 環境變量,反正網上均可以搜到答案。

7. 使用數據庫

7.1 psql 登陸數據庫

psql -d postgres

• 建立數據庫

命令集參考文檔以下:

https://gpdb.docs.pivotal.io/6-1/ref_guide/sql_commands/sql_ref.html

\q 退出
\l 顯示數據庫列表

7.2 容許外部登陸

• navicat登陸

結果報錯,由於greenplum有權限控制,並非全部的機器均可以鏈接到數據庫。須要在pg_hba.conf文件增長客戶端機器的權限。

• 先給gpadmin建立一個密碼:

testdb=# alter role gpadmin with password 'gpadmin';
ALTER ROLE

• 在Linux,咱們能夠用命令快速查找一個文件:

[root@  ~]# find / -type f -name pg_hba.conf
/home/gpadmin/data/master/gpseg-1/pg_hba.conf

• 由於是POC,我開通全網能夠直接訪問所有數據庫。

鏈接方式 鏈接的數據庫 鏈接的用戶  鏈接的主機IP  認證方式
host     all         gpadmin     192.168.0.0/16   trust

• 刷新

pg_ctl reload -D /home/gpadmin/data/master/gpseg-1

備註:官網說的 gpstop -u 能夠刷新 postgresql.conf 和 pg_hba.conf 但不重啓 Greenplum Database,實際上是不行的,我一直改pg_hba.conf,一直報錯。

• navicat登陸

大功告成!

7.3 其餘greenplum命令

• 關閉

> gpstop

• 啓動

> gpstart

• 狀態查看

> gpstate

• 其餘

https://gpdb.docs.pivotal.io/6-1/utility_guide/ref/gpstate.html

關於做者

麥煜遙 (公衆號:Entelodon):畢業於電子科技大學(成都) ,熱衷IT技術,擅長數據分析。曾從事社保數據分析處理,IBM/AS400 DB2開發、數據分析,參保人員數據量月增千萬級;曾於電腦OEM廠商,負責EDI(電子數據交換),電子訂單秒級併發量萬級。現於供職於風電行業,從事大數據分析。

相關文章
相關標籤/搜索