了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站

随着Greenplum大数据平台正式进入6时代,Greenplum 新版本在功能和性能上都实现大幅度地提升。Greenplum 用户麦煜遥将在本文详细介绍如何在Linux上搭建Greenplum 6.1集群。

1. 安装说明

1.1 环境说明

操作系统:  CentOS release 6.6

数据库: Greenplum 6.1

辅助工具:  Winscp, Putty

Winscp: 以root权限登录,远程连接Linux修改文档内容。Putty: 远程连接Linux运行命令。

1.2 参考安装教程

• Greenplum 5 <Greenplum 企业应用实战> 何勇,陈晓峰

• Greenplum 6 官网

https://gpdb.docs.pivotal.io/6-1/install_guide/prep_os.html#topic1

1.3  Greenplum 6.1 下载

https://github.com/greenplum-db/gpdb/releases/tag/6.1.0

备注:Greenplum 6.1 安装有两种方法:

一是,下载源码,本地编译、安装;

二是,直接下载编译好的包安装。

这里选择的是,下载编译好的包安装,对于POC来讲,比较节省时间。

1.4 集群介绍

我搭建的 Greenplum 集群,使用1个 Master ,3个 Segment 的集群,如下:

192.168.xxx.1 Master
192.168.xxx.3 Segment
192.168.xxx.4 Segment
192.168.xxx.5 Segment

备注:192.168.xxx.2 是 ETL 的 Pentaho 服务器,后面用来做测试的,没有在此列。

1.5 Master 与 Segment 职责对比

Master: 

(1) 建立与客户端的回话连接和管理

(2) SQL的解析并形成分布式的执行计划

(3) 将生成好的执行计划分发到每个 Segment 上执行

(4) 收集 Segment 的执行结果

(5) Master 不存储业务数据,只存储数据字典

(6) Master 主机可以一主一备,分布在两台机器上

(7) 为了提高性能, Master 最好单独占用一台机器

Segment: 

(1) 业务数据的存储和存取

(2) 执行 Master 分发的 SQL 语句

(3) 对于 Master 来讲,每个 Segment 都是对等的,负责对应数据的存储和计算

(4) 每一台机器上可以配置一到多个 Segment

(5) 由于每个 Segment 都是对等的,建议采用相同的机器配置

(6) Segment 分 primary 和 mirror 两种,一般交错的存放在子节点上。

2. 安装环境准备

2.1 关闭SELINUX  (4台)

• /etc/selinux/config

SELINUX=disabled

备注:关闭后,就不用再开启,也不需要reboot。另外,用 Winscp 去编辑文档,比在命令环境方便多了。

2.2 关闭防火墙  (4台)

配置的时候,要保证所有的机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的情况。

• 查看防火墙状态

> service iptables status

• 关闭防火墙

> service iptables stop

• 永久关闭防火墙

> chkconfig iptables off

备注:CentOS 6的命令是iptables,和CentOS 7不同。防火墙关闭后,就不用再开启。

2.3 配置/etc/hosts  (4台)

主要是为之后 Greenplum 能够在各个节点之间相互通信做准备。习惯将 Master 叫 mdw,Segment 叫 sdw 。4台都要设置:

192.168.xxx.1  (主机名)  mdw
192.168.xxx.3  (主机名)  sdw1
192.168.xxx.4  (主机名)  sdw2
192.168.xxx.5  (主机名)  sdw3

备注:hosts文件是Linux系统中负责ip地址与域名快速解析的文件,我这台DEV服务器装了很多东西,主机名已经配置了。所以,mdw只是一个主机的别名,不影响程序去查找IP。


如果你想知道添加是否成功,ping一下即可:


2.4 修改内核配置参数 (4台)

• /etc/sysctl.conf (这是官网贴的配置,上面有说明)

kernel.shmall = 4000000000
kernel.shmmax = 500000000
kernel.shmmni = 4096
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
net.ipv4.ip_local_port_range = 10000 65535
kernel.sem = 500 2048000 200 40960
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 0
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296

• 执行命令使之生效

> sysctl -p

2.5 配置资源限制参数 (4台)

• /etc/security/limits.conf

* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072

2.6  创建用户和用户组 (4台)

创建 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

备注:密码提示太简单,连续输入两次即可。

2.7 创建安装目录,并赋权限 (4台)

> mkdir /usr/local/greenplum
> chown -R gpadmin:gpadmin /usr/local/greenplum/

备注:

• greenplum 5的书本提示安装在/opt,greenplum 6 装在/usr/local 。

