Greenplum 6.1 安装部署

一系统环境及硬件
1.系统版本 centos 7.7

2.硬件

  • cpu :>= 8核16线程

        根据实际并发量来考量,比如 8 并发,每个seg里面有2个数据节点,那么cpu应该是 8*2*2=20核32线程,如果都是小查询,核心数 
        可以适当降低
  • 内存 :>= 16 GB
  • 磁盘 :sas盘15k转速,固态最好。生产环境上硬盘使用率最好 <30%
  • 物理机:

        系统盘:独立一块盘(最好做raid10),即2块盘
        数据盘:(根据seg中节点数来做raid0),如一个seg中2个节点,可以做2个raid组,每个节点放在不同的raid上,充分利用IO
  • 虚拟机:建议系统盘和数据盘分开挂载

        系统盘: >64GB
        数据盘:按需分配
  • 网络:

        多网口(卡):
              客户端网络(可以千兆,万兆)
              内部网网络(万兆),网络性能对GP影响最大
        单网口(卡):万兆即10Gbit
    

3.集群规模

     master  :1 台
     segment :3 台
     standby :1 台

二.安装部署
1.下载离线安装包

    https://github.com/greenplum-db/gpdb/releases/tag/6.1.0

2.上传到服务器,放在/usr/local/src下

3.关闭防火墙

- 关闭防火墙(所有机器)
  iptables  (centos6.x)
  关闭:service iptables stop
  永久关闭:chkconfig iptables off
- 检查firewalld (centos 7.x)
  关闭:systemctl stop firewalld
  永久关闭 :systemctl disable firewalld

4.关闭SELINUX(所有机器)

[root@mdw ~]# vi /etc/selinux/config
确保SELINUX=disabled

5.配置/etc/hosts (所有机器)

为之后GP在各个节点之间相互通信做准备。
修改各台主机的主机名称。 一般建议的命名规则如下: 项目名_gp_节点
      Master :  dis_gp_mdw
      Standby Master :  dis_gp_smdw
      Segment Host :  dis_gp_sdw1  dis_gp_sdw2  dis_gp_sdw3 以此类推
      如果Standby也搭建在某Segment host下,则命名为:dis_gp_sdw3_smdw

[root@mdw ~]# vi /etc/hosts
添加每台机器的ip 和hostname,确保所有机器的/etc/hosts中包含以下信息:
10.16.162.166 dis-gp-mdw
10.16.162.151 dis-gp-sdw1
10.16.162.152 dis-gp-sdw2
10.16.162.153 dis-gp-sdw3-smdw

6.修改主机名

Centos7.x    vi /etc/hostname
Centos6.x    vi /etc/sysconfig/network
修改完之后   reboot机器

7.配置sysctl.conf(所有机器)

 kernel.shmall = 197951838 # echo $(expr $(getconf _PHYS_PAGES) / 2)
 kernel.shmmax = 810810728448 # echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
 kernel.shmmni = 4096
 vm.overcommit_memory = 2
 vm.overcommit_ratio = 75 #vm.overcommit_ratio = (RAM - 0.026 * gp_vmem_rq) / RAM #gp_vmem_rq = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
 net.ipv4.ip_local_port_range = 10000 65535
 kernel.sem = 500 2048000 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.conf.default.accept_source_route = 0
 net.ipv4.tcp_max_syn_backlog = 4096
 net.ipv4.conf.all.arp_filter = 1
 net.core.netdev_max_backlog = 10000
 net.core.rmem_max = 2097152
 net.core.wmem_max = 2097152
 vm.swappiness = 10
 vm.zone_reclaim_mode = 0
 vm.dirty_expire_centisecs = 500
 vm.dirty_writeback_centisecs = 100
 #vm.min_free_kbytes = 487119#awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo

 #对于大于64GB的主机,加上下面4行
 vm.dirty_background_ratio = 0
 vm.dirty_ratio = 0
 vm.dirty_background_bytes = 1610612736 # 1.5GB
 vm.dirty_bytes = 4294967296 # 4GB

 #对于小于64GB的主机删除dirty_background_bytes dirty_bytes,加上下面2行
 vm.dirty_background_ratio = 3
 vm.dirty_ratio = 10

 #vm.min_free_kbytes在内存 > 64GB系统的时候可以设置,一般比较少设置此参数。
 #vm.min_free_kbytes,确保网络和存储驱动程序PF_MEMALLOC得到分配。这对内存大的系统尤其重要。一般系统上,默认值通常太低。可以使用awk命令计算vm.min_free_kbytes的值,通常是建议的系统物理内存的3%:
 #awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf 
 #不要设置 vm.min_free_kbytes 超过系统内存的5%,这样做可能会导致内存不足。

