系统设置(所有节点)
系统参数
共享内存
网络
用户限制
修改或添加/etc/sysctl.conf ,使用sysctl -p 命令即时生效

xfs_mount_options =rw,noatime,inode64,allocsize=16m
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.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

配置 /etc/security/limits.conf文件

  • soft nofile 65536

  • hard nofile 65536

  • soft nproc 131072

  • hard nproc 131072

设置磁盘访问 IO调度策略
echo deadline > /sys/block/sda/queue/scheduler
echo deadline > /sys/block/fd0/queue/scheduler
echo deadline > /sys/block/hdc/queue/scheduler

设置预读块的值为 16384 如果挂载硬盘 XFS文件系统 值为65536

#/sbin/blockdev --getra /dev/sda
#/sbin/blockdev --setra 16384 /dev/sda
#/sbin/blockdev --setra 16384 /dev/sda1
#/sbin/blockdev --setra 16384 /dev/sda2
#/sbin/blockdev --setra 16384 /dev/sda3

blockdev --getra /dev/sda

blockdev --getra /dev/sda1

blockdev --getra /dev/sda2

修改/etc/hosts,添加如下内容
192.168.10.133 Mdw
192.168.10.132 Sdw

配置了这个文件之后,一定要同时修改 /etc/sysconfig/network这个文件如下(所有机器都要修改):

NETWORKING=yes
HOSTNAME=Mdw #其他的机子将 -1 改为 -2 -3 ...

关闭防火墙
如果想开启防火墙,就需要了解Greenplum所有端口信息即可;
#systemctl stop firewalld
#systemctl disable firewalld

sevice iptables stop #停止
chkconfig iptables off #禁用

关闭SELinux

#setenforce 0
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config


-------Greenplum依赖包
sudo yum -y install rsync coreutils glib2 lrzsz sysstat e4fsprogs xfsprogs ntp readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc make smartmontools flex bison perl perl-devel perl-ExtUtils* OpenIPMI-tools openldap openldap-devel logrotategcc-c++ python-py curl-devel pam

#sudo yum install apr-devel libevent-devel libyaml-devel
#wget https://bootstrap.pypa.io/get-pip.py
#sudo python get-pip.py
#sudo pip install psi lockfile paramiko setuptools epydoc
#sudo pip install --upgrade setuptools
----------------------------------------------------第二种安装依赖包方式
为yum添加国内镜像源
#cd /etc/yum.repos.d
#sudo wget -nc http://mirrors.aliyun.com/repo/Centos-6.repo
将阿里镜像源设为默认源
#sudo mv CentOS-Base.repo CentOS-Base.repo.bak
#sudo cp Centos-6.repo CentOS-Base.repo
清除yum机制的本地缓存
#sudo yum clean all
#sudo yum makecache
#sudo yum list
#sudo yum -y update

使用yum安装依赖的系统库
#sudo yum install curl-devel bzip2-devel python-devel openssl-devel

使用pip安装以来的Python库
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install psi lockfile paramiko setuptools epydoc conan


安装并使用gcc6.3作为编译器
自带的gcc4.8.5编译会报语法错误,所以安装更高版本的编译器
#sudo yum install centos-release-scl -y
#sudo yum install devtoolset-6-gcc devtoolset-6-gcc-c++
#scl enable devtoolset-6 bash
#gcc --version

添加LIB库路径
向/etc/ld.so.conf文件中加入下面的路径
/usr/local/lib
/usr/local/lib64
#sudo ldconfig

安装cmake3.8.2
GPORCA需要Cmake3.1以上才能编译

wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz

tar xzvf cmake-3.8.2.tar.gz

cd cmake-3.8.2

./bootstrap

make

sudo make install

下载并安装gp-xerces

cd ~

mkdir orca

cd orca

git clone https://github.com/greenplum-db/gp-xerces.git

cd gp-xerces

./configure

make

sudo make install

下载并安装re2c

进入http://re2c.org/install/install.html下载re2c-1.0.3.tar.gz,拷贝到~/orca

tar -xvzf re2c-1.0.3.tar.gz

cd re2c-1.0.3

./configure

make

sudo make install

下载并安装ninja

cd ~/orca

git clone https://github.com/ninja-build/ninja.git

cd ninja

./configure.py --bootstrap

下载并安装GPORCA

下载https://github.com/greenplum-db/gporca/archive/v2.51.4.tar.gz

cd ~/orca
tar -xvzf v2.51.4.tar.gz
cd gporca-2.51.4
export PATH=~/orca/ninja:$PATH
cmake -GNinja -H. -Bbuild
sudo ninja install -C build
cd build执行ctest命令进行检查

如果最后输出类似如下结果:
100% tests passed, 0 tests failed out of 119
Total Test time (real) = 165.21 sec
表示成功。注意gpdb5.3.0支持的gporca版本是2.51.XXX,所以不要下载更新版本的GPORCA(例如2.53.XXX)


使用缺省的gporca优化器编译GPDB

编译GPDB源码,安装到 /home/smart/gpdb_gporca.530 目录下
从github上下载GreenPlum最新版5.3.0的源码:
https://github.com/greenplum-db/gpdb/archive/5.3.0.tar.gz

$ cd ~/gpdb-5.3.0/
$ ./configure --with-openssl --with-python --enable-debug --enable-depend --with-perl --with-libxml --with-gssapi --prefix=/home/smart/gpdb_gporca.530
$ make
$ make install

