安装是以一个主节点,三个子节点进行安装。gp是在github上下载的5.7的源码。地址https://github.com/greenplum-db/gpdb/tree/5.7.0。html
这里使用1个master,3个segment的集群,ip为python
196.168.12.101linux
196.168.12.102c++
196.168.12.103git
196.168.12.104github
经过vi /etc/hostname 进行修改数据库
各个节点修改为相应的名称,分别为master,slave1.slave2.slave3,例bootstrap
master
而后重启电脑bash
这里主要是为了能够实现经过名称来查找相应的服务器服务器
[root@master ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.12.101 master 192.168.12.102 slave1 192.168.12.103 slave2 192.168.12.104 slave3
[root@master ~]# vi /etc/sysconfig/network # Created by anaconda NETWORKING=yes
接下来就能够经过测试一下是否能够经过ping主机名来找到对应的服务器
[root@master ~]# ping slave1 PING slave1 (192.168.12.102) 56(84) bytes of data. 64 bytes from slave1 (192.168.12.102): icmp_seq=1 ttl=63 time=0.134 ms 64 bytes from slave1 (192.168.12.102): icmp_seq=2 ttl=63 time=0.132 ms 64 bytes from slave1 (192.168.12.102): icmp_seq=3 ttl=63 time=0.133 ms 64 bytes from slave1 (192.168.12.102): icmp_seq=4 ttl=63 time=0.133 ms 64 bytes from slave1 (192.168.12.102): icmp_seq=5 ttl=63 time=0.132 ms ^C --- slave1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4000ms rtt min/avg/max/mdev = 0.132/0.132/0.134/0.014 ms
[root@master ~]# groupadd -g 530 gpadmin [root@master ~]# useradd -g 530 -u530 -m -d /home/gpadmin -s /bin/bash gpadmin [root@master ~]# passwd gpadmin Changing password for user gpadmin. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully.
[root@master ~]# vi /etc/sysctl.conf 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 [root@master~]# sysctl -p(让配置生效)
[root@master ~]# vi /etc/security/limits.conf # End of file * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
[root@master~]#systemctl disable firewalld [root@master~]#systemctl stop firewalld
除此以外
[root@master ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
[root@master ~]# vi config.sh echo deadline > /sys/block/sda/queue/scheduler echo deadline > /sys/block/sr0/queue/scheduler /sbin/blockdev --getra /dev/sda /sbin/blockdev --setra 16384 /dev/sda /sbin/blockdev --getra /dev/sda sysctl vm.swappiness=0 cat /proc/sys/vm/swappiness
而后在每次系统重启后,以root用户执行
[root@master ~]#source config.sh
[root@master ~]# vi /etc/ld.so.conf.d/usrlocallib.conf /usr/local /usr/local/lib /usr/local/lib64
(1)设置master为主服务器,开启nptd服务(主服务器)
[root@master ~]#vi /etc/ntp.conf
如图:
[root@master ~]# systemctl start ntpd.service #启动服务 [root@master ~]# systemctl enable ntpd.service #开机自启动
(2)、主服务器开启ntp服务器之后,子节点就不须要开启了,由于当server与client之间的时间偏差过大时(多是1000秒),处于对修改时间可能对系统和应用带来不可预知的问题,NTP将中止时间同步!因此若是发现NTP启动以后时间并不进行同步时,应该考虑到多是时间差过大引发的,此时须要先手动进行时间同步!因此直接使用定时手动同步的方式就能够了。(子节点)
[root@slave1 data]# crontab -e 0-59/10 * * * * /usr/sbin/ntpdate master crontab: installing new crontab [root@slave1 data]# crontab -l 0-59/10 * * * * /usr/sbin/ntpdate master
安装以前先升级yum,而后安装epel扩展源:
[root@master ~]# yum update [root@master ~]# yum -y install epel-release
而后再其余依赖库
[root@master ~]#yum install –y apr-develzuot libevent-devel libxml2 libxml2-devel git.x86_64 gcc.x86_64 gcc-c++.x86_64 \ ccache.x86_64 readline.x86_64 readline-devel.x86_64 bison.x86_64 bison-devel.x86_64 flex.x86_64 flex-devel.x86_64 \ zlib.x86_64 zlib-devel.x86_64 openssl.x86_64 openssl-devel.x86_64 pam.x86_64 pam-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64 \ bzip2-libs.x86_64 bzip2.x86_64 bzip2-devel.x86_64 libssh2.x86_64 libssh2-devel.x86_64 python-devel.x86_64 python-pip.noarch 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 logrotate python-py gcc-c++ libevent-devel apr-devel libcurl-devel \ bzip2-devel libyaml-devel apr-util-devel net-tools wget git re2c python-pip
安装pip须要的包
[root@master ~]# python -m pip install --upgrade pip [root@master ~]# pip install lockfile paramiko setuptools epydoc psi psutil conan
默认编译的为使用postgres优化器,本文是使用orca优化器安装的。
[root@master home]# wget https://cmake.org/files/v3.11/cmake-3.11.0.tar.gz [root@master home]# tar -zxvf cmake-3.11.0.tar.gz [root@master home]# cd cmake-3.11.0 [root@master cmake-3.11.0]# ./bootstrap [root@master cmake-3.11.0]# gmake [root@master cmake-3.11.0]# gmake install [root@master cmake-3.11.0]# cmake --version cmake version 3.11.0
安装re3c是因为配置ninja时须要
[root@master home]# wget https://jaist.dl.sourceforge.net/project/re2c/1.0.1/re2c-1.0.1.tar.gz [root@master home]# tar -zxvf re2c-1.0.1.tar.gz [root@master home]#cd re2c-1.0.1 [root@master re2c-1.0.1]#./configure [root@master re2c-1.0.1]#make [root@master re2c-1.0.1]#make install [root@master re2c-1.0.1]#re2c -v re2c 1.0.1
[root@master home]# git clone https://github.com/ninja-build/ninja.git [root@master ninja]# cd ninja [root@master ninja]# ./configure.py --bootstrap
[root@master ninja]# cp ninja /usr/local/bin/
安装最新版本就能够了
[root@master home]# git clone https://github.com/greenplum-db/gp-xerces [root@master home]# mkdir gp-xerces/build [root@master build]# cd gp-xerces/build [root@master build]# ../configure [root@master build]# make -j 4 [root@master build]# make install--prefix=/usr/local
安装gporca须要知道你安装的greenplum的版本与之对应的版本,我这里是经过如今好了github上的 greenplum5.7的压缩包,而后传到了服务器上的,具体操做以下(这步查看版本的操做只须要在master上操做):
[root@master home]# unzip gpdb-5.7.0.zip [root@master home]# cat gpdb-5.7.0/depends/conanfile_orca.txt [requires] orca/v2.55.13@gpdb/stable [imports] include, * -> build/include lib, * -> build/lib
这里看到的红色的orca/2.55.13,因此咱们须要下载gporca的2.55.13的版本
[root@master home]# wget https://codeload.github.com/greenplum-db/gporca/zip/v2.55.13 [root@master home]# unzip gporca-2.55.13.zip [root@master home]# cd gporca-2.55.13 [root@master gporca-2.55.13]# cmake -GNinja -H. -Bbuild [root@master gporca-2.55.13]# ninja install -C build
待安装完成后,进入build目录,执行ctest命令进行检查若是最后输出相似以下结果就说嘛编译成功了:
[root@master build]# ctest 153/153 Test #153: gporca_test_CConstExprEvaluatorDXLTest .............. Passed 0.04 sec 100% tests passed, 0 tests failed out of 153 Total Test time (real) = 117.20 sec
[root@master home]# git clone https://github.com/boundary/sigar [root@master home]# cd sigar [root@master sigar]# mkdir build && cd build && cmake .. && make && make install
[root@maser ~]# mkdir /opt/greenplum-db [root@maser ~]# chown -R gpadmin:gpadmin /opt/greenplum-db
[root@maser ~]# mkdir /data/greenplum-db [root@maser ~]# chown -R gpadmin:gpadmin /data/greenplum-db
编译安装到了/opt/greenplum-db目录
[root@master home]# git clone https://codeload.github.com/greenplum-db/gpdb/zip/5.7.0 [root@master home]# cd gpdb-5.7.0 [root@master gpdb-5.7.0]# ldconfig [root@master gpdb-5.7.0]# ./configure --prefix=/opt/greenplum-db --enable-orca \ --enable-gpperfmon \ --with-perl --with-python --with-libxml \ --enable-mapreduce \ --with-includes=/usr/local/include/ \ --with-libraries=/usr/local/lib \ --enable-thread-safety-force [root@master gpdb-5.7.0]# make -j 32 [root@master gpdb-5.7.0]# make install
此时master上的greenplum安装成功了。可是以前咱们都是以root身份安装的,因此要将安装目录下的文件的全部者都修改成gpadmin
[root@master ~]# chown -R gpadmin:gpadmin /opt/greenplum-db
由于只在master上安装了greenplum,因此下面要将安装包批量发送到每一个segment上,才能算是整个greenplum集群完整安装了greenplum。下面的操做都是为了链接全部节点,并将安装包发送到每一个节点。
[root@master ~]# su gpadmin [gpadmin@master root]$ cd [gpadmin@master ~]$ mkdir conf [gpadmin@master ~]$ cd conf/ [gpadmin@master conf]$ vi hostlist master slave1 slave2 slave3 [gpadmin@master conf]$ vi seg_hosts slave1 slave2 slave3 [gpadmin@master conf]$ ls hostlist seg_hosts
必需用gpadmin身份来建立,按照上面的操做建立hostlist和seg_hosts 文件
[gpadmin@master ~]$ source /opt/greenplum-db/greenplum_path.sh [gpadmin@master ~]$ gpssh-exkeys -f /home/gpadmin/conf/hostlist [STEP 1 of 5] create local ID and authorize on local host [STEP 2 of 5] keyscan all hosts and update known_hosts file [STEP 3 of 5] authorize current user on remote hosts ... send to slave1 *** *** Enter password for slave1: ... send to slave2 ... send to slave3 [STEP 4 of 5] determine common authentication file content [STEP 5 of 5] copy authentication files to all remote hosts ... finished key exchange with slave1 ... finished key exchange with slave2 ... finished key exchange with slave3 [INFO] completed successfully
注意gpssh-exkeys命令使用的时候必定要用gpadmin身份,由于这个命令会生成ssh的免密码登陆的秘钥,在/home/gpadmin/.ssh这里。若是使用root身份使用gpssh-exkeys命令,那么生成的.ssh秘钥在root的home下面或者是在/home/gpadmin下面可是是root的全部者,若是以后使用gpadmin身份执行相应操做的时候就没有权限。
[gpadmin@master ~]# gpseginstall -f /home/gpadmin/conf/hostlist
我是提早再每台机器上建立了/data/greenplum-db的目录的,是经过root建立的,而后使用了命令chown -R gpadmin:gpadmin /data/greenplum-db调整了权限的
[gpadmin@master ~]$ gpssh -f /home/gpadmin/conf/hostlist => cd /data/greenplum-db [master1] [slave1] [slave2] [slave3] => mkdir gpdata [master1] [slave1] [slave2] [slave3] => cd gpdata [master1] [slave1] [slave2] [slave3] => mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2 [master1] [slave1] [slave2] [slave3]
[gpadmin@master ~]$ vi /opt/greenplum-db/greenplum_path.sh
GPHOME=/opt/greenplum-db # Replace with symlink path if it is present and correct if [ -h ${GPHOME}/../greenplum-db ]; then GPHOME_BY_SYMLINK=`(cd ${GPHOME}/../greenplum-db/ && pwd -P)` if [ x"${GPHOME_BY_SYMLINK}" = x"${GPHOME}" ]; then GPHOME=`(cd ${GPHOME}/../greenplum-db/ && pwd -L)`/. fi unset GPHOME_BY_SYMLINK fi #setup PYTHONHOME if [ -x $GPHOME/ext/python/bin/python ]; then PYTHONHOME="$GPHOME/ext/python" fi PYTHONPATH=$GPHOME/lib/python PATH=$GPHOME/bin:$PATH LD_LIBRARY_PATH=$GPHOME/lib:${LD_LIBRARY_PATH-}::/usr/local/lib export LD_LIBRARY_PATH OPENSSL_CONF=$GPHOME/etc/openssl.cnf export GPHOME export PATH export PYTHONPATH export PYTHONHOME export OPENSSL_CONF
[gpadmin@master ~]$ cd [gpadmin@master ~]$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH source /opt/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/data/greenplum-db/gpdata/gpmaster/gpseg-1 export PGPORT=2345 export PGDATABASE=postgres [gpadmin@master ~]$ source .bash_profile
建立初始化配置文件
[gpadmin@master ~]$ vi /home/gpadmin/conf/gpinitsystem_config ARRAY_NAME="Greenplum" SEG_PREFIX=gpseg PORT_BASE=33000 declare -a DATA_DIRECTORY=(/data/greenplum-db/gpdata/gpdatap1 /data/greenplum-db/gpdata/gpdatap2) MASTER_HOSTNAME=master MASTER_DIRECTORY=/data/greenplum-db/gpdata/gpmaster MASTER_PORT=2345 TRUSTED_SHELL=/usr/bin/ssh ENCODING=UTF-8 MIRROR_PORT_BASE=43000 REPLICATION_PORT_BASE=34000 MIRROR_REPLICATION_PORT_BASE=44000 declare -a MIRROR_DATA_DIRECTORY=(/data/greenplum-db/gpdata/gpdatam1 /data/greenplum-db/gpdata/gpdatam2) MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
[gpadmin@master~]$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s slave3
其中sdw3是指master的standby所在的节点,我看书上和网上的一些资料都将standby放在最后一个节点,多是约定俗成的吧。
若是上面有一些配置有问题,gpinitsystem就不能成功,日志在主节点/home/gpadmin/gpAdminLogs/的gpinitsystem_2018XXXX.log文件中。
须要注意的是若是初始化失败,必定要认真查看这个日志文件,一味重复安装没有太大意义,重要的是要找到主要缘由。
安装完成之后最好重启一下集群
gpstop -M fast -a #中止数据库
gpstart -a #启动数据库
参考文章:
一、http://www.cnblogs.com/renlipeng/p/5685432.html
二、http://www.jpblog.cn/greenplum%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.html