• /opt一般是安装系统后用户自己安装的其他应用软件,一般是源码包的软件、大型软件、或者是一些服务程序的安装目录。

• /usr 一般是安装软件的目录,这个目录就相当于在 windows 下的 Program Files 目录。因为我是POC,无所谓,所以装在 /usr/local 。

3. 安装 Greenplum DB - Master

3.1 准备好安装文件

拷贝至 Master 主节点 /usr/local/greenplum 目录下 (其实可以放置在随意的目录)


3.2 安装

  • 执行命令安装  

> cd /usr/local/greenplum
> yum install greenplum-db-6.1.0-rhel6-x86_64.rpm

自动安装依赖,没有要求输入安装路径,自动安装到 /usr/local。


备注:greenplum 5 是用rpm命令的,而greenplum 6 则用 yum install 直接安装依赖。生成的文件夹如下,并自动创建软连接。

• 赋权限

因为我是用root权限安装的,所以Owner是root,要把Owner换成gpadmin,否则gpadmin无权操作该目录的文件。

chown -R gpadmin:gpadmin /usr/local/greenplum*

• 应用环境变量

安装完成后,greenplum的环境变量,已经在 greenplum_path.sh 中设置了,这里需要应用一下变量。用 gpadmin 用户,登录到 master host:

> su gpadmin
> source /usr/local/greenplum-db-6.1.0/greenplum_path.sh

4. 安装 Greenplum DB - Segment

4.1 Enabling Passwordless SSH (免密登录)

Master,Segment之间是通过SSH连接登录的,SSH登录有2种方式:密码,Host key。当然还可以两个都验证。但是,在服务器之间不可能每次都输入密码,所以我们只需要用Host key 登录即可。

  • 创建公私钥对 (4台)

我的Linux还没有公私钥对,所以,要先生成一个。生成时不要输入密码,否则还要用密码打开key。注意,我的登录用户是gpadmin。

> ssh-keygen -t rsa

选择生成的位置是 /home/gpadmin/.ssh/id_rsa,是私钥。另外,还会产生一个公钥 id_rsa.pub,生成如下:


• 添加信任其他机器的Host key (4 台)

> ssh-copy-id mdw
> ssh-copy-id sdw1
> ssh-copy-id sdw2
> ssh-copy-id sdw3

在集群的每一台使用 ssh-copy-id 命令,把 gpadmin 的 public key 拷到 known_hosts。这样,集群的机器互相访问就是通过这个设定互相信任的。(其实,个人觉得known_hosts是不需要放本机的key,放其他的机器key即可。而authorized_keys里面放的是本机的key。)


• 创建 hostlist,seg_hosts  (Master)

目录/home/gpadmin/conf,再分别创建hostlist,seg_hosts 。我这里 hostlist 中填写所有节点的主机别名,seg_hosts 中填写所有Segment 的主机别名。

> mkdir /home/gpadmin/conf
> cd /home/gpadmin/conf
> touch hostlist
> touch seg_hosts

然后,我喜欢使用winscp去修改内容:


4.2 使用 gpssh-exkeys 打通所有服务器  (Master)

  • 使用 gpssh-exkeys 将所有机器的通道打开,这样在每台机器之间跳转,就不需要输入密码。

> cd /home/gpadmin/conf
> gpssh-exkeys -f hostlist

  • 在打通所有机器通道之后,我们就可以使用 gpssh 命令对所有机器进行批量操作了。

> gpssh -f hostlist

备注:这是一个神奇的功能,原来我接触的集群部署,需要运行 SCP 远程拷贝命令。如果有100台,就需要操作100次。但是,这里只需要操作一次,就完成到全部集群的操作,前面带 "=>",exit 退出。

4.3 分发数据库文件

• 打包

> cd /usr/local
> tar -cf gp6.tar greenplum-db-6.1.0/
> chown -R gpadmin:gpadmin /usr/local/gp6.tar

打包的时候权限不够,我换成root,然后再把.tar的权限还给gpadmin。


最后,要用gpadmin操作,因为前面设置了gpadmin免密。

• 分发

> gpscp -f /home/gpadmin/conf/hostlist gp6.tar =:/usr/local/greenplum

官网没有这部分的说明,书上看到用的是 hostlist 作为参数去操作。但是 hostlist 里面的是配置包括 master 的主机别名,所以,主机到主机也复制了一份。

书上的用意应该是,把 greenplum-db-6.1.0 放进 greenplum 里面,外面那套greenplum重复了,就删掉。然后,4台机器都在同一个目录下。


• 解压

在master上运行,一台上敲命令,操作4台。

