1.1 机器准备
所有主机:配置ip、修改主机名,将所有节点ip和主机名一 一对应写入/etc/hosts文件。
[root@master ~]# tail -4 /etc/hosts
192.168.122.183 master
192.168.122.101 standby
192.168.122.206 segment1
192.168.122.89 segment2
效果要求:所有节点之间能够相互ping通。
1.2 系统环境配置(所有节点)
1.2.1 系统内核参数优化配置
修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效。
[root@master ~]# sysctl -p
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
1.2.2 修改Linux最大限制
追加到文件/etc/security/limits.conf即可。
[root@master ~]# tail -4 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
1.2.3 设置磁盘预读扇区数
blockdev --setra 16384 /dev/vda1
blockdev --setra 16384 /dev/mapper/centos-root
并将命令写入/etc/rc.local。
1.2.4 调整优化磁盘I/O
echo deadline > /sys/block/vda/queue/scheduler
并写入/etc/rc.local。
1.2.5 创建数据库用户
[root@master ~]# groupadd -g 530 gpadmin
[root@master ~]# useradd -u 530 -g530 -m -d /home/gpadmin -s /bin/bash gpadmin
[root@master ~]# passwd gpadmin
更改用户 gpadmin 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
1.2.6 关闭防火墙和selinux
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl mask firewalld
Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
[root@master ~]# setenforce 0
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/'
/etc/selinux/config
1.2.7 创建安装目录(所有主机)
mkdir /opt/greenplum; chown -R gpadmin:gpadmin /opt/greenplum
1.2.8 时间同步
master主机:
yum -y install ntp;vim /etc/ntp.conf
restrict 192.168.122.0/24 mask 255.255.255.0 nomodify
server 127.127.1.0 iburst
fudge 127.127.1.0 stratum 3
注销#默认的server
systemctl start ntpd; systemctl enable ntpd
除master外所有主机:
yum -y install ntpdate
[root@segment1 ~]# ntpdate master
11 May 12:20:54 ntpdate[1213]: adjust time server 192.168.122.183 offset -0.006148 sec
2.1、master节点安装Greenplum
2.1.1下载greenplum(master主机)
地址:https://network.pivotal.io/products/pivotal-gpdb/#/releases/73874/file_groups/929
下载文件:greenplum database 5.7.0 binary install for rhel7
2.1.2安装greenplum(master主机)
拷贝下载的greenplum-db-5.7.0-rhel7-x86_64.zip到/tmp下,yum -y install unzip,用unzip解
压greenplum-db-5.7.0-rhel7-x86_64.zip。
注意,此时开始全部使用gpadmin用户操作!!!!!!!!!!!!!!!!
切换到gpadmin用户:su - gpadmin
切换到gpadmin用户家目录:cd
执行解压后的二进制文件 :./greenplum-db-5.7.0-rhel7-x86_64.bin
[root@master tmp]# unzip greenplum-db-5.7.0-rhel7-x86_64.zip
Archive: greenplum-db-5.7.0-rhel7-x86_64.zip
inflating: greenplum-db-5.7.0-rhel7-x86_64.bin
[root@master tmp]# su - gpadmin
上一次登录:五 5月 11 17:11:59 CST 2018从 192.168.122.152pts/4 上
[gpadmin@master ~]$ cd /tmp/
[gpadmin@master tmp]$ ./greenplum-db-5.7.0-rhel7-x86_64.bin
期间按照提示内容, 输入yes和安装目录/opt/greenplum/greenplum-db即可。
******************************************************************************
**
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-5.7.0
******************************************************************************
******************************************************************************
**
/opt/greenplum/greenplum-db
2.1.3检查安装情况
ls /opt/greenplum/greenplum-db -l
[gpadmin@master ~]$ ll /opt/greenplum/greenplum-db/
总用量 32
drwxr-xr-x 7 gpadmin gpadmin 4096 3月 30 22:41 bin
drwxr-xr-x 4 gpadmin gpadmin 37 3月 30 22:23 docs
drwxr-xr-x 2 gpadmin gpadmin 44 3月 30 22:24 etc
drwxr-xr-x 3 gpadmin gpadmin 20 3月 30 22:24 ext
-rw-rw-r-- 1 gpadmin gpadmin 743 5月 11 13:57 greenplum_path.sh
drwxr-xr-x 6 gpadmin gpadmin 4096 3月 30 22:24 include
drwxr-xr-x 7 gpadmin gpadmin 8192 3月 17 01:52 lib
drwxr-xr-x 8 gpadmin gpadmin 107 3月 26 12:02 pxf
drwxr-xr-x 2 gpadmin gpadmin 4096 3月 30 22:27 sbin
drwxr-xr-x 6 gpadmin gpadmin 68 5月 11 14:12 share
2.1.4 目录和文件说明
2.2 在所有节点安装Greenplum
2.2.1准备安装节点文件
cd ; mkdir conf
[gpadmin@master ~]$ cat conf/all_host
master
standby
segment1
segment2
[gpadmin@master ~]$ cat conf/segment
segment1
segment2
2.2.2建立节点服务器间的信任
gpssh-exkeys -f conf/all_host,期间需要输入gpadmin的密码。
[gpadmin@master ~]$ gpssh-exkeys -f conf/all_host
[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 standby
... send to segment1
... send to segment2
[STEP 4 of 5] determine common authentication file content
[STEP 5 of 5] copy authentication files to all remote hosts
... finished key exchange with standby
... finished key exchange with segment1
... finished key exchange with segment2
[INFO] completed successfully
[gpadmin@master ~]$
2.2.3批量安装
gpseginstall -f conf/all_host -u gpadmin -p gpadmin
这里-u指定用户,-p授予gpadmin的权限
2.2.4检查批量安装结果
gpssh -f conf/all_host -e ls $GPHOME
[gpadmin@master ~]$ gpssh -f conf/master -e ls $GPHOME
[standby] ls /home/gpadmin/greenplum/greenplum-db
[standby] bin docs etc ext greenplum_path.sh include lib pxf
sbin share
[ master] ls /home/gpadmin/greenplum/greenplum-db
[ master] bin docs etc ext greenplum_path.sh include lib pxf
sbin share
[ segment1] ls /home/gpadmin/greenplum/greenplum-db
[ segment1] bin docs etc ext greenplum_path.sh include lib pxf
sbin share
[ segment2] ls /home/gpadmin/greenplum/greenplum-db
[ segment2] bin docs etc ext greenplum_path.sh include lib pxf
sbin share
2.3 初始化数据库集群
2.3.1 创建数据存放目录(全部在master使用gpadmin用户操作)
切换到gpadmin用户家目录:cd
创建主服务器目录:gpssh -h master -e 'mkdir gpdata/master -p'
创建备服务器目录:gpssh -h standby -e 'mkdir gpdata/master -p'
创建数据节点服务器目录:gpssh -f conf/segment -e 'mkdir gpdata/segment/primary -p'
2.3.2 创建初始化文件
从安装目录拷贝配置文件到gpadmin用户家目录的conf文件夹:
cp /opt/greenplum/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config conf/
修改conf/gpinitsystem_config文件参数如下:
[gpadmin@master ~]$ egrep -v '(^$|^#)' conf/gpinitsystem_config
ARRAY_NAME="Greenplum Data Platform"
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/segment/primary)
MASTER_HOSTNAME=master
MASTER_DIRECTORY=/home/gpadmin/gpdata/master
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
2.3.3 参数说明
ARRAY_NAME:设置阵列名称。
SEG_PREFIX:设置segment的前缀,默认gpseg。
PORT_BASE:设置segment的起始端口,会从此端口往上增加,默认从40000开始。
DATA_DIRECTORY:设置segment primary的数据存储目录,根据实例个数填写。
MASTER_HOSTNAME:设置master的主机名。
MASTER_DIRECTORY:设置master的存储目录。
MASTER_PORT:设置master的端口,默认5432。
TRUSTED_SHELL:设置节点之间的信任方式,默认SSH。
CHECK_POINT_SEGMENTS:预写日志文件(WAL)数量,默认为8,这意味着为主机上的每个Segment
或Master实例分配1088MB的WAL空间。
ENCODING=UNICODE:设置初始字符集,默认UNICODE(UTF-8)。
2.3.4创建初始化数据节点列表(如果前面已经创建则忽略)
[gpadmin@master ~]$ cat conf/segment
segment1
segment2
2.3.5运行初始化工具
gpinitsystem -c conf/gpinitsystem_config -h conf/segment -s standby
gpinitsystem命令参数解释:
-c:指定初始化文件。
-h:指定segment主机文件。
-s:指定standby主机,创建standby节点。
中间需要输入几次yes,如果不报ERROR,GP数据库就安装好了并且各个节点都启动了。安装过程中一定要注意相关执行的方式和权限,不然可能会失败。
如果gpinitsystem实用程序失败,如果系统处于部分安装状态,它将创建以下备用脚本:
〜/ gpAdminLogs / backout_gpinitsystem_
您可以使用此脚本清理部分创建的Greenplum数据库系统。此回退脚本将删除任何实用程序创建的数据目录,postgres进程和日志文件。纠正导致gpinitsystem失败并运行退出脚本的错误后,您应该准备重试初始化您的Greenplum数据库数组。
2.3.6分别在每个主机查看postgres运行情况
用netstat命令查看每个主机的postgres进程:netstat -ltnp | grep postgres
基本就能看出来哪个端口是Master(5432)、哪个端口是Standby(5432)、哪些端口是Segment(40000,40001,40002)。
[gpadmin@master ~]$ gpssh -f conf/master -e netstat -ltnp | grep postgres
[ master] tcp 0 0 0.0.0.0:5432 0.0.0.0:*
LISTEN 8294/postgres
[ master] tcp6 0 0 :::5432 :::*
LISTEN 8294/postgres
[ master] tcp6 0 0 :::14182 :::*
LISTEN 8302/postgres: 543
[segment1] tcp 0 0 0.0.0.0:40000 0.0.0.0:*
LISTEN 3611/postgres
[segment1] tcp 0 0 0.0.0.0:41000 0.0.0.0:*
LISTEN 3610/postgres
[segment1] tcp6 0 0 :::40000 :::*
LISTEN 3611/postgres
[segment1] tcp6 0 0 :::41000 :::*
LISTEN 4181/postgres
....................................
2.3.7 设置环境变量
Greenplum数据库管理实用程序还要求设置MASTER_DATA_DIRECTORY环境变量,这应该指向由
gpinitsystem程序在主数据目录位置创建的目录。
查看MASTER_DATA_DIRECTORY:ls /home/gpadmin/gpdata/master
设置环境变量如下,并source .bashrc。
写入并将文件拷贝到standby节点。
[gpadmin@master ~]$ tail -3 .bashrc
source /home/gpadmin/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/master/gpseg-1
export PGPORT=5432
[gpadmin@master ~]$ scp .bashrc standby:/home/gpadmin/
2.4添加镜像
在添加mirrors的过程中,Greenplum数据库应处于静态状态,工作负载和其他查询不应该运行。
2.4.1 在数据节点服务器上创建mirrors数据存储目录
gpssh -f conf/segment -e 'mkdir gpdata/segment/mirror'
如果命令执行报错,请使用cd命令切换当前目录到gpadmin家目录。
2.4.2生成镜像配置文件
gpaddmirrors -o mirror_config_file
期间需要输入镜像数据存放目录/home/gpadmin/gpdata/segment/mirror
2.4.3 查看生成的镜像配置文件
[gpadmin@master ~]$ cat conf/mirror_config_file
filespaceOrder=
mirror0=0:segment1:41000:42000:43000:/home/gpadmin/gpdata/segment/mirror1/gpseg0
mirror1=1:segment2:41001:42001:43001:/home/gpadmin/gpdata/segment/mirror2/gpseg1
2.4.4开始创建镜像
gpaddmirror -i mirror_config_file,期间需要输入yes 确认。
完成如果没有报错,可以输入 gpstate -s 查看整个数据库状态。如果报错,请source .bashrc
后,再执行gpstate -s。
2.5连接使用Greenplum
2.5.1 远程连接配置
修改配置文件添加信任的网络:
vim /home/gpadmin/gpdata/master/gpseg-1/pg_hba.conf
Host all all 192.168.122.0/24
trust
修改数据库侦听端口:
vim /home/gpadmin/gpdata/master/gpseg-1/postgresql.conf
listen_addresses = '*'
2.5.2 连接方式
psql –help
psql [OPTION]... [DBNAME [USERNAME]]
本地连接:psql -d 库名
测试连接:psql -d postgres
其他工具连接:如navicate
3.1 数据节点高可用测试(通过master上的FTS进程实现)
3.1.1 杀死其中一个segment的postgres进程
3.1.2 查看某个数据节点宕机后集群状态
gpstate -s
3.1.3恢复故障节点
gprecoverseg
期间需要输入yes
恢复完成后,输入gpstate -m查看mirror状态,等待data status 全部变成Synchronize。
从状态可以看出,故障恢复后,primary并没有马上恢复主数据节点,等mirror状态全部Synchronize之后,尝试使用gprecoverseg -r恢复数据节点主备。如果恢复失败,则重启数据库服
务 gpstop -r 后恢复正常。
3.2 master高可用实现
3.2.1查看是否部署standby
连接到postgre库:psql -d postgres
使用sql命令查看是否部署
db1=# select string_agg(role||'-'||hostname,'|') from gp_segment_configuration
where content='-1';
string_agg
--------------------
p-master|m-standby
(1 row)
如果显示结果如上,则表示已经部署standby,否则在master上初始化standby : gpinitstandby -s standby(做主备节点的主机名),建议一开始就部署standby。
3.2.2 master模拟故障
杀死master主节点postgres进程:pkill postgres
3.2.3 master故障处理
master节点:删除master节点5432进程锁:rm -f /tmp/.s.PGSQL.5432*
standby节点:
切换到gpadmin用户:su gpadmin;source .bashrc
激活主备功能:gpactivatestandby -d ${MASTER_DATA_DIRECTORY}
测试数据库能否正常连接使用:psql -d postgres
3.2.4 恢复master
原master节点:
删除主节点运行目录:rm -rf /home/gpadmin/gpdata/master/*
原standby节点:
将master节点初始化为主备:gpinitstandby -s master(主机名)
关闭数据库主节点:gpstop -m
原master:
激活主备功能:gpactivatestandby -d $MASTER_DATA_DIRECTORY
查看所有节点是否恢复正常:gpstate -f 或 gpstate -s
原standby主机:
删除主节点运行目录:rm -rf /home/gpadmin/gpdata/master/*
原master主机:
初始化主备节点:gpinitstandby -s standby(主机名)
3.2.5 验证
连接到postgre库:psql -d postgres
使用sql命令查看是否部署standby:
db1=# select string_agg(role||'-'||hostname,'|') from gp_segment_configuration
where content='-1';
string_agg
--------------------
p-master|m-standby
p-master|m-standby
(1 row)
-----------------------------------------------------续-------------------------------
-------------------------------
4.1 gpfdist介绍
greenplum作为OLAP分析型软件,自然避免不了从外部数据库加载大量的数据,然而传统的ETL数据
传输方法(select=>insert)到GP需要经过GP的单点master,效率非常低。
下面介绍外部表用gpfdist快速导入数据:
普通外部表和可写外部表区别:
1、普通外部表只能select,可写外部表只能insert
2、可写外部表没有错误表
3、可写外部表可以指定分布键,如果不指定,默认随机分布;普通外部表只能随机分布
gpfdist优势:
1、直接由segment并发加载
2、直接加载数据文件,并可读写(和选择的外部表类型有关)
3、默认数据随机分配,每个节点负载均衡(和选择的外部表类型有关)
4.2 使用gpfdist和只读外部表
4.2.1 启动gpfdist:
[gpadmin@master ~]$ nohup gpfdist -p 8080 -d ./ &
[2] 12220
[gpadmin@master ~]$ jobs
[2]+ 运行中 nohup gpfdist -p 8080 -d ./ &
4.2.2 创建普通外部表
[gpadmin@master ~]$ psql -d db1
psql (8.3.23)
Type "help" for help.
db1=# create external table t2(id int,name
char(5))location('gpfdist://master:8080/gpfdist/t2')format 'csv'(delimiter '
');
CREATE EXTERNAL TABLE
注意:其中master:8080代表nohup gpfdist命令-d 指定的目录。
4.2.3 在对应的目录创建写入文件
[gpadmin@master gpfdist]$ pwd
/home/gpadmin/gpfdist
[gpadmin@master gpfdist]$ vim t2
[gpadmin@master gpfdist]$ cat t2
1 jack
2 tom
4.2.4 在数据库中查看刚才创建的外部表
db1=# select * from t2;
id | name
----+-------
1 | jack
2 | tom
(2 rows)
系统性能测试方法
验证系统配置:gpcheck -f conf/all_host
验证网络性能:gpcheckperf -f conf/all_host -r N -d /tmp
并行测试: -r N
串行测试: -r n
矩阵测试: -r M
验证磁盘I/O性能:gpcheckperf -f conf/all_host -r ds -d /tmp
验证内存性能:gpcheckperf -f conf/all_host -r s -d /tmp