—— 原文發佈於本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),歡迎關注。python
Greenplum是一個MPP(海量並行處理)計算框架的分佈式數據庫,其數據庫引擎層是基於著名的Postgresql數據庫,企業級數據庫產品,現已開源。Greenplum擁有豐富的特性,包括:
一、徹底支持ANSI SQL 2008標準和SQL OLAP 2003 擴展,支持ODBC和JDBC
二、支持分佈式事務,支持ACID
三、支持行存儲、列存儲,以及可經過外部表的方式訪問其它關係型數據庫或者Hadoop
四、擁有良好的線性擴展能力,支持上千個節點
linux
Greenplum的體系架構以下:sql
master節點可實現主備高可用,避免單點故障;segments節點分散存放數據,數據做多副本保存,可進行數據的並行查詢和操做,很是高效。docker
下面描述在docker中安裝配置greenplum集羣的過程數據庫
1、安裝dockercentos
本人手上只有一臺筆記本,安裝了Ubuntu操做系統,爲了方便安裝測試greenplum集羣,在Ubuntu操做系統上安裝docker,而後建立多個容器構建出一個greenplum集羣。bash
一、安裝docker微信
sudo apt-get install docker
二、拉取centos鏡像架構
docker pull centos:latest
三、建立容器,做爲greenplum的節點框架
sudo docker run --name gpcentos1 -it centos /bin/bash sudo docker run --name gpcentos2 -it centos /bin/bash sudo docker run --name gpcentos3 -it centos /bin/bash sudo docker run --name gpcentos4 -it centos /bin/bash
2、配置基礎環境
進入到每一個greenplum節點,配置基礎環境
一、安裝相關的依賴包
因爲拉取了docker的centos鏡像,這個是centos的簡化版本,裏面有一些程序包是沒有默認安裝的,會影響到後面部署greenplum,所以在docker的每一個節點中安裝相關的依賴包
# centos 安裝相關的依賴包(每一個節點) yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64
二、啓動ssh
docker中默認沒有啓動ssh,爲了方便各節點之間的互連,啓動docker的每一個節點裏面的ssh,並建立相關的認證key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key /usr/sbin/sshd
三、配置主機域名映射關係
在每一個docker節點中配置,方便後續greenplum集羣的配置文件中用到
vi /etc/hosts 172.17.0.2 25cd9b8d455f 172.17.0.3 2ced6321dab6 172.17.0.4 d2b44bb77b77 172.17.0.2 dw-greenplum-1 mdw 172.17.0.3 dw-greenplum-2 sdw1 172.17.0.4 dw-greenplum-3 sdw2
同時,修改全部節點裏面的 /etc/sysconfig/network 文件,保持主機名一致
cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=mdw
四、建立greenplum的用戶和用戶組
在每一個節點中建立greenplum的用戶和用戶組,方便安裝greenplum集羣。另外,因爲greenplum自帶了一個python,容易也系統的python版本相沖突,爲了避免影響到系統的其它用戶,將建立安裝greenplum的專用用戶
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
五、修改每一個節點上的文件打開數量限制
vi /etc/security/limits.conf # End of file * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
六、關閉每一個節點上的防火牆,關閉selinux
service iptables stop chkconfig iptables off
[root@mdw selinux]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
3、下載greenplum安裝包
到greenplum的官網上,下載greenplum安裝包,點開Greenplum Database Server,根據操做系統下載安裝包 greenplum-db-4.3.14.1-rhel5-x86_64.zip,將其上傳到master節點mdw的/home/gpadmin目錄中。
4、在master節點上安裝greenplum
切換到gpadmin帳號
su gpadmin
解壓下載後的zip文件
unzip greenplum-db-4.3.14.1-rhel5-x86_64.zip
賦予文件執行權限
chmod +x greenplum-db-4.3.14.1-rhel5-x86_64.bin
執行安裝文件
./greenplum-db-4.3.14.1-rhel5-x86_64.bin
安裝期間須要修改默認安裝目錄,輸入/home/gpadmin/greenplum-db-4.3.14.1
爲了方便安裝集羣,greenplum提供了批量操做的指令,經過建立配置文件,以使用批處理命令
[gpadmin@mdw ~]$ cat ./conf/hostlist mdw sdw1 sdw2 [gpadmin@mdw ~]$ cat ./conf/seg_hosts sdw1 sdw2
設置環境變量,打通全部節點
greenplum-db/greenplum_path.sh中保存了運行greenplum的一些環境變量設置,包括GPHOOME、PYTHONHOME等設置,在gpadmin帳號下設置環境變量生效,而後打通全部節點
[gpadmin@mdw ~]$ source /home/gpadmin/greenplum-db/greenplum_path.sh [gpadmin@mdw ~]$ gpssh-exkeys -f /home/gpadmin/conf/hostlist [STEP 1 of 5] create local ID and authorize on local host ... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped [STEP 2 of 5] keyscan all hosts and update known_hosts file [STEP 3 of 5] authorize current user on remote hosts ... send to sdw1 ... send to sdw2 [STEP 4 of 5] determine common authentication file content [STEP 5 of 5] copy authentication files to all remote hosts ... finished key exchange with sdw1 ... finished key exchange with sdw2 [INFO] completed successfully
成功打通,後面就可使用如下命令開啓批量操做
注意:使用gpssh-exkeys命令時必定要使用gpadmin身份,由於會在/home/gpadmin/.ssh中生成ssh的免密碼登陸祕鑰,若是使用了其它帳號登陸,則會生成密鑰在其它帳號下,後面在gpadmin帳號下就沒法使用gpssh的批處理命令
[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist Note: command history unsupported on this machine ... => pwd [sdw1] /home/gpadmin [sdw2] /home/gpadmin [ mdw] /home/gpadmin => exit
這裏pwd命令是linux中的查看路徑命令,在這裏也是查看批量操做時所在的路徑,從中能夠看到已經成功連通了三個節點
5、分發安裝包到每一個子節點
打包master節點上的安裝包
tar -cf gp.4.3.tar greenplum-db-4.3.14.1/
使用gpscp命令將這個文件複製到每一臺機器上
gpscp -f /home/gpadmin/conf/hostlist gp.4.3.tar =:/home/gpadmin/
批量解壓,並創建軟連接
[gpadmin@mdw conf]$ gpssh -f hostlist => cd /opt/greenplum [sdw1] [sdw2] [mdw] => tar -xf gp.4.3.tar [sdw1] [sdw2] [mdw] => ln -s ./greenplum-db-4.3.8.1 greenplum-db [sdw1] [sdw2] [mdw]
這樣就完成了全部節點的安裝
6、初始化安裝數據庫
一、批量建立數據目錄
[gpadmin@mdw conf]$ gpssh -f hostlist => mkdir gpdata [ mdw] [sdw2] [sdw1] => cd gpdata [ mdw] [sdw2] [sdw1] => mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2 [ mdw] [sdw2] [sdw1] => exit
二、在每一個節點上配置.bash_profile環境變量
[gpadmin@mdw ~]$ cd [gpadmin@mdw ~]$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH source /opt/gpadmin/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1 export PGPORT=2345 export PGDATABASE=testDB [gpadmin@mdw ~]$ source .bash_profile
三、初始化配置文件
[gpadmin@mdw ~]$ cat /home/gpadmin/conf/gpinitsystem_config ARRAY_NAME="Greenplum" MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts # Segment 的名稱前綴 SEG_PREFIX=gpseg # Primary Segment 起始的端口號 PORT_BASE=33000 # 指定 Primary Segment 的數據目錄 declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2) # Master 所在機器的 Hostname MASTER_HOSTNAME=mdw # 指定 Master 的數據目錄 MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster # Master 的端口 MASTER_PORT=2345 # 指定Bash的版本 TRUSTED_SHELL=/usr/bin/ssh # Mirror Segment起始的端口號 MIRROR_PORT_BASE=43000 # Primary Segment 主備同步的起始端口號 REPLICATION_PORT_BASE=34000 # Mirror Segment 主備同步的起始端口號 MIRROR_REPLICATION_PORT_BASE=44000 # Mirror Segment 的數據目錄 declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)
四、初始化數據庫
gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw2
其中,-s sdw2是指master的standby所在的節點,而後按照提示步驟就能完成安裝了。
若是gpinitsystem不能成功,就在master節點的/home/gpadmin/gpAdminLogs/的gpinitsystem_*.log文件中查看日誌信息,找出緣由進行修改,而後再從新執行gpinitsystem進行初始化安裝。
歡迎關注本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),獲取更多資訊