> gpssh -f /home/gpadmin/conf/hostlist
=> cd /usr/local/greenplum
=> tar -xf gp6.tar
=> ln -s greenplum-db-6.1.0 greenplum-db

最后,退出。

5.环境配置

5.1 创建数据存储空间 

以上安装的是程序,接下来要创建数据存储空间 。

• Master

Master 不存储 user data,仅有 system catalog tables 和 system metadata ,我这里没有 Standby Master。所以,只在 Master 创建一个目录即可。

> mkdir -p /home/gpadmin/data/master

• Segment

数据存储在Segment 中,并且需要 primary segments 和 mirror segments,其余3台segment 用 gpssh分别创建2个目录。

> source /usr/local/greenplum-db/greenplum_path.sh
> gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/primary'
> gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/mirror'


5.2  配置 .bash_profile 环境变量

• /home/gpadmin/.bash_profile, 网上没有确切说要配置几台,我4台都配置了。

source /usr/local/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/data/master/gpseg-1
export PGPORT=5432
export PGUSER=testDB

其中,greenplum_path.sh中包括greenplun运行的一些环境变量设置,包GPHOME等,因为安装后把位置改了,4台都修正之。


• 使之生效

> source /home/gpadmin/.bash_profile

5.3  初始化配置文件

• configuration file

模板在:$GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config,拷贝过来。


> mkdir /home/gpadmin/gpconfigs
> cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
#数据库代号
ARRAY_NAME="Greenplum"#segment前缀
SEG_PREFIX=gpseg#primary segment 起始的端口号
PORT_BASE=33000#指定primary segment的数据目录,网上写的是多个相同目录,多个目录表示一台机器有多个segment
declare -a DATA_DIRECTORY=(/home/gpadmin/data/primary)#master所在机器的host name
MASTER_HOSTNAME=mdw#master的数据目录
MASTER_DIRECTORY=/home/gpadmin/data/master#master的端口
MASTER_PORT=5432#指定bash的版本
TRUSTED_SHELL=/usr/bin/ssh#将日志写入磁盘的间隔,每个段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1
CHECK_POINT_SEGMENTS=8#字符集
ENCODING=UNICODE#mirror segment 起始的端口号
MIRROR_PORT_BASE=44000# mirror的数据目录,和主数据一样,一个对一个,多个对多个
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/mirror)

• host file


6. 初始化数据库

 6.1 安装

> cd ~
> gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem

期间会提示,是否继续,输入y即可:


• 以上提示安装失败

• 查看日志,排查异常


[FATAL]:-Not on original master host Master, backout script exiting!
解决:不使用这个脚本清理中间数据,按照backout里面的步骤一个个删除。

• 经历过很多次失败,最后成功了,也忘记怎么过来的。可能是我在gpadmin和root之间频繁切换,要Source 环境变量,反正网上都可以搜到答案。


7. 使用数据库

7.1 psql 登录数据库

psql -d postgres

• 创建数据库

命令集参考文档如下:

https://gpdb.docs.pivotal.io/6-1/ref_guide/sql_commands/sql_ref.html

\q 退出
\l 显示数据库列表

7.2 允许外部登录

• navicat登录

结果报错,因为greenplum有权限控制,并不是所有的机器都可以连接到数据库。需要在pg_hba.conf文件增加客户端机器的权限。


• 先给gpadmin创建一个密码:

testdb=# alter role gpadmin with password 'gpadmin';
ALTER ROLE

• 在Linux,我们可以用命令快速查找一个文件:

[root@  ~]# find / -type f -name pg_hba.conf
/home/gpadmin/data/master/gpseg-1/pg_hba.conf

• 因为是POC,我开通全网可以直接访问全部数据库。

连接方式 连接的数据库 连接的用户  连接的主机IP  认证方式
host     all         gpadmin     192.168.0.0/16   trust

• 刷新

pg_ctl reload -D /home/gpadmin/data/master/gpseg-1

备注:官网说的 gpstop -u 可以刷新 postgresql.conf 和 pg_hba.conf 但不重启 Greenplum Database,其实是不行的,我一直改pg_hba.conf,一直报错。


• navicat登录


大功告成!

7.3 其他greenplum命令

• 关闭

> gpstop

• 启动

> gpstart

• 状态查看

> gpstate

• 其他

https://gpdb.docs.pivotal.io/6-1/utility_guide/ref/gpstate.html


关于作者

