2023.9月greenplum 7.0.0正式发布,准备安装试用一下。官方支持的系统是rockylinux 8,而我手头只有rockylinux 9.2,就尝试安装了一下。以下为踩坑记录。

*centos已经不包含在greenplum7.0.0的支持列表中,centos8已经停止维护,centos7到2024年也会停止维护,推荐rockylinux。关于rockylinux可以参考rockylinux介绍

greenplum官方说明

节点准备

配置hosts等
用户:root

/etc/hosts配置

master & segments

192.168.56.12 gp7-master gp7-master
192.168.56.13 gp7-seg1 gp7-seg1
192.168.56.14 gp7-seg2 gp7-seg2

gpadmin用户配置

master & segments
用户:gpadmin

参考用户配置
gp提供了setup_gpadmin_user.bash用于配置gpadmin用户,但是不太灵活,因此手动配置。

ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

编译准备

编译依赖安装、系统配置

master & segments
*实际上segment不需要编译,需要安装的内容更少,但是GP官方的依赖安装脚本为编译+系统配置一体,并没有单独将运行期的依赖剥离出来。懒得折腾就一起安装了。
用户:root或者有sudo权限的用户

参考依赖安装说明
greenplum提供了一些主流系统的依赖安装脚本,README.Rhel-Rocky.bash对应rockylinux 8。

修改安装包列表
由于rockylinux8中python版本默认为3.6,而greenplum7.0.0需要依赖python3.9,因此会指定安装python3.9对应的软件包。而rockylinux9中python版本默认为3.9,安装的软件包不需要指定对应python3.9的版本。因此需要将脚本中对应的软件版本进行调整。

-INSTALL_PKGS="apr-devel bison bzip2-devel cmake3 epel-release flex gcc gcc-c++ krb5-devel libcurl-devel libevent-devel libkadm5 libxml2-devel libzstd-devel openssl-devel python39 python39-devel python39-psutil python3-pip perl-ExtUtils-MakeMaker.noarch perl-ExtUtils-Embed.noarch readline-devel rsync xerces-c-devel zlib-devel python3-psutil python3-pyyaml"
+INSTALL_PKGS="apr-devel bison bzip2-devel cmake3 epel-release flex gcc gcc-c++ krb5-devel libcurl-devel libevent-devel libkadm5 libxml2-devel libzstd-devel openssl-devel python3 python3-devel python3-psutil python3-pip perl-ExtUtils-MakeMaker.noarch perl-ExtUtils-Embed.noarch readline-devel rsync xerces-c-devel zlib-devel python3-psutil python3-pyyaml"

屏蔽python依赖检查
rockylinux9中python依赖包的版本高于greenplum7.0.0中指定的版本,不需要进行检查。

-pip3.9 install -r python-dependencies.txt
+## pip3.9 install -r python-dependencies.txt

root下执行依赖安装脚本

./README.Rhel-Rocky.bash

其它依赖安装

上述Greenplum提供的依赖并不全面,在后续configure阶段还会因为缺少一些依赖而报错,需要再安装更多的依赖。

libyaml-devel安装
configure会报告libyaml相关问题,原因为configure中会编译一段测试程序,其中会引用libyaml中包含的头文件,从而确定libyaml-devel是否存在,由于libyaml-devel默认没有安装,因此会报错。

libyaml-devel并不在默认enable的安装源中,而是在crb中(通过谷歌搜索到crb的安装源中有libyaml-devel),需要首先enable crb再安装。

## 查看repolist状态,发现crb是disabled
dnf repolist all|grep crb
## enable crb
dnf config-manager --set-enabled crb
dnf repolist all|grep crb

## 当前安装源中已经可以搜索到libyaml-devel
dnf search libyaml-devel
dnf install libyaml-devel.x86_64
## 最好关闭crb,以防止今后遇到一些软件包依赖问题
dnf config-manager --set-disabled crb

perl-core安装
make时候会报perl-core相关错误,如下安装

perldoc -l FindBin
yum list installed |grep perl-core
dnf install perl-core

编译

编译
master

./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/gpdb
make -j8

安装准备

创建安装目录

master&segment

[root]# mkdir -p /usr/local/gpdb
[root]# chown -R gpadmin:gpadmin /usr/local/gpdb

互信配置

GP依赖互信,也方便后续segment安装。
参考Enabling Passwordless SSH

1-n互信
master

source /usr/local/gpdb/greenplum_path.sh
ssh-copy-id gp7-seg1
ssh-copy-id gp7-seg2

n-n互信
master

[gpadmin]$ cat ~/hostfile_exkeys
gp7-master
gp7-seg1
gp7-seg2
[gpadmin]$ gpssh-exkeys -f ~/hostfile_exkeys

安装

master安装

master

make -j8 install

segment安装

