Greenplum源码编译安装(单机及集群模式)完整版

Posted Scoter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greenplum源码编译安装(单机及集群模式)完整版相关的知识,希望对你有一定的参考价值。

公司有个项目需要安装greenplum数据库,让我这个gp小白很是受伤,在网上各种搜,结果找到的都是TMD坑货帖子,但是经过4日苦战,总算是把greenplum的安装弄了个明白,单机及集群模式都部署成功,下面由我给大家分享一下整个部署过程,并小分析一下安装过程中遇到的各种坑。

首先,说一下我的环境,CentOS 7.2.1511,64位操作系统,全新安装,没有更新过

[[email protected] ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core) 
[[email protected] ~]# uname -a
Linux mdw 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

因为是用的Vmware 11,所以只是配了内网地址,用SecureCRT远程,忘了网卡怎么配的,发个我的配置参考一下

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno167
UUID=a8aa032c-5f5c-4a91-b18d-488b1182ea38
DEVICE=eno16777736
ONBOOT=yes
IPADDR=10.0.0.110
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

 

一、下面是重头戏之一:编译安装greenplum

我是在2016年10月3日下载(从github克隆)的源码,编译安装出来的版本是greenplum:4.3.99.00 build dev,postgresql:8.3.23

1、下载(克隆)源码,没有安装git的先安装git,yum一下就好了,源码包存放的位置自己定

yum install -y git
git clone https://github.com/greenplum-db/gpdb

2、因为是编译安装,所以需要大量的依赖包,当然也包括扩展项的依赖包,罗列如下

yum install -y curl-devel bzip2-devel python-devel openssl-devel wget perl-ExtUtils-Embed libxml2-devel openldap-devel pam pam-devel
yum install -y vim-common.x86_64 vim-enhanced.x86_64 gcc-c++ libtool gcc-c++ libaio libaio bison flex net-tools.x86_64

3、如果yum提示没有这个包,建议更新一下yum源,你可以选择阿里的、新浪的或者163的,这里以163为例,记得先yum安装wget先

cd /etc/yum.repos.d
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv centos.repo centos.repo.bak
mv CentOS7-Base-163.repo centos.repo
yum clean all
yum makecache

4、编译安装Greenplum,进入gpdb目录,然后就是编译安装的传统套路了,编译参数有点长。

cd /data/software/gpdb
./configure --prefix=/data/program/gpsql --with-gssapi --with-pgport=5432 --with-libedit-preferred --with-perl --with-python --with-openssl --with-pam 
--with-krb5 --with-ldap --with-libxml --enable-cassert --enable-debug --enable-testutils --enable-debugbreak --enable-depend make make install

5、这是参考了一下网上的编译参数,这个比较全,但是会安装各种扩展,网上有简单的,不过我没试过。如果上面这步中有报错,绝对是少了必要的依赖包,网上搜一下,再yum一下,重新configure就行。如果是完全按我的来的,那么应该没有问题,到此为止greenplum安装完成(PS:我的gp安装位置为:/data/program/gpsql)

 

二、重头戏之二:配置单机模式

我所谓的单机模式是指将Master和segment安装在一台机器上,尝试了网上的各种配置发现并不成功,尤其是将mdw和sdw都解析成127.0.0.1的设置根本行不通。你要想一下greenplum是分布式设计,Master要靠DNS解析来获得segment的ip地址,设置成127.0.0.1当然不行,你可以尝试设置Master为127.0.0.1,而segment为正式的ip地址,或者按我这么做:

1、配置hosts解析

vim /etc/hosts
后面添加以下内容:
10.1.5.10 mdw sdw
注:10.1.5.10是虚拟机的ip地址

2、改变greenplum安装目录的用户和用户组

chown -R gpadmin.gpadmin /data/program/gpsql

3、创建gp数据库的管理账户gpadmin

groupadd gpadmin
useradd -g gpadmin gpadmin
passwd gpadmin
#可以先设置一个简单的,以后再改,比如123456

4、切换到gpadmin账户下,在家目录下建立master和segment的数据存放目录。你也可以自行设定数据存放目录,如果你不是以gpadmin建立的目录,还需要修改目录的用户和用户组,最好是建在家目录下。

su - gpadmin
mkdir -p /home/gpadmin/masterdata
mkdir -p /home/gpadmin/segmentdata
mkdir -p /home/gpadmin/segmentmirror

5、创建包含所有主机的文件all_hosts

vim /home/gpadmin/all_hosts
加入下面两行
mdw
sdw

6、创建包含segment主机名的文件

vim /home/gpadmin/seg_hosts
加入下面一行
sdw

7、这还没完哦,因为mdw是master,而你的master是你的本机,所以要将本机的主机名改成mdw,记得要改3个地方。当然,你不喜欢mdw,也可以自行设定,只是后面要做相应的更改

CentOS 7下的改法
先执行
hostnamectl set-hostname "mdw"
执行后会自动修改/etc/hostname文件,你也可以手动修改/etc/hostname文件
再执行
hostname mdw
最后改
vim /etc/sysconfig/network
mdw
退出,重新登录,o了

8、将MASTER_DATA_DIRECTORY加入Master主机环境中,修改gpadmin用户的.bashrc。官方文档里,这一步是放在后面的,因为这里的MASTER_DATA_DIRECTORY路径是根据你设定的master存储数据的路径变动的,这里我把他提前了。如果你是按我的来的,就没问题。如果是自己设定的,就修改一下这个路径,否则后面启动数据库的时候会提示找不到MASTER_DATA_DIRECTORY路径。

