【乾貨】在docker中安裝配置Greenplum集羣的過程

—— 原文發佈於本人的微信公衆號「大數據與人工智能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),獲取更多資訊

相關文章
相關標籤/搜索