8.配置资源限制参数(所有机器)

在/etc/security/limits.conf文件下增加以下参数
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
“*” 星号表示所有用户
noproc     是代表最大进程数 
nofile     是代表最大文件打开数

RHEL / CentOS 6.X
修改:/etc/security/limits.d/90-nproc.conf 文件的nproc
[root@mdw ~]# vi /etc/security/limits.d/90-nproc.conf
           确保    *  soft  nproc  131072

RHEL / CentOS 7.X 修改:
修改:/etc/security/limits.d/20-nproc.conf 文件的nproc
[root@mdw ~]# vi /etc/security/limits.d/20-nproc.conf
           确保    *  soft  nproc  131072

ulimit -u 命令显示每个用户可用的最大进程数 max user processes,验证返回值为131072.

9.XFS挂载选项

XFS相比较ext4具有如下优点:
XFS的扩展性明显优于ext4,ext4的单个文件目录超过200W个性能下降明显
ext4作为传统文件系统确实非常稳定,但是随着存储需求的越来越大,ext4渐渐不在适应
由于历史磁盘原因,ext4的inode个数限制(32位),最多只能支持40多亿个文件,单个文件最大支持到16T
XFS使用的是64位管理空间,文件系统规模可以达到EB级别,XFS是基于B+Tree管理元数据
GP 需要使用XFS的文件系统,RHEL/CentOS 7 和Oracle Linux将XFS作为默认文件系统,SUSE/openSUSE已经为XFS做了长期支持。

centos6.x需要先安装xfs包
centos7.x不需要先安装

例如挂载新xfs步骤:
1.[root@mdw ~]# fdisk /dev/sdd
   然后跟着n,p,1提示做下去,最后wq保存退出

   [root@mdw ~]# mkfs.xfs /dev/sdd1 
2.挂载目录
   [root@mdw ~]# mount /dev/sdd1 /data/master
3.设置自动挂载
   [root@mdw ~]# vi /etc/fstab
   /dev/sdd1 /data xfs rw,noatime,inode64,allocsize=16m 0 0

10.磁盘I/O 预读大小设置

 - 临时生效
    [root@mdw ~]# /sbin/blockdev --setra 16384 /dev/sda

 - 永久生效
    [root@mdw ~]# vi /etc/rc.d/rc.local
    blockdev --setra 16384 /dev/sdd*

11.修改rc.local 权限

 必须在启动时可以运行 rc.local文件。
 例如,在RHEL / CentOS 7系统上,设置文件的执行权限。
 [root@mdw ~]# chmod + x /etc/rc.d/rc.local

12.磁盘I/O调度算法(确保是deadline)

 centos7默认就是deadline
 [root@mdw ~]# more  /sys/block/sdd/queue/scheduler
 noop anticipatory [deadline] cfq
 如上所示,就不需要修改,否则按下面操作
 RHEL 6.x or CentOS 6.x  可以修改  /boot/grub/grub.conf,增加 elevator=deadline 例如:
 RHEL 7.x or CentOS 7.x, 使用 grub2  ,可以使用系统工具grubby来修改;
 [root@mdw ~]# grubby --update-kernel=ALL --args="elevator=deadline"
 重启后使用一下命令检查
 [root@mdw ~]# grubby --info=ALL

13.关闭Transparent Huge Pages (THP)

 禁用THP,因为它会降低Greenplum数据库的性能。
 RHEL 6.x or CentOS 6.x 或更高版本默认情况下启用THP。在RHEL 6.x上禁用THP的一种方法是添加参transparent_hugepage=never 到/boot/grub/grub.conf:
 RHEL 7.x or CentOS 7.x, 使用 grub2  ,可以使用系统工具grubby来修改;
 [root@mdw ~]# grubby --update-kernel=ALL --args="transparent_hugepage=never"
 添加参数后,重启系统reboot。
 参数检查:
 [root@mdw ~]# cat /sys/kernel/mm/*transparent_hugepage/enabled
 always [never]

14.SSH连接阈值

 Greenplum数据库管理程序中的gpexpand‘ gpinitsystem、gpaddmirrors,使用 SSH连接来执行任务。在规模较大的Greenplum集群中,程序的ssh连接数可能会超出主机的未认证连接的最大阈值。发生这种情况时,会收到以下错误:ssh_exchange_identification:连接被远程主机关闭。
 为避免这种情况,可以更新 /etc/ssh/sshd_config 或者 /etc/sshd_config 文件的 MaxStartups 和 MaxSessions 参数
 MaxStartups 300:30:1000
 重启sshd,使参数生效
 service sshd restart

