1 介紹
Greenplum是Pivotal公司開源的一款大規模並行處理(MPP)數據庫,其架構是專門針對大型分析性數據倉庫和商業智能工作負載設計。本質上講,它是多個 PostgreSQL 實例一起充當一個數據庫管理系統。
2 Linux配置(每一台主機)
所有節點進行配置linux的部署環境,本文使用系統是centos6.5。對於節點數的選擇,一般來說,業務量不是很大的情況下,選擇3~5個計算節點較為合適,而且,每個計算節點不在同一台物理機中,同時master和standby不在同一台物理機中。盡量將每個節點分散出去,避免因為宿主機宕機導致整個集群不可用。greenplum集群可以同時允許一個計算節點和一個master節點宕機還能正常工作(前提是配置了mirror機制和standby備用master)。
2.1 配置hosts
修改系統hosts文件,vim /etc/hosts,實際中可以參考如下配置,實際的IP按照申請虛擬機的IP來設置。注意,之前安裝時候,OpenStack創建的機器登錄IP和網卡IP不一致,需要配置成網卡IP。主機名要與實際中的一致,此處的master、datan和standby只作為舉例使用。
10.10.10.10 master
10.10.10.11 data1
10.10.10.12 data2
10.10.10.13 data3
10.10.10.14 data4
10.10.10.15 standby
2.2 節點間互信配置
為了簡化配置,建議將各個服務器root密碼配置成相同的。一般的配置方法如下:
ssh-keygen -t rsa #使用root用戶運行,四個回車OK
ssh-copy-id ip1 #會提示輸入密碼,ip1是需要ssh免密碼登錄的機器IP
ssh ip1 #驗證是否成功
注意,配置集群的互信是雙向的,因此需要在每一台機器上運行上述命令。
如果機器眾多的話,也可以用下面腳本的方法來配置。
-
安裝expect
yum install expect -y -
生成秘鑰
ssh-keygen
運行下面的腳本
#!/bin/bash
SERVERS="master data1 data2 data3 data4 standby"
PASSWORD=gpadmin #配置每一台的主機root密碼為相同的
auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all() {
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
}
ssh_copy_id_to_all
注意,該腳本也需要在每一台主機上運行一次。
2.3 添加用戶
為每一台主機增加gpadmin用戶和相關組,並設置用戶密碼,下面的mypassword根據實際情況進行改變。
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin.gpadmin /home/gpadmin
echo "mypassword" | passwd --stdin gpadmin
2.4 關閉SELinux, iptables
為了避免不必要的安裝問題,建議關閉selinux和iptables。
查看當前selinux配置,如果不是disable則需要進行關閉。
[xxxx@xxxx ~]$ sestatus
SELinux status: disabled
查看iptables的狀態
/etc/init.d/iptables status
如果為打開的,建議直接關閉,並關閉開機啟動
service iptables stop
chkconfig iptables off
2.5 配置內核參數
系統內核參數在sysctl.conf中,可以使用vim 編輯器打開/etc/sysctl.conf
kernel.shmmax=34359738368
kernel.shmall=8388608
kernel.shmmni = 4096
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.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 = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2
vm.overcommit_ratio=95
配置完后使用sysctl -p使配置生效,如果出現了問題,請查看參數是否存在。
2.6 配置進程文件資源限制
可以使用如下命令來配置參數
vim /etc/security/limit.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
注意:對於RedHat6.x系統,還需要將/etc/security/limits.d/90-nproc.conf文件中 的1024修改為131072。
2.7 XFS分區
官方建議使用xfs分區,在沒有特殊需求的情況下ext3、ext4也是沒有問題的。
2.8 設置linux調度器規則
默認為cfq,更改為deadline,由於數據庫安裝的盤設備名是sdb,因此只需要將設備名更改為sdb即可。
查看調度器規則
cat /sys/block/sdb/queue/scheduler
更改
echo deadline > /sys/block/sdb/queue/scheduler
2.9 禁用 Transparent Huge Pages (THP)
查看
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
更改為never
echo never > /sys/kernel/mm/transparent_hugepage/defrag
2.10 修改磁盤預計參數 「預讀扇區數」
df -T查看有哪些磁盤
將相關的數據盤進行調整:
blockdev --setra 65536 /dev/sda
blockdev --setra 65536 /dev/sdb
2.11 NTP時間校驗
由於集群的同步依賴於時間,因此集群的各台主機的時間要一致。
ntpdate cn.pool.ntp.org
3 Greenplum安裝(master安裝)
3.1 下載
可以直接從官網下載 https://network.pivotal.io/products/pivotal-gpdb#/releases/1624 ,版本可以根據需要選擇,如果沒有賬號需要注冊一個賬號。
3.2 安裝
master上進行安裝,直接運行二進制文件,二進制的文件是上一步從官網下載的。
./greenplum-db-4.3.8.0-build-1-RHEL5-x86_64.bin
安裝的過程是交互,需要用戶補充相關的安裝信息,大致過程可以按照以下來進行。
********************************************************************************
Do you accept the Pivotal Database license agreement? [yes|no]
********************************************************************************
yes
********************************************************************************
Provide the installation path for Greenplum Database or press ENTER to
accept the default installation path: /usr/local/greenplum-db-4.3.8.0
********************************************************************************
[ENTER]
********************************************************************************
Install Greenplum Database into </usr/local/greenplum-db-4.3.8.0>? [yes|no]
********************************************************************************
yes
********************************************************************************
/usr/local/greenplum-db-4.3.8.0 does not exist.
Create /usr/local/greenplum-db-4.3.8.0 ? [yes|no]
(Selecting no will exit the installer)
********************************************************************************
yes
Extracting product to /usr/local/greenplum-db-4.3.8.0
********************************************************************************
Installation complete.
Greenplum Database is installed in /usr/local/greenplum-db-4.3.8.0
Pivotal Greenplum documentation is available
for download at http://docs.gopivotal.com/gpdb
********************************************************************************
3.3 更改文件夾權限
將greenplum的安裝路徑給gpadmin訪問權限
chown -R gpadmin.gpadmin /usr/local/
chown -R gpadmin.gpadmin /usr/local/greenplum-db
3.4 配置集群的hosts
這里分為兩個文件,是一個是集群所有的hosts,一個是計算節點(data)的hosts。這兩個文件不存在,需要用戶手動創建出來,創建的方法如下:
su - gpadmin
mkdir -p /usr/local/greenplum-db/conf
創建集群host_file
注意,host_file 和seg_file里面需要填上主機名,不要填以下名稱。
vim /usr/local/greenplum-db/conf/host_file
master
data1
data2
data3
data4
standby
創建計算節點seg_hosts
vim /usr/local/greenplum-db/conf/seg_hosts
data1
data2
data3
data4
3.5 安裝集群
這一步在其他節點上安裝greenplum
root用戶
source /usr/local/greenplum-db/greenplum_path.sh
gpseginstall -f /usr/local/greenplum-db/conf/host_file -u gpadmin -p gpadmin
3.6 配置gpadmin環境變量
vim /home/gpadmin/.bash_profile
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data1/gpdata/gpmaster/gpseg-1
export GPPORT=5432
export PGDATABASE=postgres
3.7 創建數據庫的數據目錄
這一步創建數據庫的數據庫文件存放目錄,這里的gpdatap1,gpdatap2,gpdatam1,gpdatam2是一個主機上的兩個主節點和兩個鏡像節點的數據庫文件目錄。這個目錄的結構根據實際情況進行調整,但是建議不要在一台主機上安裝過多的pg實例,否則數據同步時候,會大量占用系統網絡資源,導致節點down掉。
本文掛載的1T數據盤在/data1下。
gpssh -f /usr/local/greenplum-db/conf/host_file -e -v "mkdir -p /data1/gpdata/{gpmaster,gpdatap1,gpdatap2,gpdatam1,gpdatam2}"
3.8 初始化greenplum配置文件
配置文件模板在/usr/local/greenplum-db/docs/cli_help/gpconfigs里面,此模板中的mirror segment被注釋掉了,在實際使用的時候需要反注釋,然后進行配置,建議拷貝一份出來重命名。
cd /usr/local/greenplum-db/docs/cli_help/gpconfigs
cp gpinitsystem_config initgp_config
修改initgp_config配置文件。
ARRAY_NAME="EMC Greenplum DW"
MACHINE_LIST_FILE=/usr/local/greenplum-db/conf/seg_hosts
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/data1/gpdata/gpdatap1 /data1/gpdata/gpdatap2)
MASTER_HOSTNAME=master
MASTER_DIRECTORY=/data1/gpdata/gpmaster
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=50000
REPLICATION_PORT_BASE=41000
MIRROR_REPLICATION_PORT_BASE=51000
declare -a MIRROR_DATA_DIRECTORY=(/data1/gpdata/gpdatam1 /data1/gpdata/gpdatam2)
3.9 初始化集群
初始化命令 -S 表示使用Spread Mirror 分配 mirror節點,防止一個節點掛掉,另外一個節點集中成為瓶頸!-s 表示 standby master
gpinitsystem -c initgp_config -S -s standby
等待初始化成功后,執行gpstate來查看各節點狀態。
4 集群配置
4.1 修改master的pg_hba.conf和postgresql.conf
pg_hba.conf是控制數據庫訪問的文件
vim $MASTER_DATA_DIRECTORY/pg_hba.conf
host all gpadmin 0.0.0.0/0 md5
執行gpstop -u
使配置生效
postgresql.conf是集群的配置文件,可以根據實際情況進行配置。但是主要有兩個必須配置:
- 監聽地址
- 連接數
至此。集群安裝成功。
4.2 常用gp命令
操作 | 命令 |
---|---|
啟動 | gpstart -a |
停止 | gpstop -a |
快速停止 | gpstop -M fast |
配置重載,但是只適用於部分參數 | gpstop -u |
查看mirror的狀態 | gpstate -e |
查看standby master的狀態 | gpstate -f |
查看整個GP群集的狀態 | gpstate -s |
查看GP的版本 | gpstate -i |
幫助文檔,可以查看gpstat更多用法 | gpstate --help |
5 總結
本文介紹了安裝過程中的一些步驟,但是不作為標准,每一個參數的合理值需要根據實際情況進行調整。不同的節點,不同的機器配置,不同的網絡,不同的業務,參數都不盡相同。這個就偏離了本文的目的,參數調優是在實際過程中需要不斷調整和實踐的,每一個數據庫每一個業務場景都有其最佳實踐,需要自己去摸索。