关于Greenplum的那点事儿

服务器

浏览数:58

2020-5-31

AD:资源代下载服务

Greenplum是什么鬼?干啥用的?能吃吗?

                                                                            

下面是来自官网的一段英文:

                                    

大概翻译一下:

  • Greenplum Database是一个大规模并行处理(MPP)数据库服务器,其架构专门用于管理大规模分析数据仓库和商业智能工作负载。
  • MPP(也称为无共享架构)是指具有两个或更多处理器的系统,它们协作执行操作,每个处理器具有其自己的存储器,操作系统和磁盘。Greenplum使用这种高性能系统架构来分配多TB数据仓库的负载,并且可以并行使用所有系统资源来处理查询。
  • Greenplum数据库基于PostgreSQL开源技术。它本质上是几个PostgreSQL面向磁盘的数据库实例,它们共同作为一个有凝聚力的数据库管理系统(DBMS)。它基于PostgreSQL 8.3.23,在大多数情况下与PostgreSQL在SQL支持,功能,配置选项和最终用户功能方面非常相似。数据库用户与Greenplum数据库交互,就像使用常规PostgreSQL DBMS一样。

                                                                            

Greenplum采用Postgresl作为底层引擎,良好的兼容了Postgresql的功能,Postgresql中的功能模块和接口基本上99%都可以在Greenplum上使用,例如odbc、jdbc、oledb、perldbi、python psycopg2等,所以Greenplum与第三方工具、BI报表集成的时候非常容易;当然它也提供了一些Postgresql不存在的高级功能:

  • 外部表并行数据加载

  • 可更新数据压缩表

  • 行、列混合存储

  • 数据表多级分区

  • Bitmap索引

  • Hadoop外部表

  • Gptext全文检索

  • 并行查询计划优化器和Orca优化器

  • Primary/Mirror镜像保护机制

  • 资源队列管理

  • WEB/Brower监控

Greenplum最大的特点总结就一句话:基于低成本的开放平台基础上提供强大的并行数据计算性能和海量数据管理能力。这个能力主要指的是并行计算能力,是对大任务、复杂任务的快速高效计算,但如果你指望MPP并行数据库能够像OLTP数据库一样,在极短的时间处理大量的并发小任务,这个并非MPP数据库所长。请牢记,并行和并发是两个完全不同的概念,MPP数据库是为了解决大问题而设计的并行计算技术,而不是大量的小问题的高并发请求。

再通俗点说,Greenplum主要定位在OLAP领域,利用Greenplum MPP数据库做大数据计算或分析平台非常适合,例如:数据仓库系统、ODS系统、ACRM系统、历史数据管理系统、电信流量分析系统、移动信令分析系统、SANDBOX自助分析沙箱、数据集市等等。

而MPP数据库都不擅长做OLTP交易系统,所谓交易系统,就是高频的交易型小规模数据插入、修改、删除,每次事务处理的数据量不大,但每秒钟都会发生几十次甚至几百次以上交易型事务 ,这类系统的衡量指标是TPS,适用的系统是OLTP数据库或类似Gemfire的内存数据库。

Greenplum主要由Master节点、Segment节点、interconnect三大部分组成。Greenplum master是Greenplum数据库系统的入口,接受客户端连接及提交的SQL语句,将工作负载分发给其它数据库实例(segment实例),由它们存储和处理数据。Greenplum interconnect负责不同PostgreSQL实例之间的通信。Greenplum segment是独立的PostgreSQL数据库,每个segment存储一部分数据。大部分查询处理都由segment完成。

                                                                    

1. 环境准备

1.1 安装包准备

1.2 节点信息

IP地址 主机名

192.168.5.60

mdw

192.168.5.61

sdw1

192.168.5.62

sdw2

 

1.3 角色信息

IP地址

角色

192.168.5.60

master

192.168.5.61

Segment/standby

192.168.5.62

Segment

2 环境初始化配置

2.1 主机名配置

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

在/etc/hosts文件中添加以下内容:

192.168.5.60 mdw
192.168.5.61 sdw1
192.168.5.62 sdw2

保存退出,并分别对应修改/etc/hostname文件为mdw,sdw1,sdw2

举例说明:对于192.168.5.60则删除掉/etc/hostname中的localhost等内容,添加mdw保存退出即可。

2.2 创建用户及用户组

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

创建用户组:

groupadd -g 530 gpadmin

创建用户:

useradd -g 530 -m -d /home/gpadmin -s /bin/bash gpadmin

添加密码:

passwd gpadmin

2.3 修改机器内核参数

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

修改/etc/sysctl.conf文件,并添加以下内容:

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

使参数生效执行命令:

sysctl -p

2.4 修改文件打开限制

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

修改/etc/security/limits.conf文件,并添加以下内容:

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

