GreenPlum使用手册

GreenPlum使用手册
GreenPlum使用手册

GreenPlum数据库集群

安装说明及使用手册

开心十二月总结

****年**月**日

目录

1体系结构介绍 (4)

2安装 (10)

2.1安装 (10)

2.1.1安装准备 (10)

2.1.2安装gp-db (11)

2.1.3配置通讯 (13)

2.1.4建立数据存储池 (17)

2.1.5同步系统时间 (17)

2.1.6验证安装是否成功 (17)

2.1.7初始化 (17)

2.1.8数据库的启停 (18)

2.2Master双机热备 (19)

2.3Segment节点互备 (20)

3GP数据库的使用 (22)

3.1pgAdminIII工具 (22)

3.1.1安装和第一次使用pgAdminIII (22)

3.1.2主窗体 (23)

3.1.3导航菜单 (23)

3.1.4工具栏介绍 (24)

3.1.5数据库与表的创建 (25)

3.1.6使用pgAdminIII备份数据库 (25)

3.2JDBC配置 (26)

3.3GP数据库两个重要概念 (27)

3.3.1什么是Schema (27)

3.3.2数据分布存储 (28)

3.4GP的SQL语法 (28)

3.4.1数据加载 (28)

3.4.2SQL并行查询 (32)

3.4.3聚合函数 (32)

3.4.4索引 (32)

3.4.5分区 (34)

3.4.6函数 (35)

4维护数据库 (39)

4.1数据库启动gpstart (39)

4.2数据库停止gpstop (41)

4.3查看实例配置和状态 (41)

4.4查看数据库运行状态gpstate (42)

4.5查看用户会话和提交的查询等信息 (43)

4.6查看数据库、表占用空间 (43)

4.7查看数据分布情况 (44)

4.8实例恢复gprecoverseg (44)

4.9查看锁信息 (44)

4.10数据库的备份与恢复 (44)

5调优、排错 (44)

6附件 (44)

6.1DBA常用命令 (44)

7Q&A (45)

7.1不支持触发器 (45)

7.2更新操作中的若干问题 (45)

1体系结构介绍

Greenplum数据库产品——下一代数据仓库引擎和分析方法

Greenplum公司是企业数据云计算解决方案的创始人,为客户提供灵活的数据商业智能和分析方法。能够以极低的成本代价,提供业界领先的计算性能。客户遍及美国知名企业:Nasdaq、NYSE、Ebay、Fox Interactive Media……等。

Greenplum公司的Greenplum数据库产品是用于建造下一代数据仓库和巨大规模分析系统的软件解决方案。支持SQL和MapReduce并行处理,更适合管理TB级~PB级的海量数据,并以极低的成本代价提供了业界领先的计算性能。使用独有的sharing-nothing MPP架构,服务器的集群工作起来,就像是一个独立的超级计算机!优化了BI和分析方法,自动化分区数据和并行查询,比传统数据库执行速度提高10倍~100倍!

Greenplum数据库的特色:

大规模地并行分析处理能力

Greenplum数据库可以跨越100~1000颗CPU,实现统一的并行操作引擎,让处理过程尽可能地靠近数据。Greenplum是业界最快的和最普及的高端数据仓库解决方案!用传统方式需花费数天才能完成的复杂查询,现在使用Greenplum只需要几分钟完成!

核心的MPP架构

Greenplum数据库提供数据和查询的自动化并行:数据被自动分区跨越集群中的所有节点;查询以高度协作的方式,在集群的所有节点上执行。

高速PB级数据装载

利用独有的MPP Scatter/Gather Streaming技术,实现高速的数据装载。每增加1个节点,每小时装载吞吐量提高4TB!

数据库内部压缩

利用业界领先的压缩技术提高性能和降低存储空间。在有效较少1/3~1/10空间的同时,相应地提高了I/O性能。

多级容错能力

Greenplum数据库利用多级冗余技术,在硬件或软件故障时,保障操作可以继续执行。 在线系统扩展

为提高存储容量、处理性能,增加新的服务器到集群中,扩展的操作在后台完成,数据库可以继续保持正常工作状态不受影响。处理性能和存储容量,随服务器的个数增加成正比显著提高!

自有的MapReduce技术

MapReduce是Google和Yahoo的大规模数据分析方法。Greenplum使用独有的并行引擎执行MapReduce。

Greenplum数据库架构原理解密:

Greenplum数据库通过分布负载到多个服务器主机,实现操作存储和处理大规模的数据。数据库实际上由1个Master服务器和若干个独立的Segment服务器组成,一起协调工作,每个服务器都是独立的PostgreSQL数据库。