15.同步集群时钟(NTP) (此项为操作,环境已经设置好ntp)

 为了保证集群各个服务的时间一致,首先在master 服务器上,编辑 /etc/ntp.conf,配置时钟服务器为数据中心的ntp服务器。若没有,先修改master 服务器的时间到正确的时间,再修改其他节点的 /etc/ntp.conf,让他们跟随master服务器的时间。
 [root@mdw ~]# vi /etc/ntp.conf
 在server 最前面加上
 master:
 把server1,2,3,4全删
 改成 server xxx,可以问公司IT人员公司的时钟IP,如果没有就设置成
 server 1.cn.pool.ntp.org
 segment:
 server mdw prefer  # 优先主节点
 server smdw        # 其次standby 节点,若没有standby ,可以配置成数据中心的时钟服务器
 [root@mdw ~]# service ntpd restart  # 修改完重启ntp服务

16.检查字符集

 [root@mdw greenplum-db]# echo $LANG
 en_US.UTF-8
 如果为zh_CN.UTF-8
 则要修改 CentOS 6.X   /etc/syscconfig/i18n
               CentOS 7.X   /etc/locale.conf

17.创建gpadmin用户(所有机器)

 在每个节点上创建gpadmin用户,用于管理和运行gp集群
 [root@mdw ~]# groupadd gpadmin
 [root@mdw ~]# useradd gpadmin -g gpadmin -s /bin/bash
 [root@mdw ~]# passwd gpadmin

三.集群软件安装
1.安装依赖(所有机器)root用户执行

 [root@mdw ~]# yum install -y zip unzip openssh-clients ed ntp net-tools perl perl-devel perl-ExtUtils* mlocate lrzsz parted apr apr-util bzip2 krb5-devel libevent libyaml rsync

2.执行安装程序(root用户执行)

 执行安装脚本,默认安装到/usr/local/ 目录下。
 [root@mdw ~]# rpm -ivh greenplum-db-6.1.0-rhel6-x86_64.rpm
 安装完成后可在/usr/local下看到greenplum-db-6.1.0和它的软连接greenplum-db
 由于权限的问题,建议手动修改安装路径,放在/home/gpadmin下,执行以下语句
 1.进入安装父目录
    cd /usr/local
 2.把安装目录移动到/home/gpadmin
    mv greenplum-db-6.1.0 /home/gpadmin
 3.删除软连接
    /bin/rm –r greenplum-db
 4.在/home/gpadmin下建立新的软链接
    ln -s /home/gpadmin/greenplum-db-6.1.0 /home/gpadmin/greenplum-db
 5.修改greenplum_path.sh (重要)
    vi /home/gpadmin/greenplum-db/greenplum_path.sh
    把 GPHOME=/usr/local/greenplum-db-6.1.0
    修改为
    GPHOME=/home/gpadmin/greenplum-db
 6.把文件赋权给gpadmin
    chown –R gpadmin:gpadmin /home/gpadmin

3.集群互信,免密登陆(root用户执行)

 生成密钥
 GP6.x开始gpssh-exkeys命令已经不带自动生成密钥了,所以需要自己手动生成
 [root@mdw greenplum-db]# ssh-keygen -t rsa
 提示语不用管,一直按Enter键使用默认值即可

4.将本机的公钥复制到各个节点机器的authorized_keys文件中

 [root@mdw greenplum-db]# ssh-copy-id dis-gp-sdw1
 [root@mdw greenplum-db]# ssh-copy-id dis-gp-sdw2
 [root@mdw greenplum-db]# ssh-copy-id dis-gp-sdw3

5.使用gpssh-exkeys 工具,打通n-n的免密登陆

 vi all_host
 增加所有hostname到文件中
 dis-gp-mdw
 dis-gp-sdw1
 dis-gp-sdw2
 dis-gp-sdw3
 [root@mdw greenplum-db]# source /home/gpadmin/greenplum-db/greenplum_path.sh
 [root@mdw greenplum-db]# gpssh-exkeys -f all_host

6.同步master 配置到各个主机

 打通gpadmin 用户免密登录
 [root@mdw greenplum-db-6.2.1]# su - gpadmin
 [gpadmin@mdw ~]$ source /home/gpadmin/greenplum-db/greenplum_path.sh
 [gpadmin@mdw ~]$ ssh-keygen -t rsa
 [gpadmin@mdw greenplum-db]$ ssh-copy-id dis-gp-sdw1
 [gpadmin@mdw greenplum-db]$ ssh-copy-id dis-gp-sdw2
 [gpadmin@mdw greenplum-db]$ ssh-copy-id dis-gp-sdw3
 [gpadmin@mdw greenplum-db]$ mkdir gpconfigs
 [gpadmin@mdw greenplum-db]$ cd gpconfigs
 [gpadmin@mdw greenplum-db]$ vi all_hosts
 把所有主机hostname添加进去
 [gpadmin@mdw ~]$ gpssh-exkeys -f /home/gpadmin/gpconfigs/all_hosts
 [gpadmin@mdw greenplum-db]$ vi /home/gpadmin/gpconfigs/seg_hosts
 把所有数据节点hostname添加进去