注意:make的过程中可能会报错缺少bison、flex,用yum添加即可,添加完后需要重新configure再make。
./configure --with-perl --with-python --with-libxml --with-gssapi --disable-orca --prefix=/usr/local/gpdb
make
make install


-------------创建gpadmin用户

usradd gpadmin

passwd gpadmin


--------------设置gpadmin用户环境变量
在 /home/gpadmin/.bashrc 和 /home/gpadmin/.bash_profile文件最后添加下面数据

source /usr/local/gpdb/greenplum_path.sh

设置完毕后记得source 下立即生效;

source /home/gpadmin/.bashrc

source /home/gpadmin/.bash_profile


-----------在所有主机上初始化配置Greenplum
获取环境参数

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

#echo $PATH


------------准备节点服务器信息文件
创建主机文件 all_host和 seg_host
文件内容:
Mdw
Sdw1
Sdw2


----------------建立节点服务器间的信任
以root用户

gpssh-exkeys -f /home/gpadmin/all_host

按照提示录入 root密码,记住这一步不可以录入gpadmin密码,因为批量安装时需要在/usr/local下创建目录,需要root权限;


--------------批量安装
以root用户

gpseginstall -f /home/gpadmin/all_host -u gpadmin -p gpadmin


--------------检查批量安装情况

su - gpadmin

source /usr/local/gpdb/greenplum_path.sh

#gpssh-exkeys -f /home/all_host 验证 gpadmin 无密码登陆

使用 gpssh 命令确认是否可以在不提示没密码的情况下登陆所有安装了GP软件的主机,使用all_host文件,该文件包含所有主机
使用 gpssh 命令时 各节点 安装目录用户及用户组都用过是 gpadmin账户

gpssh -f /home/gpadmin/all_host -e ls -l $GPHOME

返回结果中各节点目录一直且不需要密码,目录权限都是gpadmin 安装成功


-------------创建目录;在各节点;

#Mdw
用 gpadmin用户

mkdir -p /home/gpadmin/gpdata/gpmaster

#Sdw1 Sdw2

mkdir -p /home/gpadmin/gpdata/gpdatap

mkdir -p /home/gpadmin/gpdata/gpdatam


------------参数检测;还有网络/IO检测;

gpcheck -f /home/gpadmin/all_host -m Mdw -s Sdw


-------------初始化Greenplum

初始配置

使用 gpadmin用户

cp /usr/local/gpdb/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpinitsystem_config

chmod 664 gpinitsystem_config

------设置配置文件如下

ARRAY_NAME="Greenplum"

SEG_PREFIX=gpseg

PORT_BASE=40000

declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap)

MASTER_HOSTNAME=Mdw

MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster

Port number for the master instance.

MASTER_PORT=2345

Shell utility used to connect to remote hosts.

TRUSTED_SHELL=/usr/bin/ssh

#ENCODING=UTF8

Maximum log file segments between automatic WAL checkpoints.

CHECK_POINT_SEGMENTS=8

ENCODING=UNICODE

MIRROR_PORT_BASE=50000

REPLICATION_PORT_BASE=41000

MIRROR_REPLICATION_PORT_BASE=51000

declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam)

MACHINE_LIST_FILE=/home/gpadmin/seg_host


---------执行初始化命令

gpinitsystem -c /home/gpadmin/gpinitsystem_config -h /home/gpadmin/seg_host


-----------启动数据库

gpstart


------------查看数据启动状态

gpstate -m

  1. 在执行“gpssh-exkeys -f hostlist”配置免密码登录时出现“[ERROR] ssl-keygen failed:”
    解决方案: 执行 unset OPENSSL_CONF ;在执行命令可以避免

  2. 执行“ gpseginstall -f /home/gpadmin/config/hostlist -u gpadmin -p li0924”结果失败;
    分析:查看日志信息是“tar cf greenplum-db438.tar greenplum-db438”这步出错;很明显是没权限执行;前面有提示
    解决方案:用root用户执行;或者直接手动去操作;这步骤就是把该目录复制到各个segment节点;避免在segement再进行安装

---------------检查各节点开启端口

netstat -nplt | grep grep postgres


--------------设置环境变量
你必须在Greenplum数据库主站(和备用主站)上配置环境。您的$ GPHOME目录中提供了一个greenplum_path.sh文件,其中包含了Greenplum数据库的环境变量设置。您可以在gpadmin用户的启动shell配置文件(如.bashrc)中为此文件提供源。

Greenplum数据库管理实用程序还要求设置MASTER_DATA_DIRECTORY环境变量,这应该指向由gpinitsystem程序在主数据目录位置创建的目录。

source /usr/local/gpdb/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/master/gpseg-1
可选 客户端会话环境变量
export PGPORT=2345
export PGUSER=gpadmin
export PGDATABASE=gptest
使其生效并拷贝到 备主机
$ source ~/.bashrc
$ scp ~/.bashrc Sdw:~/.bashrc


-------------操作数据库
#访问数据库
$ psql --help

#列出所有数据库
$ psql -l

--可以看到当前有4个数据库,下面演示在本地登录postgres数据库,登录本地数据库可以不指定-h参数,如果端口使用默认的5432,也不需要指定-p参数,默认使用gpadmin管理员用户登录数据库,如果使用gpadmin用户登录,也可以不指定-U参数。
$ psql -d postgres

help