本节书摘来自华章出版社《Greenplum企业应用实战》一书中的第2章,第2.1节,作者 何勇 陈晓峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看
第2章 Greenplum快速入门
本章将介绍如何快速安装部署Greenplum,以及Greenplum的一些常用命令及工具。“工欲善其事,必先利其器”,因此我们先从如何安装Greenplum开始介绍,然后介绍一些简单的工具,以及Greenplum的语法及特性。
为了让读者更加快速地入门,避免涉及太多底层的东西。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在“第8章Greenplum线上环境部署”中介绍。
2.1 软件安装及数据库初始化
下面先介绍如何搭建一个完整的Greenplum环境。在搭建环境之前,我们必须对Greenplum的架构有一定的了解,并且准备好安装部署的机器,机器硬件、操作系统的安装配置读者可自行完成。
2.1.1 Greenplum架构
在安装数据库的时候,我们先要对Greenplum架构有一定的了解,这样可以对数据库的安装和使用起到一个指导性的作用。同时在搭建Greenplum环境的过程中,可以加深对Grenplum架构的理解。Greenplum总体架构图如图2-1所示。
下面介绍每个部件的主要功能,如表2-1所示。
通过图2-2可以看出Master与Segment的关系。
Master和Segment其实都是一个单独的PostgreSQL数据库。每一个都有自己单独的一套元数据字典,在这里,Master节点一般也叫主节点,Segment也叫做数据节点。
Segment节点与Master节点的通信,通过千兆(或万兆)网卡组成的内部连接(InterConnect),在同一台数据节点机器上可以放多个Segment,不同的Segment节点会被赋予不同的端口,同时,Segment之间也不断地进行着交互。为了实现高可用,每个Segment都有对应的备节点(Mirror Segment),分别存在于不同的机器上。
Client一般只能与Master节点进行交互,Client将SQL发给Master,然后Master对SQL进行分析后,再将其分配给所有的Segment进行操作,并且将汇总结果返回给客户端。
2.1.2 环境搭建
- Greenplum集群介绍
在这里的Greenplum集群中,有4台机器,IP分别是:
10.20.151.7;
10.20.151.8;
10.20.151.9;
10.20.151.10。
机器对应的Master和Segment如下分配:10.20.151.7作为Master节点,10.20.151.8~10作为Segment节点,每个机器上配置两个Primary Segment和两个Mirror Segment;同时10.20.151.10作为Master Standy节点。
通过图2-3的架构图可以清晰地知道我们所搭建的集群的概况。
- 安装Linux
Greenplum没有Windows版本,只能安装在类UNIX的操作系统上,例如:
SUSE Linux SLES 10.2 or higher;
CentOS 5.0 or higher;
RedHat Enterprise Linux 5.0 or higher;
Solaris x86 v10 update 7。
如果读者没有现成的Linux机器,可以在虚拟机(如VMWare)上安装,用户可自行安装VMWare及对应的Linux操作系统,网上相应的资料很多,这里就不再阐述。
- 数据库存储
对于数据库来说,在性能上磁盘IO很容易成为瓶颈,由于数据库的特性,每一个SQL基本都是对全表数据进行分析,每次处理的数据量非常大,数据基本上都是没有缓存的(数据字典除外),极度消耗IO资源(全表扫描主要都是顺序IO),所以Greenplum对存储的要求比较高。在文件系统的选择上,在Linux下建议使用XFS,在Solaris下建议使用ZFS,对于Raid根据需求选择硬Raid或软Raid,如果需要更大的空间,建议使用Raid 5,如果对性能有更高的要求,可以选择Raid 1+0。相关内容请参考第8章关于Greenplum线上环境部署的介绍。
如果只是想试用Greenplum,数据量比较小,那么怎么存储无所谓,可以用任意的目录作为数据库数据目录。
- 网络(hosts)
在确定机器配置的时候,要保证所有机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的问题。
在配置/etc/hosts时,习惯将Master机器叫做mdw,将Segment机器叫做sdw,配置好后,使用ping命令确定所有hostname都是通的。
#cat /etc/hosts
#BEGIN_GROUP_CUSTOMER
127.0.0.1 localhost localhost.localdomain
10.20.151.7 dw-greenplum-1 mdw
10.20.151.8 dw-greenplum-2 sdw1
10.20.151.9 dw-greenplum-3 sdw2
10.20.151.10 dw-greenplum-4 sdw3
#END_GROUP_CUSTOMER
- 创建用户及用户组
创建gpadmin用户及用户组,将其作为安装Greenplum的操作系统用户。
将原有用户删除:
#groupdel gpadmin
#userdel gpadmin
创建新的用户和用户组:
#groupadd -g 530 gpadmin
#useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
对文件夹进行赋权,为新用户创建密码:
#chown -R gpadmin:gpadmin /home/gpadmin/
#passwd gpadmin
Changing password for user gpadmin.
New UNIX password:
Retype new UNIX password:
2.1.3 Greenplum安装
- 安装数据库软件
读者可以在Greenplum官网上下载最新版本的Greenplum,下载地址是:https://network.gopivotal.com/products/pivotal-gpdb,如图2-4所示。
选择相应的操作系统版本,比如RedHat操作系统选择“RHEL”,下载时需要在网站上注册一个账号,如图2-5所示。
读者可以选择自己需要的版本下载,这里以正式版本Greenplum 4.1.1.1为例,介绍如何安装Greenplum。
Greenplum最新版本是Greenplum 4.3,但是安装方式都是一样的。
首先准备好安装文件:
greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.zip
执行unzip命令解压安装文件:
unzip greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.zip
解压后生成两个文件:
README_INSTALL;
greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.bin。
为Greenplum软件创建安装目录,并且赋给gpadmin用户权限:
mkdir /opt/greenplum
chown -R gpadmin:gpadmin /opt/greenplum
执行以下命令开始安装软件:
./greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.bin
屏幕上会出现License的一些信息,按“空格”键使信息显示完全,如图2-6所示。
确认License之后,接着出现如图2-7所示的信息。
输入“yes”后会提示安装目录,我们选择安装在/opt/greenplum/greenplum-db-4.1.1.1下面,如图2-8所示。
完成以上步骤后,软件开始自动安装。最后显示软件安装成功,安装目录如图2-9b所示。
Greenplum的环境变量已经在greenplum_path.sh中设置了,这里需要应用一下这个环境变量配置:
source /opt/greenplum/greenplum-db/greenplum_path.sh
- 配置hostlist
配置hostlist文件,将所有的服务器名记录在里面。
[gpadmin@dw-greenplum-1 conf]$ cat hostlist
mdw
sdw1
sdw2
sdw3
seg_hosts只保存segment节点的hostname。
[gpadmin@dw-greenplum-1 conf]$ cat seg_hosts
sdw1
sdw2
sdw3
- 使用gpssh-exkeys打通所有服务器
使用gpssh-exkeys将所有机器的通道打开,这样就不用输入密码使登录在每台机器之间跳转了,代码如下:
[gpadmin@dw-greenplum-1 conf]$ gpssh-exkeys -f hostlist
[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
... send to sdw1
***
*** Enter password for sdw1:
... send to sdw2
... send to sdw3
[STEP 4 of 5] determine common authentication file content
[STEP 5 of 5] copy authentication files to all remote hosts
... finished key exchange with sdw1
... finished key exchange with sdw2
... finished key exchange with sdw3
[INFO] completed successfully
在打通所有机器通道之后,我们就可以使用gpssh命令对所有机器进行批量操作了。
[gpadmin@dw-greenplum-1 conf]$ gpssh -f hostlist
=> pwd
[sdw3] /home/gpadmin
[ mdw] /home/gpadmin
[sdw1] /home/gpadmin
[sdw2] /home/gpadmin
- 将软件分发到每一台机器上
接下来将安装后的文件打包:
tar -cf gp4.1.tar greenplum-db-4.1.1.1/
然后利用gpscp命令将这个文件复制到每一台机器上:
gpscp -f /home/gpadmin/conf/hostlist gp4.1.tar =:/opt/greenplum
使用gpssh命令批量解压文件包:
=> cd /opt/greenplum
[sdw3]
[ mdw]
[sdw1]
[sdw2]
=> tar -xf gp4.1.tar
[sdw3]
[ mdw]
[sdw1]
[sdw2]
建立软连接,如图2-10所示。
下面创建数据库数据目录。
MASTER目录:
=> mkdir -p /home/gpadmin/gpdata/gpmaster
Primary节点目录:
=> mkdir -p /home/gpadmin/gpdata/gpdatap1
=> mkdir -p /home/gpadmin/gpdata/gpdatap2
Mirror节点目录:
=> mkdir -p /home/gpadmin/gpdata/gpdatam1
=> mkdir -p /home/gpadmin/gpdata/gpdatam2
Gpmaster目录保存Master的数据,每个机器上的gpdatap1、gpdatap2分别对应这个机器上的两个主数据节点目录,同样的,gpdatam1、gpdatam2对应备数据节点目录。
- 配置~/.bash_profile
要对系统的环境变量进行配置,需要修改~/.bash_profile,添加以下内容:
source /opt/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=2345
export PGDATABASE=testDB
其中greenplum_path.sh保存了运行Greenplum的一些环境变量设置,包括GPHOME、PYTHONHOME等设置。
- 初始化Greenplum的配置文件
配置文件的模板可以在$GPHOME/docs/cli_help/gpconfigs/目录下找到。gpinitsystem_config文件是初始化Greenplum的模板,在这个模板中,Mirror Segment的配置都被注释掉了,模板中基本初始化数据库的参数都是有的。
下面是初始化的配置文件initgp_config。
#数据库的代号
ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
#Segment的名称前缀
SEG_PREFIX=gpseg
#Primary Segment起始的端口号
PORT_BASE=33000
#指定Primary Segment的数据目录
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
#Master所在机器的Hostname
MASTER_HOSTNAME=mdw
#指定Master的数据目录
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
#Master的端口
MASTER_PORT=2345
#指定Bash的版本
TRUSTED_SHELL=/usr/bin/ssh
#字符集ENCODING=UNICODE
#Mirror Segment起始的端口号
MIRROR_PORT_BASE=43000
#Primary Segment主备同步的起始端口号
REPLICATION_PORT_BASE=34000
#Mirror Segment主备同步的起始端口号
MIRROR_REPLICATION_PORT_BASE=44000
#Mirror Segment的数据目录
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)
- 初始化数据库
使用gpinitsystem脚本来初始化数据库,命令如下:
gpinitsystem -c initgp_config -s sdw3
根据脚本出现的提示操作即可,如图2-11所示。
这样,数据库就初始化成功了,尝试登录Greenplum默认的数据库postgres:
[gpadmin@dw-greenplum-1 ~]$ psql -d postgres
psql (8.2.15)
Type "help" for help.
postgres=#
2.1.4 创建数据库
现在我们开始创建测试数据库:
createdb testDB -E utf-8
没有设置PGDATABASE这个环境变量时,使用psql进行登录,默认的数据库是与操作系统用户名一致的,这时候会报错:
[gpadmin@dw-greenplum-1 ~]$ psql
psql: FATAL: database "gpadmin" does not exist
然后设置(export)环境变量PGDATABASE=testDB,这样就默认登录testDB数据库:
[gpadmin@dw-greenplum-1 ~]$ export PGDATABASE=testDB
[gpadmin@dw-greenplum-1 ~]$ psql
psql (8.2.15)
Type "help" for help.
testDB=#
查询数据库版本并创建一张简单的表:
testDB=# select version();
version
----------------------------------------------------------
PostgreSQL 8.2.15 (Greenplum Database 4.1.1.1 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on May 12 2011 18:07:08
(1 row)
testDB=# create table test01(id int primary key,name varchar(128));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test01_pkey" for table "test01"
CREATE TABLE
2.1.5 数据库启动与关闭
- 启动数据库
Greenplum提供一系列的脚本来管理数据库,其中gpstart就是启动数据库的脚本,我们可以用gpstart –help来查看帮助,例如:
[gpadmin@inc-dw-hadoop-151-7 ~]$ gpstart --help
COMMAND NAME: gpstart
Starts a Greenplum Database system.
*****************************************************
SYNOPSIS
*****************************************************
gpstart [-d <master_data_directory>] [-B <parallel_processes>]
[-R] [-m] [-y] [-a] [-t <timeout_seconds>]
[-l logfile_directory] [-v | -q]
gpstart -? | -h | --help
gpstart --version
一般用gpstart -a直接启动数据库,不用输入“yes”,如图2-12所示。
- 关闭数据库
关闭数据库的脚本是gpstop,其使用方法如下:
COMMAND NAME: gpstop
Stops or restarts a Greenplum Database system.
*****************************************************
SYNOPSIS
*****************************************************
gpstop [-d <master_data_directory>] [-B <parallel_processes>]
[-M smart | fast | immediate] [-t <timeout_seconds>]
[-r] [-y] [-a] [-l <logfile_directory>] [-v | -q]
gpstop -m [-d <master_data_directory>] [-y] [-l <logfile_directory>]
[-v | -q]
gpstop -u [-d <master_data_directory>] [-l <logfile_directory>]
[-v | -q]
gpstop --version
gpstop -? | -h | --help
与gpstart一样,在关闭数据库时,一般使用gpstop -a,这样就不用输入“yes”了,如图2-13所示。