麦煜遥 (公众号:Entelodon):毕业于电子科技大学(成都) ,热衷IT技术,擅长数据分析。曾从事社保数据分析处理,IBM/AS400 DB2开发、数据分析,参保人员数据量月增千万级;曾于电脑OEM厂商,负责EDI(电子数据交换),电子订单秒级并发量万级。现于供职于风电行业,从事大数据分析。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201116172531870.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dwX2NvbW11bml0eQ==,size_16,color_FFFFFF,t_70#pic_center)

收藏版!手把手教你搭建 Greenplum 6.1 集群相关推荐

  1. 手把手教你搭建K3S产线集群

    简介 K3S是Kubernetes(K8S)的精简版,官方说是去除了一些云厂商相关的东西.反正在国内也使用不了有的云厂商.部署也比K8S简单了许多.我自己使用了一段时间,感觉还不错.如果你想部署私有化 ...

  2. 手把手教你在centos7安装k8s集群

    最近在整理回顾k8s相关的知识,实操手动去搭建一个简易的k8s集群环境(作者本人搭建的是k8s集群version v1.23.3),花了挺多时间,踩了不少坑.不过最终还是把环境跑起来了,大家按照我的方 ...

  3. 从零开始,手把手带你搭建MySQL高可用集群

    搭建MySQL分布式集群,例如:利用MySQL cluster ,MySQL proxy,MySQL replication,drdb等等,有人会问MySQL集群意义是什么呢? 为一个数据库减轻负担, ...

  4. 服务器群装系统,手把手教你安装及配置服务器集群系统

    今天,我们方案大家谈的经销商为我们提供了安装及配置服务器集群系统的详细步骤.下面,我们来手把手的教您配置服务器集群系统吧! 1.集群服务器安装及配置: 步骤 节点1 节点2 存储 注释 安装配置系统 ...

  5. 手把手教你实现 Docker 部署 Redis 集群

    作者:我为什么要写这个 cnblogs.com/cxbhakim/p/9151720.html 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试 ...

  6. 2万字好文!手把手教你实现 Docker 部署 Redis 集群

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 Life is not ...

  7. 手把手教你创建容器服务Kubernetes集群

    Kubernetes作为目前最流行的容器编排工具,被越来越多的用户所接受,目前也有越来越多的用户开始考虑使用Kubernetes集群来部署生产应用.那么,此时用户可能面临一个问题,如何规划和创建合适的 ...

  8. 手把手教你搭建 ELK 实时日志分析平台

    来自:武培轩 本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash ...

  9. OceanBase技术直播间开播啦!蚂蚁金服技术专家手把手教你搭建OB数据库~

    OceanBase技术直播间是OceanBase为用户和技术爱好者带来的系列技术直播课程,由蚂蚁金服一线技术专家分享最全面的理论知识和最实用的技术实践,内容包含数据库内核系列.手把手实操系列和最佳实践 ...

最新文章

  1. c++中的void指针和const指针
  2. 图形基础 GPU架构(5)并行计算
  3. 北斗导航 | 自主无人系统多传感器融合技术(学术PPT分享附视频链接)
  4. 超简单的视频对象提取程序
  5. 苹果Mac Mini 高配版 M1X 或将于数月后发售
  6. Linux系统瘦身裁剪 续
  7. MVVM架构~knockoutjs系列之验证信息自定义输出~续
  8. pandas删除index与某一列有重复值所在的行
  9. 运筹学及其matlab应用,运筹学基础及其MATLAB应用
  10. java定时任务 时间_java 定时任务的执行时间表示-
  11. sql概念模型和逻辑模型
  12. Facebook登陆时遇到的问题
  13. Mac本终端连接服务器
  14. 赴日本常见问题QA (2转 不明原处)
  15. 面向问题编程-切面+反射实现字段级别权限控制
  16. Egret 更改按钮图片(正常,按下,禁用)
  17. team网卡配置_在CentOS7中配置网路成组(Network Team)
  18. 《转》前端开发面试题
  19. java 动物声音模拟器_动物声音模拟器软件
  20. 再生龙制作u盘启动linux,再生龙制作U盘启动盘教程 | 楚盟博客

热门文章

  1. Python3 实现 Redis 消息队列
  2. UFS Compliance测试夹具
  3. 2022第八届中国国际“互联网+”大学生创新创业大赛产业命题赛道开启报名!
  4. python模拟实现链表_python实现链表
  5. HLW8112在电力监控系统中的应用
  6. 面试官问:前后端分离项目,有什么优缺点?
  7. 20个免费网站测试工具(转)
  8. 如何使用微信公众号下载工具提取视频号视频
  9. 使用iPXE自动化安装ubuntu22.04
  10. webspoon报错解决方案