2.5 关闭防火墙及selinux

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

关闭防火墙:

service firewalld stop

取消开机启动:

systemctl disable firewalld.service

关闭selinux:修改/etc/selinux/config文件将SELINUX=enabled 修改为SELINUX=disabled

执行完以上操作重启系统。

                                                                    

3 安装Greenplum

3.1 创建安装目录并修改目录权限

操作节点:192.168.5.60,192.168.5.61,192.168.5.62

操作用户:root

创建目录:

mkdir /opt/greenplum

修改目录权限:

chown -R gpadmin:gpadmin /opt/greenplum

3.2 解压安装包并安装

操作节点:192.168.5.60

操作用户:root

解压命令:

unzip greenplum-db-5.8.0-rhel7-x86_64.zip

开始安装执行

./greenplum-db-5.8.0-rhel7-x86_64.bin

查看安装证书:

连续按空格一直跳到出现下面提示部分:
*******************************************************************************
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.8.0
*******************************************************************************
/opt/greenplum/greenplum-db-5.8.0
*******************************************************************************
Install Greenplum Database into /opt/greenplum/greenplum-db-5.8.0? [yes|no]
*******************************************************************************
yes
*******************************************************************************
/opt/greenplum/greenplum-db-5.8.0 does not exist.
Create /opt/greenplum/greenplum-db-5.8.0 ? [yes|no]
(Selecting no will exit the installer)
*******************************************************************************
yes
Extracting product to /opt/greenplum/greenplum-db-5.8.0
*******************************************************************************
Installation complete.
Greenplum Database is installed in /opt/greenplum/greenplum-db-5.8.0
Pivotal Greenplum documentation is available
for download at http://gpdb.docs.pivotal.io
*******************************************************************************

出现上面截图则证明安装成功!

                                                                                        

3.3 配置Greenplum

  • 修改Greenplum的权限

        操作节点:192.168.5.60

        操作用户:root

        执行命令:

chown -R gpadmin:gpadmin /opt/greenplum
  • 开始安装其它节点

        操作节点:192.168.5.60

        操作用户:gpadmin

        配置文件说:hostlist存储所有节点的主机名,seg_hosts存储了所有从节点的主机名

        切换用户:

su - gpadmin

        新建conf目录:

mkdir conf

进入到/home/gpadmin/conf目录下并新建文件hostlist,并添加以下内容:

mdw
sdw1
sdw2

同样新建seg_hosts文件,并添加以下内容:

sdw1
sdw2
  • 打通所有节点

        操作节点:192.168.5.60

        操作用户:gpadmin

        执行命令:

source /opt/greenplum/greenplum-db/greenplum_path.sh
gpssh-exkeys -f /home/gpadmin/conf/hostlist

注意:

  • 首次执行gpssh-exkeys命令时,在[STEP 3 of 5],要输入每个segment节点的gpadmin用户的密码。
  • gpssh-exkeys命令使用的时候一定要用gpadmin身份,因为这个命令会生成ssh的免密码登录的秘钥,在/home/gpadmin/.ssh这里。如果以root身份使用gpssh-exkeys命令,那么生成的.ssh秘钥在root的home下面或者是在/home/gpadmin下面但是是root的所有者,如果之后使用gpadmin身份执行相应操作的时候就没有权限。

3.4 开始批量操作

操作节点:192.168.5.60

操作用户:gpadmin

执行命令:

gpssh -f /home/gpadmin/conf/hostlist

这里pwd命令是linux中的查看路径命令,这里也是查看一下批量操作时所处的位置,从中可以看到同时连接到了3个节点。这里如果/etc/hosts文件中参数只设置了两个,没有设置主机名,就只能同时连接2个节点,而且是随机的。这里我们只是测试一下,exit之后先做一些其他的操作

3.5 安装其它节点

  • 将安装包分发至其它节点

        操作节点:192.168.5.60

        操作用户:gpadmin

进入到/opt/greenplum目录,执行命令:

tar -cf gp.5.8.0.tar greenplum-db-5.8.0/

压缩完成后出现上面红框中的文件。

  • 利用gpscp命令将这个文件复制到每一台机器上

操作节点:192.168.5.60

操作用户:gpadmin

在/opt/greenplum目录中执行命令:

gpscp -f /home/gpadmin/conf/seg_hosts gp.5.8.0.tar =:/opt/greenplum/

执行完成后会在sdw1和sdw2的/opt/greenplum目录中出现以下截图文件:

  • 解压

操作节点:192.168.5.60

操作用户:gpadmin

进入到/home/gpadmin/conf目录下执行命令:

gpssh -f seg_hosts
=> cd /opt/greenplum
[sdw1]
[sdw2]
=> ln -s ./greenplum-db-5.8.0 greenplum-db
[sdw1]
[sdw2]
=> exit

