Greenplum 5.16.0初探
- 2019 年 10 月 5 日
- 筆記
Greenplum是一款MPP型資料庫,對於數據集市而言比較合適。
個人覺得GP目前比較尷尬。性能比Presto稍差點,唯品會已經把GP改用Presto替換看了。另外數倉/數據集市方面還有性能強悍的HAWQ ,支援更大數據規模Hadoop。
MPP資料庫擴展時,一般情況下是計算節點和數據節點一起增加的,在增加節點後,需要對數據做重分布才能保證數據與節點的緊耦合(重新hash數據),進而保證系統的性能;Hadoop在增加存儲層節點後,雖然也需要Rebalance數據,但相較MPP而言,不是那麼緊迫。
因此,作為一個非大數據的DBA,我這裡只是對GP的大致了解下,沒有過多深入。
GP的結構



GP的安裝部署
CentOS下建議使用XFS文件系統。
IP地址 | 主機名 | 角色 |
|---|---|---|
192.168.2.11 | dw-greenplum-1 mdw | Master |
192.168.2.12 | dw-greenplum-2 sdw1 | Primary1Primary2Mirror5Mirror6 |
192.168.2.13 | dw-greenplum-3 sdw2 | Primary3Primary4Mirror1Mirror2 |
192.168.2.14 | dw-greenplum-4 sdw3 | Primary5Primary6Mirror3Mirror4Standby |
1、分別到各個節點上設置主機名
hostnamectl set-hostname dw-greenplum-1
hostnamectl set-hostname dw-greenplum-2
hostnamectl set-hostname dw-greenplum-3
hostnamectl set-hostname dw-greenplum-4
每台機器修改內核參數
echo 'kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2' >> /etc/sysctl.conf
sysctl -p # 讓參數生效
每台機器修改文件打開數等限制
echo '* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072' >> /etc/security/limits.conf
2、需要配置hosts解析
cat /etc/hosts 增加下面4行
192.168.2.11 dw-greenplum-1 mdw
192.168.2.12 dw-greenplum-2 sdw1
192.168.2.13 dw-greenplum-3 sdw2
192.168.2.14 dw-greenplum-4 sdw3
3、創建用戶和用戶組
groupdel gpadmin
userdel pgadmin
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/pgadmin -s /bin/bash gpadmin
4、為文件夾賦權,為新用戶創建密碼
chown -R gpadmin.gpadmin /home/gpadmin
echo '123456' | passwd --stdin gpadmin
5、安裝gp二進位包 【這個操作只在mdw節點上執行安裝gp二進位包,然後其它節點可以通過scp拷貝安裝包的方式部署】
先創建相關的目錄並授權
mkdir /opt/greenplum
chown -R gpadmin.gpadmin /opt/greenplum/
unzip greenplum-db-5.16.0-rhel7-x86_64.zip
./greenplum-db-5.16.0-rhel7-x86_64.bin

配置 hostlist 和 seg_hosts文件
su - gpadmin
echo 'source /opt/greenplum/greenplum-db/greenplum_path.sh' >> .bash_profile
source .bash_profile # 使環境變數生效
mkdir conf && cd conf
cat hostlist 內容如下:
mdw
sdw1
sdw2
sdw3
cat seg_hosts 內容如下:
sdw1
sdw2
sdw3
然後,使用 gpssh-exkeys 打通全部的伺服器

### 這裡的密碼是 123456
打通機器通道之後,我們就可以使用 gpssh 命令對所有機器進行批量操作了。