7.批量设置greenplum在gpadmin用户的环境变量(gpadmin用户下)

 添加gp的安装目录,和环境信息到用户的环境变量中。
 编辑 .bashrc
 source /home/gpadmin/greenplum-db/greenplum_path.sh

8.批量复制系统参数到其他节点(如果前面已经每台机器设置过可以跳过)

 示例:
 [gpadmin@mdw gpconfigs]$ exit
 [root@mdw ~]# source /home/gpadmin/greenplum-db/greenplum_path.sh
 [root@mdw ~]# gpscp -f /home/gpadmin/gpconfigs/seg_hosts /etc/hosts root@=:/etc/hosts
 [root@mdw ~]# gpscp -f /home/gpadmin/gpconfigs/seg_hosts /etc/security/limits.conf root@=:/etc/security/limits.conf
 [root@mdw ~]# gpscp -f /home/gpadmin/gpconfigs/seg_hosts /etc/sysctl.conf root@=:/etc/sysctl.conf
 [root@mdw ~]# gpscp -f /home/gpadmin/gpconfigs/seg_hosts /etc/security/limits.d/20-nproc.conf 
 root@=:/etc/security/limits.d/20-nproc.conf
 [root@mdw ~]# gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'sysctl -p'
 [root@mdw ~]# gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'reboot'

9.集群节点安装

 3.5.1 模拟gpseginstall 脚本(gpadmin用户执行)
 GP6.x无gpseginstall 命令,以下模拟此命令主要过程,完成gpsegment的部署
 gpadmin 用户下执行
 1.cd /home/gpadmin
 2.tar -cf gp6.tar greenplum-db-6.1.0/
 3.vi /home/gpadmin/gpconfigs/gpseginstall_hosts
 添加
 dis-gp-sdw1
 dis-gp-sdw2
 dis-gp-sdw3-smdw

10.把压缩包分发到segment上

 gpscp -f /home/gpadmin/gpconfigs/gpseginstall_hosts gp6.tar =:/home/gpadmin

11.通过gpssh命令链接到各个segment上执行命令

 [gpadmin@mdw gpconfigs]$ gpssh -f /home/gpadmin/gpconfigs/gpseginstall_hosts
 tar -xf gp6.tar
 ln -s greenplum-db-6.1.0 greenplum-db
 exit

12.环境变量文件分发到其他节点

 [gpadmin@mdw gpconfigs]$ exit
 [root@mdw greenplum-db-6.2.1]# su – gpadmin
 [gpadmin@mdw ~]$ cd gpconfigs
 [gpadmin@mdw gpconfigs]$ vi seg_hosts
 把segment的hostname都添加到文件中
 dis-gp-sdw1
 dis-gp-sdw2
 dis-gp-sdw3
 [gpadmin@mdw gpconfigs]$ gpscp -f /home/gpadmin/gpconfigs/seg_hosts /home/gpadmin/.bashrc gpadmin@=:/home/gpadmin/.bashrc

13.创建集群数据目录(root用户执行)

 1. 创建master 数据目录
 mkdir -p /data/master
 chown -R gpadmin:gpadmin /data
 source /home/gpadmin/greenplum-db/greenplum_path.sh
 如果有standby节点则需要执行下面2句 dis-gp-sdw3-smdw 这个hostname灵活变更
 gpssh -h dis-gp-sdw3-smdw -e 'mkdir -p /data/master'
 gpssh -h dis-gp-sdw3-smdw -e 'chown -R gpadmin:gpadmin /data'

 2. 创建segment数据目录
 source /home/gpadmin/greenplum-db/greenplum_path.sh
 gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'mkdir -p /data/p1'
 gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'mkdir -p /data/p2'
 gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'mkdir -p /data/m1'
 gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'mkdir -p /data/m2'
 gpssh -f /home/gpadmin/gpconfigs/seg_hosts -e 'chown –R gpadmin:gpadmin /data'

四.集群初始化
1.编写初始化配置文件(gpadmin用户)

 拷贝配置文件模板
 su - gpadmin

 cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config

