本节书摘来自华章出版社《Greenplum企业应用实战》一书中的第2章,第2.1节,作者 何勇 陈晓峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看
本章将介绍如何快速安装部署Greenplum,以及Greenplum的一些常用命令及工具。“工欲善其事,必先利其器”,因此我们先从如何安装Greenplum开始介绍,然后介绍一些简单的工具,以及Greenplum的语法及特性。为了让读者更加快速地入门,避免涉及太多底层的东西。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在“第8章Greenplum线上环境部署”中介绍。
下面先介绍如何搭建一个完整的Greenplum环境。在搭建环境之前,我们必须对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进行操作,并且将汇总结果返回给客户端。
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的架构图可以清晰地知道我们所搭建的集群的概况。
安装LinuxGreenplum没有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:选择相应的操作系统版本,比如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 sdw3seg_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/gpmasterPrimary节点目录:
=> mkdir -p /home/gpadmin/gpdata/gpdatap1 => mkdir -p /home/gpadmin/gpdata/gpdatap2Mirror节点目录:
=> mkdir -p /home/gpadmin/gpdata/gpdatam1 => mkdir -p /home/gpadmin/gpdata/gpdatam2Gpmaster目录保存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=#现在我们开始创建测试数据库:
createdb testDB -E utf-8没有设置PGDATABASE这个环境变量时,使用psql进行登录,默认的数据库是与操作系统用户名一致的,这时候会报错: [gpadmin@dw-greenplum-1 ~]$ psqlpsql: 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一般用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所示。
相关资源:Npgsql.vsix (Fixed)