cd /home/gpadmin
vim .bashrc
最后添加如下内容
export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1
source /data/program/gpsql/greenplum_path.sh
PS:greenplum_path的路径也是根据你的gp安装路径来的,如果和我不一样,自己改吧,若果路径不对,gp命令将无法执行,会提示没有这个命令

9、这里因为master和segment是在同一台机器,所以不需要做时间同步,如果不在同一台机器,需要做时间同步

10、将机器中的python库全部复制到gpdb的python库目录下,gp命令都是基于python的,但是他找不到系统的python库(很奇怪啊!),于是我们就手动把这些库拷贝到gp安装目录下的python文件夹里,否则执行gp命令的时候会提示缺这个模块啊,缺那个模块啊之类的

\cp -R -f /usr/lib64/python2.7/site-packages/. /data/program/gpsql/lib/python/
PS:python库下的一些库是带.的(隐藏的),一般执行cp命令是要不成的,just按我给的命令来

11、CentOS 7.2需要执行以下语句,这个错误是初始化时遇到的一个错误提示,具体是什么我忘了,just do it,可能CentOS 6.x不会有

echo "RemoveIPC=no" >> /etc/systemd/logind.conf
systemctl restart  systemd-logind.service

12、编辑gp初始化配置文件,直接编辑一个新文件,不要复制官方目录里的再改了,除非你想知道这些东西都是什么意思

ARRAY_NAME="EMC Greenplum DW"
SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/home/gpadmin/segmentdata)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/home/gpadmin/masterdata
MASTER_PORT=5432
MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=43000
REPLICATION_PORT_BASE=34000
MIRROR_REPLICATION_PORT_BASE=44000
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/segmentmirror)
PS:注意这里面的几个路径,如果你有多个segment,declare就多加几个路径,我这里只设了一个segment节点,所以只有一个路径

13、建立信任关系,主要为了免密码登录的麻烦,若果提示命令不处在,先source一下.bashrc,如果还不对,回到第8步检查一下你配的路径

gpssh-exkeys -f /home/gpadmin/all_hosts
PS:这是一个gp命令,不是系统自带的

14、初始化数据库,我曾经因为这一步执行不成功熬了一夜,各种报错,各种提示

gpinitsystem -c /home/gpadmin/gpinitsystem_config
注意:
这里遇到过最麻烦的提示是Unkown Host,在网上各种搜只告诉你host没有解析到,然后改一下hosts文件就行。但是阿里云的虚拟机你改他,他仍然提示你解析不到seg的host,很可能跟阿里云环境有关
,如果你用的是阿里云虚拟机,建议考虑多几台机器做个集群,不要想着在一台机器上又做master又做segment

15、执行完上面这步,会有各种报错,其他的报错你看看日志里的错误提示就能解决,中途需要你给他个“y",成功后应该在显示的信息里看到两个success的提示,然后用gpstop命令试一试,提示如下信息表示安装成功(中途要给个"y"):

[[email protected] ~]$ gpstop
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Starting gpstop with args: 
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Gathering information and validating the environment...
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Greenplum Version: ‘postgres (Greenplum Database) 4.3.99.00 build dev‘
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Master instance parameters
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master Greenplum instance process active PID   = 28031
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Database                                       = template1
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master port                                    = 5432
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master directory                               = /home/gpadmin/masterdata/gpseg-1
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Shutdown mode                                  = smart
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Timeout                                        = 120
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Shutdown Master standby host                   = Off
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Segment instances that will be shutdown:
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Host   Datadir                              Port    Status
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   sdw    /home/gpadmin/segmentdata/gpseg0     33000   u
20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   sdw    /home/gpadmin/segmentmirror/gpseg0   43000   u

Continue with Greenplum instance shutdown Yy|Nn (default=N):
> y
20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-There are 0 connections to the database
20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing Master instance shutdown with mode=‘smart‘
20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Master host=mdw
20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing Master instance shutdown with mode=smart
20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Master segment instance directory=/home/gpadmin/masterdata/gpseg-1
20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Attempting forceful termination of any leftover master process
20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Terminating processes for segment /home/gpadmin/masterdata/gpseg-1
20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-No standby master host configured
20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing parallel primary segment instance shutdown, please wait...
20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-0.00% of jobs completed
20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-100.00% of jobs completed
20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing parallel mirror segment instance shutdown, please wait...
20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-0.00% of jobs completed
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-100.00% of jobs completed
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-----------------------------------------------------
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-   Segments stopped successfully      = 2
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-   Segments with errors during stop   = 0
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-----------------------------------------------------
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Successfully shutdown 2 of 2 segment instances 
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Database successfully shutdown with no errors reported
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover gpmmon process
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-No leftover gpmmon process found
20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover gpsmon processes
20161002:21:23:11:034307 gpstop:mdw:gpadmin-[INFO]:-No leftover gpsmon processes on some hosts. not attempting forceful termination on these hosts
20161002:21:23:11:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover shared memory

16、执行gpstart命令启动数据库,然后enjoy it!,至此单机模式greenplum安装成功

 

集群模式未完待续

 

以上是关于Greenplum源码编译安装(单机及集群模式)完整版的主要内容,如果未能解决你的问题,请参考以下文章

centos7 编译安装greenplum5.7

Spark笔记整理:spark单机安装部署分布式集群与HA安装部署+spark源码编译

Redis学习之4种模式实践及机制解析(单机主从哨兵集群)

Centos7安装Greenplum5.3单机版教程

dubbox系列——dubbox admin环境搭建

Zookeeper实战之单机集群模式