2.根据需要修改参数

 vi /home/gpadmin/gpconfigs/gpinitsystem_config
 注意:To specify PORT_BASE, review the port range specified in the net.ipv4.ip_local_port_range parameter in the /etc/sysctl.conf file.
 主要修改的参数:

 #primary的数据目录
 declare -a DATA_DIRECTORY=(/data/p1 /data/p2)
 #master节点的hostname
 MASTER_HOSTNAME=dis-gp-mdw
 #master节点的主目录
 MASTER_DIRECTORY=/data/master
 #mirror的端口要把前面的#去掉(启用mirror)
 MIRROR_PORT_BASE=7000
 #mirror的数据目录要把前面的#去掉(启用mirror)
 declare -a MIRROR_DATA_DIRECTORY=(/data/m1 /data/m2)

3.集群初始化(gpadmin用户)

 执行脚本:
 gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config --locale=C -h /home/gpadmin/gpconfigs/gpseginstall_hosts --mirror-mode=spread

 注意:spread是指spread分布策略,只允许主机数>每个主机中的段实例数情况(number of hosts is greater than the number of segment instances.)
 如果不指定mirror_mode,则是默认的group策略,这样做的情况在段实例数>1时,down机之后不会导致它的镜像全在另外一台机器中,降低另外一台机器的性能瓶颈。

4.安装中途失败,提示使用 bash /home/gpadmin/gpAdminLogs/backout_gpinitsystem_gpadmin_* 回退,执行该脚本即可,例如:

 20191218:20:39:53:011405 gpinitsystem:mdw:gpadmin-[FATAL]:-Unknown host gpzq-sh-mb: ping: unknown host gpzq-sh-mb 
 unknown host Script Exiting!
 20191218:20:39:53:011405 gpinitsystem:mdw:gpadmin-[WARN]:-Script has left Greenplum Database in an incomplete state
 20191218:20:39:53:011405 gpinitsystem:mdw:gpadmin-[WARN]:-Run command bash 
 /home/gpadmin/gpAdminLogs/backout_gpinitsystem_gpadmin_20191218_203938 to remove these changes
 20191218:20:39:53:011405 gpinitsystem:mdw:gpadmin-[INFO]:-Start Function BACKOUT_COMMAND
 20191218:20:39:53:011405 gpinitsystem:mdw:gpadmin-[INFO]:-End Function BACKOUT_COMMAND
 [gpadmin@mdw gpAdminLogs]$ ls
 backout_gpinitsystem_gpadmin_20191218_203938  gpinitsystem_20191218.log
 [gpadmin@mdw gpAdminLogs]$ bash backout_gpinitsystem_gpadmin_20191218_203938
 Stopping Master instance
 waiting for server to shut down.... done
 server stopped
 Removing Master log file
 Removing Master lock files
 Removing Master data directory files

 若执行后仍然未清理干净,可执行一下语句后,再重新安装:
 pg_ctl -D /data/master/gpseg-1 stop
 rm -f /tmp/.s.PGSQL.5432 /tmp/.s.PGSQL.5432.lock
 主节点
 rm -rf /data/master/gpseg-1
 所有数据节点
 rm -rf /data/p1/gpseg-x
 rm -rf /data/p2/gpseg-x

5.安装成功后设置环境变量(gpadmin用户)

 编辑gpadmin 用户的环境变量,增加(重要)
 export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
 除此之外,通常还增加:(可以不设置)
 export PGPORT=5432       # 根据实际情况填写
 export PGUSER=gpadmin    # 根据实际情况填写
 export PGDATABASE=gpdw   # 根据实际情况填写
 前面已经添加过 source /usr/local/greenplum-db/greenplum_path.sh,此处操作如下:
 编辑 .bashrc
 export MASTER_DATA_DIRECTORY=/data/master/gpseg-1

6.安装成功后配置

 psql 登陆gp 并设置密码(gpadmin用户)
 psql -h hostname -p port -d database -U user -W password
 -h后面接对应的master或者segment主机名
 -p后面接master或者segment的端口号
 -d后面接数据库名可将上述参数配置到用户环境变量中,linux 中使用gpadmin用户不需要密码。
 psql 登录,并设置gpadmin用户密码示例:
 psql -d postgres
 alter user gpadmin encrypted password ‘xxx’;0.

7.客户端登陆gp

 配置 pg_hba.conf
 vi /data/master/gpseg-1/pg_hba.conf
 新增一行 host all all 0.0.0.0/0 md5

8.初始化standby节点

 gpinitstandby -s dis-gp-sdw3
上一篇:SQOOP安装部署


下一篇:Script:收集Oracle备份恢复信息