随着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(电子数据交换),电子订单秒级并发量万级。现于供职于风电行业,从事大数据分析。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。