Greenplum是一套基于postgresql数据库的典型MPP集群数据库,整个GP环境中包含几个部分:
1. Master:建立与客户端的连接和管理,生产SQL查询计划,执行计划向segment的分发收集执行结果。Master本身不负责数据存储,只存储数据字典。
2. Segment:业务数据的存取,用户SQL的执行。
3. Master高可用,使用节点standby的方式。
4. Segment高可用,使用磁盘镜像的方式。
一、 准备
1. 软件:以下软件为确认可用的版本
1) 对于数据库版本和操作系统版本已经验证的有两个组合
a) 操作系统:Red Hat Enterprise Linux Server 6.2 64bit.
数据库:greenplum-db-4.3.8.2-build-1-RHEL5-x86_64.zip
b) 操作系统:CentOS-6.8-x86_64-bin-DVD1.
数据库:greenplum-db-5.2.0-rhel6-x86_64.zip.zip
2) 辅助工具:Xshell,winscp等。
2. 操作系统环境:
由于是集群数据库,所以要准备多台服务器,并且每台服务器均按如下方法进行配置:
i. root修改内核
修改 /etc/sysctl.cof:
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route =0
# Controls the System Request debuggingfunctionality of the kernel
kernel.sysrq = 1
# Controls whether core dumps will appendthe PID to the core filename.
# Useful for debugging multi-threadedapplications.
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Disable netfilter on bridges
#net.bridge.bridge-nf-call-ip6tables = 0
#net.bridge.bridge-nf-call-iptables = 0
#net.bridge.bridge-nf-call-arptables = 0
# Controls the default maxmimum size of amesage queue
kernel.msgmnb = 65536
# Controls the maximum size of a message,in bytes
kernel.msgmax = 65536
kernel.msgmni = 2048
kernel.sem = 250 512000 100 2048
# Controls the maximum shared segment size,in bytes
#kernel.shmmax = 68719476736
kernel.shmmax = 500000000 --共享内存段最大值
kernel.shmmni = 4096 --共享内存段最大值
# Controls the maximum number of sharedmemory segments, in pages
#kernel.shmall = 4294967296
kernel.shmall = 4000000000 --共享内存段最大值
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog=10000
vm.overcommit_memory=2
net.ipv4.conf.all.arp_filter = 1
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
ii. root修改Linux最大连接数
vi /etc/security/limits.conf
#greenplum configs
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
逐个修改/etc/security/limits.d/90-nproc.conf
* soft nproc 131072
iii. I/O优化
vi /boot/grub/menu.lst
#greenplum configs
elevator=deadline
vi /etc/rc.d/rc.local, 最后加blockdev --setra 65536 /dev/sda –修改扇区读写能力。
iv. 在host中配置节点信息
vi /etc/hosts
192.168.153.128 node01
192.168.153.129 node02
192.168.153.130 node03
192.168.153.131 node04
v. 关闭防火墙
a) 在rhel中:
chkconfig --list iptables
chkconfig --level 0123456 iptables off
b) 在centOS中:
Service iptables stop
ntsysv
vi. 关闭SELINUX
vi /etc/selinux/config
SELINUX=disabled
vii. 重启服务器
3. 系统结构
本例中建立了4台服务器,其中一台做master,一台做master的standby,剩下两台只做数据存储,基本图形如下:
node01 | master | node02 | master-standby | |
primary | primary | |||
mirror | mirror | |||
node03 | primary | node04 | primary | |
mirror | mirror |
二、 Greenplum数据库安装
所有安装过程,若非特殊说明,均在master节点完成,本例中的master预定为node01。
1. 创建gpadmin用户
这步在所有节点上完成:
useradd gpadmin
passwd gpadmin
2. 配置gpadmin用户的环境变量(所有节点)
Vim .bashrc和.bash_profile,添加下面两行
source/usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/gpdata/master/gpseg-1
不做任何改动,默认安装位置,这两句会生效,注意后面建立存储目录时,和这个地方的master要对应。Greenplum-db是安装过程中创建的软连接,默认即可。
注意系统变量/etc/profile也添加这两句话,并注意执行source使之生效。
3. 执行安装(以下操作均在node01上完成)
将数据库安装文件上传到/opt目录下,解压并执行安装,这里不用对路径等信息做修改,一路默认即可,数据库名称可以适当进行调整。安装完成后,系统会自动在/usr/local目录下创建一个名为greenplum-db对安装目录的连接,这样和前面profile中的配置就一致了,如果修改了安装位置,有可能创建连接会失败。
4. 准备节点信息
创建一个目录专门存放节点配置,mkdir -p /opt/gpinst/,在这个目录里创建一个文件all_host,实际上文件名可以任意。内容是:
Node01
Node02
Node03
Node04
5. 建立节点之间的信任
就是通过节点配置,在节点之间执行交换key,保证节点之间的访问不需要登录验证过程。若前面已经配置好profile并执行了source,直接进入/usr/local/greenplum-db/bin,执行
gpssh-exkeys -f /opt/gpinst/all_host,根据系统提示操作,这里需要输入的是root的密码。
执行完成后可以在不同节点上通过ssh访问其他节点,若不需要再输入密码直接登录,则说明操作正确。
6. 执行安装
仍然在bin目录下执行:
gpseginstall -f /opt/gpinst/all_host -ugpadmin -p gpadmin
一路顺利完成部署操作
7. 创建存储目录
由一开始的内容可知,我们这次准备了4台服务器,分别为node01,node02,node03,node04。Node01上要安装集群的master,同时他还要另外承担一部分segment的任务,其次还要配置某个节点的mirror,node02与node01类似,只不过node02上会部署node01的master-standby,node03和node04只做segment并部署集群中某个节点的mirror。
Node01:
/data/gpdata/master
/data/gpdata/primary
/data1/gpdata/mirror
Node02
/data/gpdata/master
/data/gpdata/primary
/data1/gpdata/mirror
Node03
/data/gpdata/primary
/data1/gpdata/mirror
Node04
/data/gpdata/primary
/data1/gpdata/mirror
8. 开始创建目录:
Master
mkdir -p /data/gpdata/master
chown gpadmin:gpadmin /data/gpdata/master
segment(primary,在每个节点的/data目录下创建,使用gp自带的gpssh工具执行)
gpssh -f /opt/gpinst/all_host -e 'mkdir -p /data/gpdata/primary'
gpssh -f /opt/gpinst/all_host -e 'chown gpadmin:gpadmin/data/gpdata/primary'
mirror(同样在每个节点的/data1目录下创建)
gpssh -f /opt/ gpinst / all_host -e 'mkdir -p /data1/gpdata/mirror'
gpssh -f /opt/ gpinst / all_host -e 'chown gpadmin:gpadmin/data1/gpdata/mirror'
9. 设置时钟同步
注意这个操作是在本案例中的操作系统中进行,其他版本的Linux可能会不一样,甚至无法成功。
vi /etc/ntp.conf
加入一行:server 192.168.153.128,每个节点上都进行同样的操作,同时这个server填成统一的,这样所有的机器统一和这个IP的服务器进行时间同步。
重启ntpd服务 /etc/init.d/ntpd restart
查看ntp同步情况 ntpq -p
使ntpd服务重启服务器后也启动 chkconfig --level 0123456 ntpd on
10. 编辑数据库初始文件
使用gpadmin创建目录和文件,
Mkdir /home/gpadmin/gpconfigs
Cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config/home/gpadmin/gpconfigs/
Chmod 775 /home/gpadmin/gpconfigs/gpinitsystem_config
修改这个gpinitsystem_config文件:
declare -a DATA_DIRECTORY=(/data/gpdata/primary)–若在每个节点上的指定目录里只创建一个primary,则这里只写一个位置即可,若超过一个,就会在每个节点上创建多余1个的primary目录。
ARRAY_NAME="HX Greenplum DW" –默认即可
SEG_PREFIX=gpseg –默认即可
PORT_BASE=40000 –默认即可
MASTER_HOSTNAME=node01
MASTER_DIRECTORY=/data/gpdata/master
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/mirror) --和primary一样
DATABASE_NAME=greenplum-db_test
MACHINE_LIST_FILE=/home/gpadmin/gpconfigs/hostfile_gpinitsystem --注意这个文件需要从cli_help目录中复制过来。
11. 执行数据库初始化
Gpadmin在bin目录下:
gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config -h /opt/gpinst/all_host
跟进提示,输入一次y,顺利就可以完成数据库部署。
12. 为master安装standby
为node01的master在node02上配置standby,在node02相同的位置创建一个master文件夹。
在node02上执行以下操作:
mkdir/data/gpdata/master
chowngpadmin:gpadmin /data/gpdata/master
在node01上执行以下操作:(注意此时数据库应是启动的)
gpinitstandby -snode02
按照顺序执行直接完成创建standby操作。
13. 设置访问权限
Greenplum数据库作为mpp结构的系统,用户只能通过Master节点对数据进行访问,所以需要修改master中的hba文件,使其能够接受网络中其他终端的访问。
Vi /data/gpdata/master/gpseq-1/pg_hba.conf,在最后加上
#user define
host all all 192.168.153.0/24 trust --根据实际情况修改
host all all 127.0.0.1/28 trust
三、 Greenplum数据库的基本使用
1. 启动和停止
gpstart
gpstop
2. 查看数据库状态
psql –l
pgstate
3. 命令行连接访问数据库
psql -d hx_gp -h node01 -p 5432 -U gpadmin