如图1所示,Master服务器是数据库的入口,验证客户端,处理输入的SQL,分布工作到若干Segment服务器,统一协调各个Segment返回的结果,汇总最终结果返回客户端。Master不存储任何用户数据,只有全局系统视图。

图1:Greenplum数据库架构

如图2所示,Segment服务器是真正数据存储的地方,并承担主要的查询工作。用户数据(表、索引)被分布存储到有效的若干Segment,通过Hash算法,每个Segment

存放数据的不同部分。

图2:Segment服务器真正存储数据

图3展示了一套完整的Greenplum数据仓库实施架构示例。独立的Master服务器,通过千兆网络连接在一起的若干Segment服务器,每个Segment服务器挂载独立的RAID 存储。服务器基于X86-64位硬件平台,安装Linux操作系统,获得极高的性价比。

图3:Greenplum数据库完整实施架构示例

图4记录了一次完整的MPP并行查询过程。Master作为查询调度器,为客户端提供连接工作;Segment独立管理数据片和数据操作。调度过程如下:

1.Master验证客户端用户。

2.Master连接到所有远程Segment实例。

3.Master解析SQL语句。

4.Master建立1个优化的并行查询计划。

5.Master分布查询计划到所有的Segment实例。

6.Master协调查询计划在所有Segment上并行执行。

7.Master收集所有Segment的查询结果并返回到客户端。

图4:一次查询调度过程

Greenplum 独有的Sharing -Nothing 架构:

数据仓库在执行全表扫描查询时,通常速度被存储的带宽限制,即瓶颈大多集中在I/O 。Greenplum 的Sharing-Nothing 架构物理分离数据,存储到若干Segment 服务器,每个Segment 使用多个、专用的、独立的、高速的通道独立连接到磁盘,并把管理数据库资源:buffer 、lock 、block 的职责委派到各个Segment ,不使用Master 统一管理资源!从图5中可以看出与Sharing-Everything 架构(如Oracle RAC )对比,存在2个明显区别:

图5:sharing-everying 对比sharing-nothing 数据库架构

1) 数据库物理存储方式不同:

在RAC 环境下,数据库集中存储,集群中的所有节点共享I/O 通道访问数据,随着TB 级别海量数据的增加,I/O 瓶颈可想而知。

Segment1 Segmentn

Segment2

2)集群节点间内部通信管理方式不同:

如图6,RAC使用GRD(Global Resource Directory)统一管理数据库资源,管理内部节点间通信。用户对每个block的访问,都要经过GRD的协调调度,极其繁琐且需要额外的进程通信负担;随着节点个数的增加,GRD会增加管理的复杂度,可能会导致产生性能问题!

图6:Oracle RAC的GRD架构

2安装

2.1安装

2.1.1安装准备

CentOS-6.3-x86_64-bin-DVD1.iso

VMware Workstation

greenplum-db-4.2.1.0-build-3-CommunityEdition-RHEL5-x86_64.zip 2.1.1.1os的配置

以root用户操作

2.1.1.2检查系统条件

检查系统名称,版本,内核.

# uname -a

检查磁盘空间

# df -h

2.1.1.3设置主机名

#vi /etc/sysconfig/network

HOSTNAME=*single* (*变量*,以后出现*string*,均指变量)

2.1.1.4设置集群各个机器ip与主机的对应表

#vi /etc/hosts

127.0.0.1 single localhost

配臵运行参数:

#vi /etc/sysctl.conf添加修改:

kernel.sem = 250 64000 100 512

kernel.shmmax = 500000000(最大共享内存)

kernel.shmmni = 4096

kernel.shmall = 4000000000(共享内存总量)

kernel.sem = 250 64000 100 512

kernel.sysrq = 1

kernel.core_uses_pid = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

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

https://www.360docs.net/doc/3d4791433.html,dev_max_backlog=10000

vm.overcommit_memory=2

#vi /etc/security/limits.conf

添加修改

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

2.1.1.5关闭iptables

[root@localhost ~]# service iptables stop

iptables:清除防火墙规则:[确定] iptables:将链设臵为政策ACCEPT:filter [确定] iptables:正在卸载模块:[确定] [root@localhost ~]# chkconfig iptables off

[root@localhost ~]# service ip6tables stop

ip6tables:清除防火墙规则:[确定] ip6tables:将chains 设臵为ACCEPT 策略:filter [确定] :正在卸载模块:[确定] [root@localhost ~]# chkconfig ip6tables off

2.1.2安装gp-db

创建gpadmin用户

# useradd gpadmin

# passwd gpadmin

# New password: gpadmin

# Retype new password: gpadmin

2.1.2.1解压zip包