master
*互信配置好了,再进行rsync,省得输入密码了

rsync -avz -e "ssh" /usr/local/gpdb/ gpadmin@gp7-seg1:/usr/local/gpdb/
rsync -avz -e "ssh" /usr/local/gpdb/ gpadmin@gp7-seg2:/usr/local/gpdb/

准备数据目录

参考Creating the Data Storage Areas

创建master数据目录

master
用户:root

mkdir -p /data/coordinator
chown gpadmin:gpadmin /data/coordinator

创建master standby数据目录

可选

创建segment数据目录

all segments
用户:root

mkdir -p /data/primary
mkdir -p /data/mirror
chown -R gpadmin /data/primary
chown -R gpadmin /data/mirror

*也可以参考Creating Data Storage Areas on Segment Hosts的方法在master上远程创建,但是实际上面配置互信是gpadmin用户下互信,root下没有配置,因此会出现失败。不确定是我对官方文档理解是否有偏差。

安装集群

参考Initializing a Greenplum Database System

master
用户:gpadmin

准备环境变量

source /usr/local/gpdb/greenplum_path.sh

创建segment节点列表文件

mkdir -p ~/gpconfigs/
vi ~/gpconfigs/hostfile_gpinitsystem
[gpadmin@gp7-master ~]$ cat ~/gpconfigs/hostfile_gpinitsystem
gp7-seg1
gp7-seg2
[gpadmin@gp7-master ~]$

创建GP初始化配置文件

[gpadmin@gp7-master ~]$ cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config ~/gpconfigs/
[gpadmin@gp7-master ~]$ vi ~/gpconfigs/gpinitsystem_config

通常需要修改如下field与实际环境一致
对应1master无standby,2segment host,4 segment instances,默认库postgres

[gpadmin@gp7-master ~]$ vi ~/gpconfigs/gpinitsystem_config
## 这里是segment的数据目录,()内数量决定了每个segment host上的segment实例数量,如下面每个segment host上有两个实例
declare -a DATA_DIRECTORY=(/data/primary /data/primary)
## 与master的hostname
COORDINATOR_HOSTNAME=gp7-master
## 与master的数据目录一致
COORDINATOR_DIRECTORY=/data/coordinator

其它说明

DATA_DIRECTORY指定一个segment host上的各个segment对应的数据目录。
个数决定了在一个host上起的segment数量,每个segment对应一个postgreSQL数据库实例。如(/data/primary /data/primary)对应两个segment实例。会在该目录下新建目录作为数据目录,如
[gpadmin@dw1-seg1 vagrant]$ ls /data/primary/
gpseg0  gpseg1
还会针对同一个host上指定多个网口的情形进行合理绑定。前提这些网口对应IP在hostfile_gpinitsystem中暴露出来。

[segment数量设置](https://developer.aliyun.com/ask/54601?spm=a2c6h.13159736)
和CPU核数,块设备数量,RAID卡通道数量,网卡数量都有关系。
要做到均衡配比,资源的利用才能最合理。
你可以这样来分配,例如CPU核数乘以0.8作为segment数量,然后再均匀分配SEG对应的块设备,网卡,RAID卡,

PORT_BASE和[系统配置](https://segmentfault.com/a/1190000043041096)中的net.ipv4.ip_local_port_range对应

DATABASE_NAME默认不设置,只会创建默认的postgres库。指定后会自动创建指定的库,如dw1.

MIRROR_DATA_DIRECTORY指定mirror,默认没有打开

有效的部分样例如下

SEG_PREFIX=gpseg
PORT_BASE=6000
declare -a DATA_DIRECTORY=(/data/primary /data/primary)
COORDINATOR_HOSTNAME=gp7-master
COORDINATOR_DIRECTORY=/data/coordinator
COORDINATOR_PORT=5432
TRUSTED_SHELL=ssh
ENCODING=UNICODE

执行集群初始化

master
用户:gpadmin

[gpadmin@gp7-master ~]$ gpinitsystem -c ~/gpconfigs/gpinitsystem_config -h ~/gpconfigs/hostfile_gpinitsystem

# 选择y

环境变量设置

master
用户:gpadmin
可以放到单独的文件myenv或者.bashrc

source /usr/local/gpdb/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=postgres
# 如果DATABASE_NAME指定了数据库名,如dw1
# export PGDATABASE=dw1

常用命令

登陆数据库

[gpadmin@gp7-master gp7]$ source myenv
[gpadmin@gp7-master gp7]$ psql
psql (12.12)
Type "help" for help.

启停集群

# stop所有实例
gpstop -a
gpstop -M fast -a

# start所有实例
gpstart -a

黑暗森林
12 声望2 粉丝

弱小和无知不是生存的障碍,傲慢才是!


引用和评论

0 条评论