將軟體分發到每一台機器上:
cd /opt/greenplum
tar -cf gp-5.16.0.tar greenplum-db-5.16.0
chown gpadmin.gpadmin gp-5.16.0.tar
su - gpadmin
cd /opt/greenplum
gpscp -f /home/gpadmin/conf/hostlist gp-5.16.0.tar =:/opt/greenplum
然後 ,可以使用pgssh 批量解壓文件包
gpssh -f hostlist
cd /opt/greenplum
tar -xf gp-5.16.0.tar
ln -s greenplum-db-5.16.0 greenplum-db
下面,開始創建資料庫數據目錄:
su - gpadmin
MASTER、Standby目錄:
mkdir /home/gpadmin/gpdata/gpmaster -pv
Primary節點目錄:
mkdir /home/gpadmin/gpdata/gpdatap1 -pv
mkdir /home/gpadmin/gpdata/gpdatap2 -pv
Mirror節點目錄:
mkdir /home/gpadmin/gpdata/gpdatam1 -pv
mkdir /home/gpadmin/gpdata/gpdatam2 -pv
GPMaster 目錄保存Master的數據,每個機器上的 gpdatap1、gpdatap2 分別對應每個機器上的兩個主數據節點目錄, 同樣的,gpdatam1、gpdatam2 對應備數據節點目錄。
配置 .bash_profile, 在mdw節點執行:
su - gpadmin
echo 'export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=5432
export PGDATABASE=testDB' >> /home/gpadmin/.bash_profile
source /home/gpadmin/.bash_profile
初始化GP的配置文件
su - gpadmin
cd $GPHOME/docs/cli_help/gpconfigs
cp gpinitsystem_config /home/gpadmin/conf/ # gpinitsystem_config這是個模板文件,用來做參照用
vim initgp_config 編寫一個初始化用的配置文件,如下:
ARRAY_NAME="Greenplum"
SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
MASTER_PORT=5432
TRUSTED_SHELL=/usr/bin/ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=43000
REPLICATION_PORT_BASE=34000
MIRROR_REPLICATION_PORT_BASE=44000
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
使用pginitsystem命令來初始化資料庫
gpinitsystem -c initgp_config -h seg_hosts -s sdw3
參數說明:
gpinitsystem -c <gpinitsystem_config>
[-h <hostfile_gpinitsystem>]
[-B <parallel_processes>]
[-p <postgresql_conf_param_file>]
[-s <standby_master_host>
[-P <standby_master_port>] [-F <standby_master_filespaces>]]
[--max_connections=<number>] [--shared_buffers=<size>]
[--locale=<locale>] [--lc-collate=<locale>]
[--lc-ctype=<locale>] [--lc-messages=<locale>]
[--lc-monetary=<locale>] [--lc-numeric=<locale>]
[--lc-time=<locale>] [--su_password=<password>]
[-S] [-a] [-q] [-l <logfile_directory>] [-D]
上面的命令執行成功後,類似如下圖:

可以在 mdw上登錄到gp查看下情況:

可以看出,PG5.16.0 是基於 PG8.3構建的。
安裝GPCC web介面
官方文檔:http://gpcc.docs.pivotal.io/450/topics/setup-install-top.html
在dw-greenplum-1 節點上執行如下操作:
1 先安裝監控庫和創建帳號
su - gpadmin
gpperfmon_install --enable --password gpmon --port 5432 # 安裝gpperfmon資料庫,以及為gpmon用戶創建密碼,埠是greenplum配置的埠
gpstop -M fast -a
gpstart -a
ps -ef | grep gpmmon
psql -d 'gpperfmon' -c 'select * from system_now' 檢查是否安裝了gperfmon庫
拷貝 dw-greenplum-1 上master節點的pg_hba.conf 文件的如下內容到standby節點的pg_hba.conf 中,確保二者一致的。
local gpperfmon gpmon md5
host all gpmon 127.0.0.1/28 md5
host all gpmon ::1/128 md5
拷貝 dw-greenplum-1 上master節點的.pgpass 到standby節點:
scp /home/gpadmin/.pgpass gpadmin@sdw3:~/.pgpass
在sdw3這個standby上設置下pgpass的許可權:chmod /home/gpadmin/.pgpass
在 dw-greenplum-1 上執行下 gpstop -u # 重載下配置文件
2安裝greenplum-cc-web程式
su - gpadmin
cd conf/
gpssh -f hostlist
=> cd /opt/greenplum/
=> mkdir /opt/greenplum/greenplum-cc-web-4.5.1
=> chown gpadmin:gpadmin /opt/greenplum/greenplum-cc-web-4.5.1
=> exit 退出gpssh控制台
su - gpadmin
unzip greenplum-cc-web-4.5.1-LINUX-x86_64.zip
cd greenplum-cc-web-4.5.1-LINUX-x86_64
./gpccinstall-4.5.1

然後,添加下環境變數
echo 'source /opt/greenplum/greenplum-cc-web-4.5.1/greenplum-cc-web-4.5.1/gpcc_path.sh' >> /home/gpadmin/.bash_profile
上面的安裝執行完成後,還需要配置下pg_hba文件:
vim /home/gpadmin/gpdata/gpmaster/gpseg-1/pg_hba.conf
#在最後一行添加這句
host all gpmon 192.168.2.0/24 md5
gpstop -u 然後重載配置文件(實際上這裡只需要重載下master節點的配置文件)
gpcc start
訪問 http://192.168.2.11:28080 帳號密碼 都是 gpmon 效果如下圖:

其它幾個常用的命令:
gpcc stop
gpcc status
gpcc --settings