例如:把安装包copy到/home/gpadmin目录下

#su gpadmin

#cd /home/gpadmin

#unzip greenplum-db-4.2.1.0-build-3-CommunityEdition-RHEL5-x86_64.zip

2.1.2.2执行安装文件

./greenplum-db-4.2.1.0-build-3-RHEL5-x86_64.bin

安装过程比较容易,但是注意要修改一下安装路径为/home/gpadmin/greenplum-db-4.2.1.0

下图打印了安装时的情况:

出现如下提示:

********************************************************************************

Do you accept the Greenplum Database license agreement? [yes|no]

********************************************************************************

yes

********************************************************************************

Provide the installation path for Greenplum Database or press ENTER to

accept the default installation path: /home/gpadmingreenplum-db-4.2.1.0

********************************************************************************

/home/gpadmin/greenplum-db-4.2.1.0

********************************************************************************

Install Greenplum Database into ? [yes|no]

********************************************************************************

yes

********************************************************************************

/home/gpadmin/greenplum-db-4.2.1.0 does not exist.

Create /home/gpadmin/greenplum-db-4.2.1.0 ? [yes|no]

(Selecting no will exit the installer)

********************************************************************************

yes

******************************************************************************** [Optional] Provide the path to a previous installation of Greenplum Database,

or press ENTER to skip this step. e.g. /home/gpadmingreenplum-db-4.1.1.3

This installation step will migrate any Greenplum Database extensions from the

provided path to the version currently being installed. This step is optional

and can be run later with:

gppkg --migrate /home/gpadmin/greenplum-db-4.2.1.0 ******************************************************************************** Extracting product to /home/gpadmin/greenplum-db-4.2.1.0

Extracting product to /home/gpadmin/greenplum-db-4.2.1.0

Skipping migration of Greenplum Database extensions...

******************************************************************************** Installation complete.

Greenplum Database is installed in /home/gpadmin/greenplum-db-4.2.1.0 Greenplum Database documentation is available for download

at https://www.360docs.net/doc/3d4791433.html,.

********************************************************************************

安装成功!

2.1.3配置通讯

登录master机器source一下greenplum_path.sh文件

# source /home/gpadmin/greenplum-db/greenplum_path.sh

2.1.

3.1编辑一个主机列表

列表为主机名.

#cd /home/gpadmin

#vi all_hosts_file

*host1*

*host2*

*host3*

2.1.

3.2打通root的ssh通道

执行gpssh-keys命令.

#su – root

# gpssh-exkeys -f all_hosts_file

gpssh-exkeys 将要求对每台机器鉴权.

提示:后输入用户名密码

***Enter password for root@hostname: root password

提示:[STEP 1 of 5] create local ID and authorize on local host

[STEP 2 of 5] keyscan all hosts and update known_hosts file

[STEP 3 of 5] authorize current user on remote hosts

[STEP 4 of 5] determine common authentication file content

[STEP 5 of 5] copy authentication files to all remote hosts

[INFO] completed successfully

2.1.

3.3为每台机器创建gpadmin用户

# su – root(以root用户登录各节点机器来创建用户)

# gpssh -f all_hosts_file '/usr/sbin/useradd gpadmin -d /home/gpadmin -s /bin/bash'

2.1.

3.4为每台机器添加gpadmin的密码

# gpssh -f all_hosts_file 'echo password | passwd gpadmin --stdin'

2.1.

3.5修改目录拥有者

# chown -R gpadmin:gpadmin /home/gpadmin/*

2.1.

3.6打通gpadmin的ssh通道

执行gpssh-keys命令.

#su gpadmin

#source /home/gpadmin/greenplum-db/greenplum_path.sh # gpssh-exkeys -f all_hosts_file

gpssh-exkeys 将要求对每台机器鉴权.

提示:后输入用户名密码

***Enter password for root@hostname: root password

提示:[STEP 1 of 5] create local ID and authorize on local host [STEP 2 of 5] keyscan all hosts and update known_hosts file [STEP 3 of 5] authorize current user on remote hosts

[STEP 4 of 5] determine common authentication file content [STEP 5 of 5] copy authentication files to all remote hosts [INFO] completed successfully

2.1.

3.7把master的gp-db服务copy到各个slave机器上.

在master上把gp-db打包.

# cd /home/gpadmin

#source /home/gpadmin/greenplum-db/greenplum_path.sh # gtar -cvf /home/gpadmin/gp.tar greenplum-db-4.0.x.x

2.1.

3.8做主机列表

(不能有空行和空格!!!)

#vi seg_hosts_file

*sdw1-1*

*sdw2-1*

*sdw3-1*

2.1.

