背景
原来使用GP的场景是直接使用阿里云提供的HybridDB产品,所以没有亲自动手安装过。现在有一个在本地搭建测试环境的需求,所以就照猫画虎的做一遍,把过程记录下来。
CentOS 7 x64
Greenplum 5.8.0 RPM包安装(基于PostgreSQL 8.3.23)
Greenplum 6.0.0 源代码安装(基于PostgreSQL 9.2.0)
备注:
-
目前Greenplum已经开源,但是在网上不太容易找到已经编译后的新版本,所以我这次找了一个第三方编译的5.8.0的RPM包来进行安装。
-
基于新源代码,我也进行了一次编译安装。
参考:
OS环境准备
本节所有操作都默认使用root用户在每一个节点上执行
GP生产环境一般是多个节点,如果是仅用于测试,也可以选择单节点模式。两种安装方式在操作流程上几乎没有区别。
系统准备
#### 安装过程中需要使用到的一些工具,dos2unix用来转换在Win环境编辑的配置文件
yum -y install unzip ntp dos2unix
复制代码
sysctl参数
#### 修改系统参数
vi /etc/sysctl.conf
# 修改下列配置,以下是小配置
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 500 1024000 200 4096
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
复制代码
limits参数
#### 修改文件打开数等限制
vi /etc/security/limits.conf
# 添加如下几行(注意*也需要添加)
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
####
vi /etc/security/limits.d/90-nproc.conf
# 添加如下几行(注意*也需要添加)
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
复制代码
scheduler参数
#### 修改默认参数cfq为deadline
echo deadline > /sys/block/vda/queue/scheduler
#### 检查修改后的结果
more /sys/block/vda/queue/scheduler
noop anticipatory [deadline] cfq
复制代码
关闭防火墙
#### 关闭防火墙
chkconfig iptables off
service iptables stop
systemctl stop firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#### 检查修改后的结果
sestatus
复制代码
允许root密码登录
#### 允许root密码登录并重启ssh
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin .*$/PermitRootLogin yes/' /etc/ssh/sshd_config
service sshd restart
#### 检查修改后的结果
grep ^PasswordAuthentication /etc/ssh/sshd_config
grep ^PermitRootLogin /etc/ssh/sshd_config
复制代码
主机hosts
#### 修改hosts
vi /etc/hosts
# 修改为如下内容(三个节点)
127.0.0.1 localhost
10.10.1.10 mdw
10.10.1.11 sdw1
10.10.1.12 sdw2
#### 修改主机名(在每个节点上分别使用各自的名称,这里仅用mdw为例)
sed -i 's/HOSTNAME=.*/HOSTNAME=mdw/' /etc/sysconfig/network | hostname mdw
复制代码
时钟同步
####
vi /etc/ntp.conf
# 把下列内容改在行
server mdw
复制代码
安装数据库
本节所有操作都默认使用root用户在Master节点上执行
节点信息配置
安装过程中,GP需要两个文件提供节点信息
####
vi hostfile_exkeys
# 包含Master和Segment
mdw
sdw1
sdw2
####
vi hostfile_segments
# 只包含Segment
sdw1
sdw2
复制代码
安装Master
源代码编译安装
因为流程步骤比较多,所以我把这一部分内容放在了文章末尾的附录中。
RPM安装
#### RPM方式,默认安装到 /usr/local/greenplum-db/ (以root在master执行)
rpm -Uvh greenplum-db-5.8.0-rhel7-x86_64.rpm
复制代码
建立节点信任关系
#### 安装各个节点的过程中,需要打通master到各节点的免密码登录 (以root在master执行)
source /usr/local/greenplum-db/greenplum_path.sh
gpssh-exkeys -f hostfile_exkeys
# 在上面操作过程中要求输入节点root的密码
复制代码
安装各节点
#### 安装各个节点,并建立gpadmin用户(以root在master执行)
gpseginstall -f hostfile_exkeys -u gpadmin -p gpadmin
复制代码
创建数据文件夹
#### 创建数据文件夹 (以root在master执行)
# gpssh工具可以同时在多个机器上执行相同命令,和ansible功能类似
gpssh -f hostfile_exkeys
=>
mkdir -p /data/gpdata/gpmaster
mkdir -p /data/gpdata/primary
mkdir -p /data/gpdata/mirror
chown -R gpadmin:gpadmin /data/gpdata
exit
复制代码
安装后检查
####
gpssh -f hostfile_exkeys -v -e 'ntpd'
gpcheck -f hostfile_exkeys -m mdw -s sdw1 -s sdw2
复制代码
初始化数据库
本节所有操作都默认使用gpadmin用户在Master节点上执行
环境变量
su - gpadmin
#### 修改环境变量
vi ~/.bash_profile
# 增加如下内容
export GPHOME=/usr/local/greenplum-db
export MASTER_DATA_DIRECTORY=/data/gpdata/gpmaster/gpseg-1
source ${GPHOME}/greenplum_path.sh
#### 重新载入环境变量
source ~/.bash_profile
复制代码
初始化数据库
#### 以gpinitsystem_config文件为模板
cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config ./gpinit_config
#### 配置gpinit_config
vi gpinit_config
# 修改如下配置,每个segment上1个数据文件夹,没有配置镜像
declare -a DATA_DIRECTORY=(/data/gpdata/primary)
MASTER_DIRECTORY=/data/gpdata/gpmaster
ENCODING=UTF8
#### 初始化
gpinitsystem -c gpinit_config -h hostfile_segments
复制代码
修改安全设置
#### 设置监听IP和Port
vi ${MASTER_DATA_DIRECTORY}/postgresql.conf
# 设置监听所有IP(这是一个非常宽松的限制,生产环境慎用)
listen_addresses = '*'
port = 5432
#### 设置数据库白名单
vi ${MASTER_DATA_DIRECTORY}/pg_hba.conf
# 增加如下一条记录,允许用户密码模式(这是一个非常宽松的限制,生产环境慎用)
host all all 0.0.0.0/0 md5
复制代码
启动停止命令
#### 启动,-a参数跳过用户确认步骤
${GPHOME}/bin/gpstart -a
#### 停止
${GPHOME}/bin/gpstop -a -M fast
#### 重新载入配置文件(不需要重启)
${GPHOME}/bin/gpstop -u
复制代码
访问数据库
命令行连接
#### 使用gpadmin用户作为超级用户登录
su - gpadmin
psql -p 5432 -d postgres
复制代码
# 查询当前版本
select * from version();
# 通过执行计划查看当前优化器类型
explain select 1;
# 打开/关闭GPORAC
set optimizer=on;
set optimizer=off;
复制代码
新建DB和USER
# 新建一个测试用用户
drop user if exists demo;
create user demo password 'demo';
# 新建一个测试用DB并分配给指定用户
drop database if exists demo;
create database demo owner=demo;
# 修改用户密码
alter user demo password 'xxx';
# 切换到新建用户
\connect demo demo mdw
# 新建Schema
drop schema if exists s01 cascade;
create schema s01;
set search_path to s01;
复制代码
创建只读用户
在GP下创建一个只读用户的流程是
- 建立用户
- 赋予给定DB的连接权限
- 赋予给定Schema的使用权限
- 赋予给定Table的访问权限
备注:因为我们想要控制,所以这里使用的是针对每一个表的显式授权。如果要求不那么严格,可以使用默认授权让新建的表自动获得访问权限。
# 新建一个测试用用户(gpadmin用户执行)
drop user if exists demoread;
create user demo password 'demo';
# 赋予、取消给定DB的连接权限(DB所有者执行,这里是demo用户执行)
grant connect on database demo to demoread;
revoke connect on database demo from demoread;
# Schema和Table的权限操作用下面语句生成,然后执行
# (DB所有者执行,这里是demo用户执行)
-- 构造对指定schema下所有表的grant、revoke语句
select
'grant usage on schema ' || pn.nspname || ' to ' || u.uname || ' ;' as schema_grant,
'revoke usage on schema ' || pn.nspname || ' from ' || u.uname || ' ;' as schema_revoke,
'grant select on ' || pn.nspname || '.' || pc.relname || ' to ' || u.uname || ' ;' as table_grant,
'revoke select on ' || pn.nspname || '.' || pc.relname || ' from ' || u.uname || ' ;' as table_revoke
from pg_class pc,
pg_namespace pn,
(select 'demoread' as uname) as u -- 提供:给定被授权用户名
where pc.relnamespace = pn.oid
and pc.relkind in ('r', 'v', 'S')
and pn.nspname in ('s01','s02') -- 提供:授权schema
order by pn.nspname, pc.relname
;
复制代码
附录:源代码编译安装
根据官方安装手册指导进行操作。
编译准备工作
#### 获取源代码
git clone https://github.com/greenplum-db/gpdb.git
#### 获取指定版本
cd gpdb
git checkout xxxx
#### 安装CentOS依赖包
./README.CentOS.bash
# 这一步安装conan依赖包的过程中,有个pyparsing包失败,通过强制手工安装这个包进行了修复
pip install --ignore-installed pyparsing
#### 软连接cmake3
ln -sf /usr/bin/cmake3 /usr/local/bin/cmake
#### 配置动态链接库
vi /etc/ld.so.conf
# 内容如下
include ld.so.conf.d/*.conf
include /usr/local/lib
include /usr/local/lib64
#### 解决后面gporca版本不能识别的问题 configure: error: Your ORCA version is expected to be 2.XX.XXX
vi /etc/ld.so.conf.d/usrlocallib.conf
# 内容如下
/usr/local
/usr/local/lib
/usr/local/lib64
#### 刷新动态链接库缓存
ldconfig
复制代码
编译GPORCA
#### 安装手册执行
cd depends
./configure
make
make install_local
cd ..
复制代码
编译安装GPDB
# 设置编译环境,指定目标目录 /usr/local/greenplum-db
./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/greenplum-db
# 编译和安装
make -j8
make -j8 install
作者:wait4friend
链接:https://juejin.cn/post/6844903657813573645