—————————————————————————————
1、安装说明
1.1、环境说明
系统:centos7.8
Greenplum 版本:6.9
1.2、Greenplum6.9 下载
有两种版本下载,第一种Pivotal Greenplum这种是商业版的,与开源版 greenplum相比 多了一些功能,建议下载安装Pivotal Greenplum。
(1) 下载pivotal Greenplum:
下载地址
注意:需要先注册一下账号。
可在下拉框中选择自己需要的版本。
我选择下载 6.9.0 版本的。
点击 Greenplum Database Server
因为我的系统为centos 7 ,而centos 7与 RHEL相对应,所以这里下载第二个。
如果你的系统为centos 6,那么下载第三个。
详细的Greenplum 与系统的版本对照,请看文章结尾。
(2) 开源版Greenplum下载:
下载完成。
1.3、集群介绍
因为是单机部署,所以只有一台虚拟机。Master与Segment都在同一台主机上。
虚拟机内存大小为1.5g,系统为centos7.8。
1.4、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 查询linux虚拟机的ip地址
执行如下命令:
ifconfig
我的这台虚拟机的ip地址为192.168.88.129 。
2.2、主机名修改
永久生效,执行如下命令:
hostnamectl set-hostname mdw
执行完之后,进行查看。
测试显示的还是之前的主机名 hadoop_2,重启一下系统就可以显示主机名为mdw了。
2.3、配置/etc/hosts
我所谓的单机模式是指将Master和segment安装在一台机器上,尝试了网上的各种配置发现并不成功,尤其是将mdw和sdw都解析成127.0.0.1的设置根本行不通。你可以尝试设置Master为127.0.0.1,而segment为正式的ip地址,或者按我这么做:
执行如下命令:
vim /etc/hosts
后面添加以下内容:
192.168.191.131 mdw sdw
2.4、 关闭SELINUX
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。
在这里我们也关闭SELINUX。
执行如下命令:
vim /etc/selinux/config
设置 SELINUX=disabled
2.5、关闭防火墙
CentOS7版本的防火墙默认使用的是firewall,与之前的版本使用的iptables不一样。
所以执行如下命令关闭防火墙:
(1) 关闭防火墙 :
sudo systemctl stop firewalld.service
(2)、 关闭开机启动:
sudo systemctl disable firewalld.service
2.6、修改内核配置参数
在/etc/sysctl.conf文件中加入有关共享内存与网络参数配置
vim /etc/sysctl.conf
加入以下内容:
#是否打开ip转发。默认设置0。 0:禁止 1:转发
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
#处理无源路由的包
net.ipv4.conf.default.accept_source_route = 0
#0为禁用SysRq,1为启用SysRp
kernel.sysrq = 0
#Core文件的文件名是否添加应用程序pid做为扩展 0:不添加 1:添加
kernel.core_uses_pid = 1
#表示是否打开TCP同步标签(syncookie),可以防止一个套接字在有过多试图连接到达时引起过载。默认设置:0
net.ipv4.tcp_syncookies = 1
#单个消息队列中允许的最大字节长度(限制单个消息队列中所有消息包含的字节数之和)
kernel.msgmnb = 65536
#消息队列中单个消息的最大字节数
kernel.msgmax = 65536
#系统所允许的最大共享内存段的大小(以字节为单位)
kernel.shmmax = 68719476736
#系统上可以使用的共享内存的总量(以字节为单位
kernel.shmall = 4294967296
net.ipv4.tcp_tw_recycle=1
# 对于还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于 超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 128。
net.ipv4.tcp_max_syn_backlog=4096
#设置当个别接口接收包的速度快于内核处理速度时允许的最大的包序列
net.core.netdev_max_backlog=10000
vm.overcommit_memory=2
net.ipv4.conf.all.arp_filter = 1
手动执行命令让参数生效,当然,你也可以重启系统
执行命令:
sysctl -p
2.7、配置资源限制参数
在/etc/security/limits.conf中加入限制参数,修改文件打开数
vim /etc/security/limits.conf
在limits.conf文件中添加如下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
2.8、创建用户和用户组
创建gpadmin 用户组
[root@mdw ~]# groupadd gpadmin
创建gpadmin用户,指定其属于gpadmin用户组,将其作为安装greenplum的操作系统用户。
[root@mdw ~]# useradd -g gpadmin gpadmin
为gpadmin用户创建密码
[root@mdw ~]# passwd gpadmin
给gpadmin用户加上sudo权限
在root用户下执行如下命令:
visudo
找到这行 root ALL=(ALL) ALL,在他下面添加gpadmin ALL=(ALL) ALL
添加完之后,保存并退出!
3、安装Greenplum
3.1、上传Greenplum到虚拟机中
因为我是在本地下载的Greenplum,所以需要上传 greenplum-db-6.9.0-rhel7-x86_64.rpm 到虚拟机中。
查看:
3.2、安装
安装 greenplum,建议不要通过rpm命令去安装,因为会提示缺少依赖。
执行:
rpm -ivh greenplum-db-5.5.0-rhel7-x86_64.rpm
提示缺少依赖:
直接执行如下命令,就可以把需要的依赖自动下载。
[root@mdw ~]# yum install -y greenplum-db-6.9.0-rhel7-x86_64.rpm
安装成功!
默认安装到 /usr/local,授权给gpadmin
执行如下命令,完成授权:
[root@mdw local]# chown -R gpadmin /usr/local/greenplum*
[root@mdw local]# chgrp -R gpadmin /usr/local/greenplum*
将/usr/local/greenplum-db/greenplum_path.sh 添加到环境变量中:
[root@mdw greenplum-db]# source /usr/local/greenplum-db/greenplum_path.sh
4、环境配置
4.1、创建数据存储空间
切换到gpadmin账户下,在home目录下建立master和segment的数据存放目录。你也可以自行设定数据存放目录,如果你不是以gpadmin建立的目录,还需要修改目录的用户和用户组,最好是建在home目录下.
切换到gpadmin用户下:
su gpadmin
建立master 和 segment的数据存放目录。
mkdir -p /home/gpadmin/masterdata
mkdir -p /home/gpadmin/segmentdata
mkdir -p /home/gpadmin/segmentmirror
4.2、配置.bashrc环境变量
修改 .bashrc环境变量,执行
vim ~、.bashrc
在最后添加如下内容 :
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=gpadmin
PS:greenplum_path的路径也是根据你的gp安装路径来的,如果和我不一样,自己改吧,若果路径不对,gp命令将无法执行,会提示没有这个命令
然后执行如下命令,使配置生效:
source .bashrc
4.3、配置.bashrc_profile 环境变量
执行如下命令:
vim ~/.bash_profile
在最后添加如下内容
export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=gpadmin
然后执行如下命令,使配置生效:
source .bash_profile
5、打通服务器之间的连接
创建包含所有主机的文件all_hosts:
vim /home/gpadmin/all_hosts
加入下面两行:
mdw
sdw
创建包含segment主机名的文件
vim /home/gpadmin/seg_hosts
加入下面一行:
sdw
6、初始化数据库
6.1、编辑Greenplum初始化配置文件
编辑初始化配置文件,直接编辑一个新文件,不要复制官方模板里的再改了,除非你想知道这些东西都是什么意思。官方模板所在位置:(/usr/local/greenplum-db/docs/cli_help/gpconfigs 目录下的gpinitsystem_config为模板文件)
vim /home/gpadmin/gpinitsystem_config
添加如下内容:
#数据库代号
ARRAY_NAME="EMC Greenplum DW"
#segment前缀
SEG_PREFIX=gpseg
#primary segment起始的端口号
PORT_BASE=33000
#指定primary segment的数据目录,网上写的是多个相同目录,多个目录表示一台机器有多个segment
declare -a DATA_DIRECTORY=(/home/gpadmin/segmentdata)
#master所在机器的host name
MASTER_HOSTNAME=mdw
#master的数据目录
MASTER_DIRECTORY=/home/gpadmin/masterdata
#master的端口
MASTER_PORT=5432
#包含segment主机名的文件
MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
#指定bash的版本
TRUSTED_SHELL=ssh
#将日志写入磁盘的间隔,每个段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1
CHECK_POINT_SEGMENTS=8
#字符集
ENCODING=UNICODE
#mirror segment起始的端口
MIRROR_PORT_BASE=43000
#指定第一个primary segment用于数据复制的端口号,其他primary segment以此为基础,每次加1,计算复制用的端口号。它的设置也不要与primary segment冲突。取值范围1到65535。
REPLICATION_PORT_BASE=34000
#指定第一个mirror segment用于数据复制的端口号,其他mirror segment以此为基础,每次加1,计算复制用的端口号。它的设置也不要与mirror segment冲突。取值范围1到65535。
MIRROR_REPLICATION_PORT_BASE=44000
#mirror的数据目录,和主数据一样,一个对一个,多个对多个
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/segmentmirror)
PS:注意这里面的几个路径,如果你有多个segment,declare就多加几个路径,我这里只设了一个segment节点,所以只有一个路径
SSH 连接本机,无密码登录
如果安装的话,请执行如下命令:
sudo yum install openssh-server
若安装过了,会提示已经安装过。
安装后,可以使用如下命令登录本机:
ssh localhost
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 ,这样就登陆到本机了。
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先退出刚才的 ssh,执行exit,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。
切换到/home/gpadmin目录下:
执行如下命令,使用gpssh-exkeys 打通所有服务器(Master),这样在每台机器之间跳转,就不需要输入密码:
gpssh-exkeys -f ./all_hosts
6.2、初始化数据库:
gpinitsystem -c /home/gpadmin/gpinitsystem_config
7、数据库库的简单操作
7.1 进入shell
psql postgres
7.2 创建一个角色
create role mumucgq with login password 'mumucgq';
7.3 修改角色密码
alter role gpadmin with password 'mumu';
7.4 创建一个新的数据库
create database orclDB
7.5 查看所有的数据库
执行如下语句,查看所有数据库:
select datname,datdba,encoding,datacl from pg_database;
或者 执行如下命令:
\l
7.6 切换到指定的数据库
执行如下命令:
\c 数据库名
注意:数据库名中大写字母,会变为小写。切换数据库的时候,注意都用小写。
比如:
切换到刚才创建的数据库 orclDB。
执行:
7.7 创建表
create table test01(a int , b text) distributed by (a);
7.8 插入数据
insert into test01 values(1,'hello');
insert into test01 values(2,'world');
insert into test01 values(3,'greenplum');
insert into test01 values(3,'cgq')
7.9 查询表记录
select * from test01;
7.10 查看数据分布
select gp_segment_id, count(*) from test01 group by 1;
7.11 退出
\q
7.12 使用刚才新创建的角色登录数据库
在上面的操作中 我新建了一个 名为 mumucgq 的角色,并赋予的登录的权限,现在我们用它来进行登录。
首先简单介绍下psql 命令的两种格式 (psql是PostgresSQL自带的psql命令行工具)。
psql postgres://username:password@host:port/dbname
psql -U username -h hostname -p port -d dbname
先解释第一个命令格式里各个参数:
-
username:连接数据的用户名,默认值是postgres
-
password:密码,默认值是postgres
-
host:主机名,默认值是localhost
-
port:端口,默认值是5432
-
dbname:要连接的数据库名,默认值是postgres
第二个命令的各个参数:
-
-U username 用户名,默认值postgres
-
-h hostname 主机名,默认值localhost
-
-p port 端口号,默认值5432
-
-d dbname 要连接的数据库名,默认值postgres
介绍完之后,好的让我们来登录吧
执行如下命令:
psql -U mumucgq
呀!可以看到连接直接失败了,这是为什么呢?从出错信息里我们看到,原因是认证失败。
原因:因为greenplum是基于PostgreSQL的,PostgreSQL安装及初始化完成以后,在它的配置文件里,默认只允许本机连接,而且连接到服务器的认证方式是trust 和 ident。如下图所示:
这个配置是在/home/gpadmin/masterdata/gpseg-1 目录下的pg_hba.conf文件里设置的,
这个文件里的命令格式解释如下:
-
TYPE:指的是连接类型,一般有local和host两种,local指的是本地连接,host指的是从远程主机连接或本地主机的localhost地址连接
-
DATABASE:指的是要连接的数据库,all表示所有,还可以使用具体的数据库名,比如postgres
-
USER:指的是用来连接的用户名,all表示所有用户,还可以使用具体的用户名,比如postgres
-
ADDRESS:指的是连接数据库的客户端IP地址来源,127.0.0.1/32表示只允许来自己本机的连接,0.0.0.0/0表示允许来自所有ip的连接,192.168.1.0/24表示允许192.168.1.1-192.168.1.255这个地址段的ip地址连接
-
METHOD:表示连接的时候使用的认证方式,常用的有trust,表示信任所有连接。md5,表示需要连接的客户端提供一个加密密码来登录。password是以明文密码传送给数据库。
现在让我们来修改pg_hba.conf文件:
添加:
local all mumucgq password
保存后退出!
执行如下命令:
gpstop -u
停止数据库,此选项将重新加载Master和Segment的pg_hba.conf文件以及postgresql.conf文件的运行时参数,但不会关闭数据库阵列。编辑postgresql.conf或pg_hba.conf之后,使用此选项可使新的配置设置处于活动状态。
OK这样就成功了!
8 常用命令
8.1 正常启动
gpstart
需要输入 y 启动
之后再执行 psql postgres
8.2 正常关闭
gpstop
需要输入 y ,确定关闭
关闭之后再 执行,psql postgres
4.3 快速关闭
gpstop -M fast
需要输入 y ,确定关闭
8.4 重启
gpstop -r
9、结语
参考文章:
https://blog.csdn.net/a2226701325/article/details/107243561/
https://www.jianshu.com/p/513935550350
如果感觉有帮助的话,请给我点个赞哦,有问题的地方欢迎指出。