3.9copy到各个seg机器上

# gpscp -f seg_hosts_file /home/gpadmin/gp.tar =:/home/gpadmin

2.1.

3.10登录到各个slave机器

# gpssh -f seg_hosts_file

2.1.

3.11解压tar包

=> gtar --directory /home/gpadmin -xvf /home/gpadmin/gp.tar

2.1.

3.12查看服务

=> ls /home/gpadmin/greenplum-db-4.0.x.x

2.1.

3.13建立链接

=> ln -s /home/gpadmin/greenplum-db-4.2.1.0/home/gpadmin/greenplum-db 2.1.3.14更改用户组

=> chown -R gpadmin:gpadmin /home/gpadmin/greenplum-db

2.1.

3.15删除tar包

=> rm /home/gpadmingp.tar

2.1.

3.16退出远程登录

Exit gpssh

=>exit

2.1.

3.17激活

#source /home/gpadmin/greenplum-db/greenplum_path.sh #source ~/.bashrc

2.1.4建立数据存储池

2.1.4.1建立master的数据结构存储地

#su gpadmin

# cd /home/gpadmin

# mkdir gpmaster

2.1.4.2建立业务数据存储地

登录到每台节点机上创建目录,gpadmin有操作权限

su - gpadmin

# cd /home/gpadmin

$ mkdir gpdata1

# chown –R gpadmin:gpadmin gpdata1

2.1.5同步系统时间

同步系统时间:

$ gpssh -f seg_hosts_file -v date

同步NTP时间:

$ gpssh -f seg_hosts_file -v ntpd

2.1.6验证安装是否成功

# gpcheck -f all_hosts_file

2.1.7初始化

设臵变量:

#su gpadmin

#vi .bash_profile

GPHOME=/home/gpadmin

export GPHOME

MASTER_DATA_DIRECTORY=/home/gpadmin/gpmaster/gpseg-1

export MASTER_DATA_DIRECTORY

# source ~/.bashrc

# source .bash_profile

建立初始化文件:

#vi gp_init_config

ARRAY_NAME="Greenplum"

MACHINE_LIST_FILE=/home/gpadmin/seg_hosts_file

SEG_PREFIX=gpseg

PORT_BASE=50000

declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata1)

MASTER_HOSTNAME=master

MASTER_DIRECTORY=/home/gpadmin/gpmaster

MASTER_PORT=5432

TRUSTED_SHELL=ssh

CHECK_POINT_SEGMENTS=8

ENCODING=UTF8

DATABASE_NAME=test

执行初始化:

# source /home/gpadmin/greenplum-db/greenplum_path.sh

# gpinitsystem -c /home/gpadmin/gp_init_config

修改master机器上的路径下/home/gpadmin/gpmaster/gpseg-1的文件pg_hba.conf,在文件里面添加内容:host all gpadmin 0.0.0.0/0 trust

这部分添加的内容要在文件中和这个文件内容类似的地方添加

修改master机器上的路径下/home/gpadmin/gpmaster/gpseg-1的文件postgresql.conf,将内容#listen_addresses = '*' 的# 符号去掉,即为将监听打开

2.1.8数据库的启停

1)启动数据库服务

在master节点上,请以gpadmin用户登入OS,执行命令gpstart,系统会自检,并提示是否启动服务,选择y,启动服务。

如果使用gpstart -a 则系统无任何提示,进行启动。

如果不希望屏幕输出则使用gpstart -q

具体的选项帮助说明,可以通过gpstart -h或者gpstart --help获得。

在启动服务后,通过ps -ef|grep postgre*可以看到相关的服务进程。

2)查看数据库状态

在master节点上,使用gpstate命令。

gpstate -s 查看细节。

3)关闭数据库服务

在master节点上,请以gpadmin身份,登入os, 执行命令gpstop。

如果有连接没有断开,想强行关闭服务使用gpstop -M fast (注意选项的大小写)

如果要重启系统,可以使用gpstop -u

注:数据库的启停和查看数据库状态的操作都是在master上进行的,不需要动segment节点。

2.2Master双机热备

master镜像是通过把primary master对应的standby master放臵到不同的物理主机实现的。正常情况下只有primary master接受用户连接请求,standby master通过gpsyncagent进程(运行在standby master上)利用事务日志保持与primary master 的同步。由于master上不存放任何用户数据,存放在其中的表不会频繁更新,因此同步是实时的。standby master所在主机除了复制进程外,没有正式master服务运行。当primary 出现故障,standby master日志复制进程停止,DBA可以激活standby master,使它切换成primary master,保证原primary master故障时最后提交的事务可以正常提交,并且使用相同的端口接入用户新的连接请求.