3.6 初始化数据库

 

  • 创建数据目录

        操作节点:192.168.5.60,192.168.5.61,192.168.5.62

        操作用户:root

新建

mkdir /data

修改权限

chown gpadmin.gpadmin /data

        操作节点:192.168.5.60

        操作用户:gpadmin

进入到/home/gpadmin/conf目录下执行命令:

gpssh -f hostlist

 

 

  • 配置.bashrc环境变量

        操作节点:192.168.5.60,192.168.5.61,192.168.5.62

        操作用户:gpadmin

export PATH
source /opt/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/gpdata/gpmaster/gpseg-1

分别修改/home/gpadmin/.bashrc文件并添加以下内容:

#数据库端口号
export PGPORT=5432
#risenDB默认登录的数据库的名称
export PGDATABASE=risenDB

让上述配置生效执行命令:

source .bashrc
  • 创建初始化文件

操作节点:192.168.5.60

操作用户:gpadmin

新建/home/gpadmin/conf/gpinitsystem_config并添加以下内容:

ARRAY_NAME="Greenplum"
SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/data/gpdata/gpdatap1  /data/gpdata/gpdatap2)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/data/gpdata/gpmaster
MASTER_PORT=5432
TRUSTED_SHELL=/usr/bin/ssh
MIRROR_PORT_BASE=43000
REPLICATION_PORT_BASE=34000
MIRROR_REPLICATION_PORT_BASE=44000
declare -a MIRROR_DATA_DIRECTORY=(/data/gpdata/gpdatam1 /data/gpdata/gpdatam2)
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
  • 初始化数据库

操作节点:192.168.5.60

操作用户:gpadmin

初始化命令:

gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw1

持续等待几分钟。不报错的是是没有error信息的。截取部分信息:

有问题报错,看日志,日志很详细。

到此,greenplum已经安装完成。

查看一下standby的状态:

 

到此我们就可以进入数据进行一些SQL练习了。

                                                                                              

这就完了吗?不会只有终端命令吧?说好的客户端呢?说好的可视化集群监控呢?

                                                                                    

莫慌!接下来开始安装客户端和可视化集群监控工具,但是安装之前要先讲一个配置文件?纳尼?这个配置文件有啥用?干啥的?跟下面安装的工具有关系吗?

                                                                            

通过上面的登录命令,我们发现居然没有输入用户名密码也可以登录吗?这样肯定是不安全的。所以首先为终端登录添加用户名和密码顺带说明一下权限管理的配置文件。

                                                                 

4 添加新的客户端服务器信息

在master节点的$MASTER_DATA_DIRECTORY(上面我们配置的是/data/gpdata/gpmaster/gpseg-1路径)/pg_hba.conf 中添加新的客户端服务器信息。master节点的pg_hba.conf配置文件,控制客户端访问Greenplum系统。注意:segment节点也有pg_hba.conf配置文件,它只能控制master节点能否访问segment,决不能运行客户端连接。所以不要修改segment的pg_hba.conf文件。

格式:

host  database  role  CIDR-address  authentication-method

pg_hba.conf中记录是被顺序读取的,所有记录的顺序是有象征性意义的。通常前面的记录匹配更少的连接但要求较弱的认证,后面的记录匹配更多的连接但要求更严格的认证。

例如:允许gpadmin用户在192.168.5.60访问所有数据库,使用md5验证。

# vi $MASTER_DATA_DIRECTORY/pg_hba.conf

添加以下内容:

host     all         all         192.168.5.60/24             md5

在master重新加载pg_hba.conf文件,需要重启Greenplum数据库

gpstop -a

gpstart -a

验证客户是否可以连接:

psql -h 192.168.5.60 -p 5432 -d postgres -U gpadmin -W

-h 172.16.69.130是指定连接master的ip地址

-p 5432 是安装greenplum数据库时,设置的端口号

-u gpadmin 是指定连接的用户名

 

第一种情况我们输入密码错误,验证无法通过,第二种输入正确,登录成功,证明配置文件生效。

客户端远程连接

安装好数据库后,现在安装Windows的Pgadmin客户端。安装好后连接界面配置server name:

                                            

然后配置connection连接:

                                             

就这么简单吗?当然不会。

如果报无法连接等错误,说明当前Windows的ip没有加入到greenplum配置文件中,所以需要添加(我Windows的是4网段的):

根据4.8中的客户端配置,我们添加以下内容:

host     all         gpadmin         Windows IP地址/24       md5

保存退出后执行命令:

pg_ctl reload

让其生效。如果报错:

 

因为在上述配置环境变量中我们使用的名字是MASTER_DATA_DIRECTORY而不是PGDATA,所以我们这里需要手动执行一下:

export PGDATA=/data/gpdata/gpmaster/gpseg-1

然后在此执行

pg_ctl reload

 

没有问题,那么通过客户端点击Save按钮,出现以下信息说明连接成功,可以看到之前我创建的risendb数据库。

6 Greenplum Web监控界面

  • 安装

        操作节点:192.168.5.60

        操作用户:gpadmin

上传greenplum-cc-web-4.1.1-LINUX-x86_64.zip到/home/gpadmin目录下并解压,然后进入到greenplum-cc-web-4.1.1-LINUX-x86_64执行命令:

./gpccinstall-4.1.1

开始认证证书,同样按空格跳过,这里中间过程省略默认回车和y即可直说一下容易出问题的地方,第一个是安装路径我们选择/home/gpadmin/greenplum-web需要手动输入:

Where would you like to install Greenplum Command Center? (Default=/usr/local)

/home/gpadmin/greenplum-web

非常重要的报错信息

报错缺少gpperfmon数据库和gpmon这个角色,所以需要执行以下命令创建数据库:

gpperfmon_install --enable --password 123456 --port 5432

然后通过4.8进行配置客户端将用户为gpmon的配置全部修改为trust(原来是md5)这一步非常非常重要

local    gpperfmon   gpmon                         trust
host     all         gpmon         127.0.0.1/28    trust
host     all         gpmon         ::1/128         trust

然后执行同步standby节点的命令:

gpscp -h sdw1 $MASTER_DATA_DIRECTORY/pg_hba.conf =:$MASTER_DATA_DIRECTORY/
gpscp -h sdw1 ~/.pgpass =:~/

执行完毕后重启数据库并查看当前监控数据:

psql -d 'gpperfmon' -c 'select * from system_now;'

说明greenplum-cc安装成功!

  • 配置环境变量

        操作节点:192.168.5.60,192.168.5.61,192.168.5.62

        操作用户:gpadmin

分别在每台机器的/home/gpadmin/目录下的.bashrc文件中添加下面命令:

source /home/gpadmin/greenplum-web/greenplum-cc-web-4.1.1/gpcc_path.sh

并分别执行命令:

source .bashrc 

让其生效。

  • 安装完成后启动服务

        操作节点:192.168.5.60

        操作用户:gpadmin

gpcc start

同样根据错误可以判断是因为没有配置客户端,那么根据4.8进行配置并添加以下内容:

host     all         gpmon        192.168.5.60/24     md5

同时sdw1作为standby也需要添加,然后重启数据库。再次启动服务成功。

 

  • 访问web界面

        操作节点:192.168.5.60,192.168.5.61

        操作用户:gpadmin

由于这里的ip地址映射的是mdw主机名,所以我们需要在Windows的host文件中添加:

192.168.5.60 mdw

保存并退出

然后在登录界面输入gpmon 密码123456

仍然报错说是gpmon无法认证。这是因为之前安装web的时候将master和standby的pg_hba.conf中的所有gpmon用的认证机制修改为的trust,那么现在既然web安装成功了,所以再次修改为md5认证(master+standby sdw1),因为greenplum-cc中需要带有登录认证的配置。

保存并退出,再次通过

gpcc start

启动greenplum-cc服务,然后通过浏览器访问:http://mdw:28080

点击登录:

登录成功!

7 问题

  • 删除或修改系统表信息的时候

需要使用通过gpstart -m 进入到维护模式,然后通过命令:

PGOPTIONS='-c gp_session_role=utility' psql -d postgres

登录,然后设置可编辑:

set allow_system_table_mods=DML;

然后就可以进行操作系统表了。

8 常用命令

  • 数据库命令
gpstart 默认安装完成会自动开启,启动数据库

gpstate{-f 查看standby状态} 查看数据库状态

gpstop 关闭数据库

psql -l 列出所有数据库

gpstop -M fast 快速关闭

gpstop –r 重启

gpstop –u 重新加载配置文件

createdb -p 5432 -e -U gpadmin dbname 创建数据库

gpconfig -c 参数名称 -v 参数值(若果master和segment不一样,name在后面指定-m master参数值) 批量修改系统配置文件参数
  • 数据库SQL命令
alter role gpadmin with password '123456'; --户名创建密码

select * from gp_segment_configuration; --查看segment配置

select * from pg_filespace_entry; --查看文件系统

\d+ <tablename> --查看表结构

\dt --显示表

\l --显示数据库

到此,Geenplum的一个分布式安装和web监控以及客户端安装就全部安装完毕了。个人忠告,第一次安装,可能遇到各种奇葩问题和莫名其妙的环境问题,但是莫慌,报错原因基本都在日志中暴露出来了,仔细排查即可。不足之处欢迎指正!!!

                                                                                     

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

作者:AmCoder