Install and Configure Greenplum

2018-01-18

CentOS7环境依赖

更新系统环境:

1
yum update

一些开发者工具:

1
yum group install 'Development Tools'

安装Greenplum依赖:
CentOS7环境

通过rpm安装可以不手动安装CentOS.bash中的依赖(暂未测试
‘Development Tools’是一系列开发者工具,不一定要下载
之前由于是使用bin包,需要手动添加配置,包括orca等,搞得头大
建议安装,毕竟是开发者环境(省去各种头疼

Greenplum相关系统参数

内存

官方文档表示运行greenplum需要16G内存,实际上启动服务需要的内存不需要16g
具体数值可能为4G(暂未实验过),如果遇到unable to allocate memory等为题
尝试分配更大的swap区

如果数据库服务尝试使用swap将大幅降低性能

新建swap分区:

1
parted /dev/dev_name

进入分区功能,输入:

1
print

查看分区状态,以了解设备可用的空间,然后执行以下指令进行分区:

1
mkpart linux-swap start-point end-point

由于我使用的是1G1核的最低云服务器配置,分配了5G的swap空间
接下来退出parted,建立swap分区:

1
mkswap /dev/dev_nameN

通过free指令可以查看内存状态
挂载swap分区的指令是:

1
swapon /dev/dev_nameN

查看swap分区详细信息:

1
swapon -s

如果要添加为开机挂载,打开/etc/fstab添加挂载信息:

1
/dev/dev_nameN  swap  swap default  0 0

禁用selinux与防火墙

所有的greenplum节点都应该禁用selinux和防火墙

检查selinux状态

1
sestatus

如果不是禁用状态,在/etc/selinux/config文件中将SELINUX项值改为disabled

CentOS7中禁用防火墙的指令是:

1
systemctl stop firewalld

禁止开机启动:

1
systemctl disable firewalld

Linux系统设置

打开文件/etc/sysctl.conf,修改或修改配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
net.ipv4.tcp_max_syn_backlog = 4096
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
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_tw_recycle = 1
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
net.ipv4.ip_forward = 0

/etc/security/limits.conf文件中修改或添加:

1
2
3
4
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

*不可省略

硬盘分区

Greenplum要求硬盘分区为xfs格式
硬盘分区:

1
parted /dev/dev_name

通过print查看该硬盘的分区状态
创建分区:

1
mkpart name start_point end_point

创建文件系统:

1
mkfs.xfs /dev/dev_nameN

挂载指令:

1
mount -o rw,nodev,nobarrier,noatime,inode64,allocsize=16M -t xfs /dev/dev_nameN /target

开机挂载配置:

1
/dev/dev_nameN /target xfs rw,nodev,nobarrier,noatime,inode64,allocsize=16M 0 0

挂载后通过:

1
mount | grep '/dev/dev_nameN'

重要

查看硬盘挂载选项,并且在$GPHOME/etc/gpcheck.cnf文件中修改相应挂载选项
(建议备份gpcheck.cnf文件)
CentOS7系统有默认挂载选项,配置了六个之后还有两个隐藏挂载选项,如果不修改gpcheck.cnf会遇到错误
($GPHOME在gpdb安装完成后,执行source之后可以查看)
gpcheck时,将会检测到/bootswap区等,的mount选项错误,只要不是master的问题,就忽略这些错误

修改分区read-ahead值:

1
2
/sbin/blockdev --getra /dev/dev_name
/sbin/blockdev --setra 16384 /dev/dev_name

CentOS7 I/O scheduler

官方文档推荐使用deadline scheduler policy
更改 I/O scheduler配置:

1
grubby --update-kernel=ALL --args="transparent_hugepage=never"

通过以下指令查看kernel参数:

1
grubby --info=ALL

CentOS7 Transparent Huge Pages (THP)

禁用CentOS7的THP功能:

1
grubby --update-kernel=ALL --args="elevator=deadline"

重启后通过

1
cat /sys/kernel/mm/*transparent_hugepage/enabled

查看THP是否为always madvise [never]

系统用户

Disable IPC object removal for RHEL 7.2 or CentOS 7.2. The default systemd setting RemoveIPC=yes removes IPC connections when non-system users log out. This causes the Greenplum Database utility gpinitsystem to fail with semaphore errors.
Create the gpadmin user as a system account. For the useradd command, the -r option creates a user as a system user and the -m option creates a home directory for the user.

Note: When you run the gpseginstall utility as the root user to install Greenplum Database on host systems, the utility creates the gpadmin user as a system account on the hosts. See Installing and Configuring Greenplum on all Hosts

Note: If you are setting up a single node system, you can still use gpseginstall to perform the required system configuration tasks on the current host. In this case, the hostfile_exkeys should have only the current host name.

官方文档上说,RemoveIPC=yes将导致gpinitsystem失败。可以通过建立一个gpadmin用户或将RemoveIPC设置为no来解决。
/etc/systemd/logind.conf文件中修改RemoveIPC
在进行gpseginstall时,将会在host上创建一个gpadmin用户。
在只有一个节点的gp系统中,host文件只添加当前host可以让gpseginstall来配置系统。

应当使用useradd -r -m gpadmin来创建用户,还要添加相应的gpadmin用户组。
-r代表添加系统用户,系统用户不创建用户目录,因此使用-m为用户创建目录

gpinstall时要求输入节点主机的密码,发现输入都是错误,于是在子节点手动创建gpadmin用户。暂未清楚原因。

SSH MaxStartups

一些Greenplum的功能可能超出host最大连接值
在/etc/ssh/sshd_config或/etc/sshd_config文件中,修改改最大值为200:
MaxStartups a:b:200
然后重启sshd服务:

1
systemctl restart sshd_config

手动配置kernel

如果grubby命令没有更新kernel参数,需要手动更新所有kernel
/etc/default/grub更改GRUB_CMDLINE_LINUX参数:

1
2
3
4
5
6
7
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never elevator=deadline"
GRUB_DISABLE_RECOVERY="true"

然后运行grub2-mkconfig命令更新kernel参数:

1
grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统

gpadmin用户ssh-key

/home/gpadmin/.ssh/目录下的ssh相关文件会影响greenplum的安装,确认没有底下没有文件。

rpm安装Greenplum Database

下载

pivotal下载gdbp
需要进行账号注册
需要选择好相应的操作系统
CentOS7对应RHEL7

安装

运行:

1
rpm -Uvh greenplum-db-<version>-<platform>.rpm

安装Greenplum
安装完成后需要修改文件所有者:

1
2
chown -R gpadmin /usr/local/greenplum*
chgrp -R gpadmin /usr/local/greenplum*

在root权限下,运行:
source /usr/local/greenplum-db/greenplum_path.sh
将Greenplum指令添加到系统变量
由于没有将起添加至~/.bashrc下,每次连接到terminal时,要重新执行source

greenplum_path.sh脚本问题

Greenplum自带python,并且在/usr/local/greenplum-db/greenplum_path.sh脚本中修改了默认python
将导致yum以及pip都不可用,进而产生更多问题
打开该文件,注释掉与修改python默认路径有关的语句:

1
2
3
4
5
#if [ -x $GPHOME/ext/python/bin/python ]; then
# PYTHONHOME="$GPHOME/ext/python"
#fi
...
#export PYTHONHOME

安装至节点

在root权限下,创建hostssegments文件
hosts包含所有的节点,segments只包含从节点()
一行只能填写一个hosts
(可以选择任何路径存放,只要方便操作)

接下来,通过gpseginstall将Greenplum安装到各个节点:

1
gpseginstall -f /path/to/hosts

检验安装

安装完成后,通过指令:

1
su gpadmin

登陆gpadmin用户
使用Greenplum环境变量:

1
source /usr/local/greenplum-db/greenplum_path.sh

交换节点密匙:

1
gpssh-exkeys -f hosts

(同前面的ssh-key交换问题,如果有旧的key会导致失败)
通过gpssh指令检查安装是否成功,例如:

1
gpssh -f hosts -e ls -l $GPHOME

列出了Greenplum下的文件则表示安装成功

Greenplum数据存储

创建master节点存储路径:

1
mkdir -d /data/master

修改所有者:

1
chown gpadmin /data/master

可以通过gpssh在standby master上建立存储路径,-h选项可以指定目标host,并且一条指令可以添加多个-h选项
创建目录需要root权限
创建segment节点存储路径:

1
2
3
4
5
source /usr/local/greenplum-db-5.0.x.x/greenplum_path.sh
gpssh -f segments -e 'mkdir /data/primary'
gpssh -f segments -e 'mkdir /data/mirror'
gpssh -f segments -e 'chown gpadmin /data/primary'
gpssh -f segments -e 'chown gpadmin /data/mirror'

设置MASTER_DATA_DIRECTORY

MASTER_DATA_DIRECTORY/path/to/master/pgseg-1

检验系统设置

Greenplum提供了gpcheck用来检验集群中主机的的设置是否符合要求
要运行gpcheck,首先以root用户登陆
sourcegreenplum_path.sh文件:

1
source /usr/local/greenplum-db/greenplum_path.sh

接着创建一个host文件包含了要检验的主机(包括master,standby master以及segment)
每一行只能有一个host别名,并且不能有空格
然后运行:

1
gpcheck -f hostfile_gpcheck -m master_hostname -s standby_master_hostname

默认的配置文件在$GPHOME/etc目录下
使用--config /path/to/config_file指定其他配置文件
如果系统提示表示16m大小与16384k不想等,调整配置文件重的参数
检测会花费一点时间,如果通过了检测,就能初始化数据库系统了

更多配置查看官方文档Configuring Your Systems and Installing Greenplum

Overwhelmed

..-. . -.