启用standby master的流程非常简单,既可以在初始化时启用standby master(gpinitsystem),也可以对存在的系统添加standby master(gpinitstandby)。无论哪种方式,首先要准备standby的主机,包括操作系统,用户等效性的建立,以及GP软件的安装。

如果初始化时,添加standby master,仅需要在gpinitsystem命令上使用-s参数指定standby用的主机名即可。也可以使用gpinitstandby工具去添加standby master。DBA需要从处于工作状态的primary master节点上调用这个工具,使用-s参数,后面跟上standby的主机名。比如gpinitstandby -s v-centos62-64-66

如果遇到primary standby出现故障,由于到目前为止,EMC还没有提供自己的cluster,因此,如果不使用第三方的cluster的情况下,DBA需要手工激活standby master进行master failover,这个过程通过调用gpactivatestandby命令实现

$ gpactivatestandby -d /gpdata

/gpdata应该是standby master的数据目录。一旦完成激活,standby master的身份转化成primary master。如果在激活的时候,想配臵一个新的standby master可以通过-c选项实现。

$ gpactivatestandby -d /gpdata -c new_standby_hostname 在该工具调用完成之后,可以用gpstate检查状态$ gpstate -f,新的primary segment应该是active的状态,如果有新加standby master,standby master状态是passive。

Master instance = Active

Master instance standby = Passive

在完成,新primary master激活之后,应该在其上运行analyze命令。比如

$ psql dbname -c 'ANALYZE;'

如果没有在激活时,添加新的standby master,事后也可以通过gpinitstandby的调用添加新的standby master.

在系统工作的过程中,standby master节点也可能出现数据同步故障,比如网络问题,导致gpsyncagent出现同步故障,用户可能无法及时感知。所以DBA应该定期检查gp_master_mirroring中的信息,如果发现standby master是不同步的,应该进一步检查detail_state和error_message列中的信息,判断问题产生的原因,并进行解决。完成问题的纠正后,通过调用gpinitstandby可以重新同步standby master。

$ gpinitstandby -s standby_master_hostname -n

2.3Segment节点互备

segment级别的镜像是通过把primary segment对应的mirror segment放臵到不同的物理主机实现的。正常情况下,只有primary segment的instance处于工作状态,所有primary segment上的变化通过文件块的复制技术拷贝到mirror segment。因此,存放mirror segment的主机上只有复制用的进程,而不存在mirror segment instance。一旦primary segment出现故障,mirror segment的复制进程停止,并启动instance,保证数据库的操作继续。

segment的故障检测是通过后台进程ftsprobe实现的,并可以进行自动容错,不需要DBA 进行干预。ftsprobe的检测间隔是通过global服务参数gp_fts_probe_interval进行定义的,默认值是1分钟,通常这个参数的设臵应该与参数gp_segment_connect_timeout 保持一致。一旦ftsprobe进程发现primary segment出现故障,它会在数据字典中标记该segment已经停止。只有管理员对其进行恢复后,才会改变状态。

如果系统没有进行segment级别的镜像,当出现segment故障后,整个系统都将脱机,直到恢复故障segment后,才可以重新启动。

启用segment镜像,既可以在初始化系统时进行,也可以为存在的系统添加mirror。

如果在初始化系统是要求添加镜像,需要在初始化配臵文件中添加如下参数

MIRROR_PORT_BASE 指定第一个mirror segment的端口号,其它mirror segment 在此基础上加1,它的设臵范围是1到65535,但是设臵时要注意不能与primary segment 冲突。

REPLICATION_PORT_BASE 指定第一个primary segment用于数据复制的端口号,其它primary segment以此为基础,每次加1,计算复制用端口号。它的设臵也不要与primary segment冲突。取值范围1到65535

MIRROR_REPLICATION_PORT_BASE 指定第一个mirror segment用于数据复制的端口号,其它mirror segment以此为基础,每次加1,计算复制用端口号。它的设臵也不要与mirror segment冲突。取值范围1到65535

MIRROR_DATA_DIRECTORY 指定了mirror segment的数据目录,声明的目录数量必须与primary segment的目录数量一致,而且要保证进行初始化操作的os用户对这些目录有读写权限。

然后调用gpinitsystem进行初始化,默认是使阵列中的主机相互存放对方的镜像。如果主机的数量多于segment的数量,可以使用-S选项,指定使用哪些主机作为镜像用。

如果原有系统没有镜像,我们也可以向存在的系统添加镜像。首先要获取添加镜像的构造文件。这个文件可以自己编辑,也可以通过gpaddmirrors自动生成,然后在此基础上根

相关主题
相关文档
最新文档