Greenplum6.9集群安装文档

1.1 机器配置

  • 系统: Centos7

  • master: 32G 内存, 500G 磁盘 (1台)

  • segment: 64G 内存, 2T 磁盘 (10台)

1.2 域名解析配置

  • 登录各台主机, vim /etc/hosts, 将IP和域名映射配置添加到末尾, 从而使5台机器能通过域名访问。

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.4.37.16 GP-Data-1 sdw1
    10.4.37.17 GP-Data-2 sdw2
    10.4.37.18 GP-Data-3 sdw3
    10.4.37.19 GP-Data-4 sdw4
    10.4.37.20 GP-Data-5 sdw5
    10.4.37.21 GP-Data-6 sdw6
    10.4.37.22 GP-Data-7 sdw7
    10.4.37.23 GP-Data-8 sdw8
    10.4.37.24 GP-Data-9 sdw9
    10.4.37.25 GP-Data-10 sdw10
    10.4.37.15 GP-Master mdw
    

1.3 准备工作(11台)

  • 关闭selinux

    • vim /etc/selinux/config

      SELINUX=disabled
      
  • 关闭防火墙

    • 查看防火墙状态

      firewall-cmd --state
      
    • 停止firewall

      systemctl stop firewalld.service
      

1.4 设置系统参数

  • vim /etc/sysctl.conf 修改内核配置

  • 参数案例

    kernel.shmall = 4000000000
    kernel.shmmax = 500000000
    kernel.shmmni = 4096
    vm.overcommit_memory = 2 
    vm.overcommit_ratio = 95 
    net.ipv4.ip_local_port_range = 10000 65535 
    kernel.sem = 500 2048000 200 40960
    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.dirty_background_ratio = 0 
    vm.dirty_ratio = 0
    vm.dirty_background_bytes = 1610612736
    vm.dirty_bytes = 4294967296
    
  • 备注:

    备注<1><2> 
    kernel.shmall(共享内存页总数)
    kernel.shmmax (共享内存段的最大值)
    一般来讲,这两个参数的值应该是物理内存的一半,可以通过操作系统的值_PHYS_PAGES和PAGE_SIZE计算得出。
     
    kernel.shmall = ( _PHYS_PAGES / 2)
    kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE
     
    也可以通过以下两个命令得出这两个参数的值:
     
    $ echo $(expr $(getconf _PHYS_PAGES) / 2) 
    $ echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
     
    如果得出的kernel.shmmax值小于系统的默认值,则引用系统默认值即可
     
    备注<3>
    segment使用的端口是6000开始
    segment mirror使用的端口是7000开始
    所以配置默认值即可
    net.ipv4.ip_local_port_range = 10000 65535
     
     
    备注<5>
    对于64G内存的操作系统,建议配置如下值:
    vm.dirty_background_ratio = 0
    vm.dirty_ratio = 0
    vm.dirty_background_bytes = 1610612736 # 1.5GB
    vm.dirty_bytes = 4294967296 # 4GB
     
    对于小于64G内存的操作系统,建议配置如下值:
    vm.dirty_background_ratio = 3
    vm.dirty_ratio = 10
    
  • 修改后使用的参数

    # master
    kernel.shmall = 68719476736
    kernel.shmmax = 4294967296
    # segment
    kernel.shmall = 4000000000
    kernel.shmmax = 500000000
    
    kernel.shmmni = 4096
    vm.overcommit_memory = 2 
    vm.overcommit_ratio = 95 
    net.ipv4.ip_local_port_range = 10000 65535 
    kernel.sem = 500 2048000 200 40960
    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.dirty_background_ratio = 0 
    vm.dirty_ratio = 0
    vm.dirty_background_bytes = 1610612736
    vm.dirty_bytes = 4294967296
    
  • 执行命令使之生效

    sysctl -p 
    

1.5 配置资源限制参数(11台)

  • vim /etc/security/limits.conf

    * soft nofile 524288
    * hard nofile 524288
    * soft nproc 131072
    * hard nproc 131072
    

1.6 创建用户及用户组(11台)

  • 创建gpadmin用户及用户组, 将其作为安装greenplum的操作系统用户。

  • 如果已经存在, 先删除

    groupdel gpadmin
    userdel gpadmin
    
  • 创建新的用户和用户组

    groupadd -g 530 gpadmin
    useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
    
  • 对文件夹进行赋权, 为新用户创建密码

    chown -R gpadmin:gpadmin /home/gpadmin/
    passwd gpadmin
    

2.1 RPM方式安装到指定目录

  • github下载rpm包, 地址: https://github.com/greenplum-db/gpdb/releases

  • 上传后执行以下命令将greenplum安装到指定目录:

    rpm -ivh --prefix=/opt/greenplum  greenplum-db-6.9.0-rhel7-x86_64.rpm
    
  • 赋予权限

    chown -R gpadmin:gpadmin /opt/greenplum/greenplum*
    
  • 应用环境变量

    • 安装完成后,greenplum的环境变量,已经在 greenplum_path.sh 中设置了,这里需要应用一下变量。用 gpadmin 用户,登录到 master host:

      su gpadmin
      source /opt/greenplum/greenplum-db/greenplum_path.sh
      

2.2 配置免密登录(每台机器)

  • 切换用户gpadmin

    su gpadmin
    cd ~
    ssh-keygen -t rsa
    
  • 在~目录下vim .ssh/authorized_keys:

    将几台虚拟机公钥都存入该文件中, 每台的authorized_keys都一致

    cd .ssh
    touch authorized_keys
    cat id_rsa.pub >> authorized_keys
    
  • 如果发现还是要密码:

    chown gpadmin: /home/gpadmin/.ssh  
    chown gpadmin: /home/gpadmin/.ssh/*  
    chmod 700 /home/gpadmin/.ssh  
    chmod 600 /home/gpadmin/.ssh/*  
    
  • 免密登录成功案例:

    tmp02

  • 创建hostlist, seg_hosts(Master)

    • 创建目录/home/gpadmin/conf,再分别创建hostlist,seg_hosts。 hostlist 中填写所有节点的主机别名,seg_hosts 中填写所有Segment 的主机别名。

      mkdir /home/gpadmin/conf
      cd /home/gpadmin/conf
      touch hostlist
      touch seg_hosts
      
  • 使用gpssh-exkeys打通所有服务器(Master)

    cd /home/gpadmin/conf
    gpssh-exkeys -f hostlist
    
  • 在打通所有机器通道之后,我们就可以使用 gpssh 命令对所有机器进行批量操作了。

    gpssh -f hostlist
    
    • 优势: 只需要操作一次,就完成到全部集群的操作

2.3 分发数据库文件

  • 打包

    cd /opt/greenplum
    tar -cf gp6.tar greenplum-db-6.9.0
    chown -R gpadmin:gpadmin /opt/greenplum/gp6.tar
    
    • 打包的时候权限不够,我换成root,然后再把.tar的权限还给gpadmin。
  • 分发(切回gpadmin)

    source /opt/greenplum/greenplum-db/greenplum_path.sh
    gpscp -f /home/gpadmin/conf/hostlist gp6.tar =:/opt/greenplum
    
  • 这里报错:

    Error:scp: /opt/greenplum/gp6.tar: Permission denied
    
    • 原因是: 别的机器上还没有此目录,在其他几台机器上要创建/opt/greenplum目录并修改权限

      mkdir -p /opt/greenplum
      chown -R gpadmin:gpadmin /opt/greenplum
      
    • 再次执行后成功

  • 解压(master上运行, 一台上操作所有)

    gpssh -f /home/gpadmin/conf/hostlist
    cd /opt/greenplum
    tar -xf gp6.tar
    ln -s greenplum-db-6.9.0 greenplum-db
    exit
    

2.4 环境配置

  • 创建数据存储空间

    • Master

      mkdir -p /home/gpadmin/data/master
      
    • Segment

      source /opt/greenplum/greenplum-db/greenplum_path.sh
      
      gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap1'
      
      gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap2'
      
       gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap3'
      
        gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam1'
      
        gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam2'
      
        gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam3'
      
  • 配置.bash_profile 环境变量(11台都配了)

    source /opt/greenplum/greenplum-db/greenplum_path.sh
    export MASTER_DATA_DIRECTORY=/home/gpadmin/data/master/gpseg-1
    export PGPORT=5432
    export PGUSER=gpadmin
    
    # 没配db默认使用postgres
    
    • 使之生效:

      source /home/gpadmin/.bash_profile
      
  • 初始化配置文件

    mkdir /home/gpadmin/gpconfigs
    cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
    
    • #数据库代号
      ARRAY_NAME="Greenplum"
      
      #segment前缀
      SEG_PREFIX=gpseg
      
      #primary segment 起始的端口号
      PORT_BASE=33000
      
      #指定primary segment的数据目录,网上写的是多个相同目录,多个目录表示一台机器有多个segment
      declare -a DATA_DIRECTORY=(/home/gpadmin/data/datap1 /home/gpadmin/data/datap2 /home/gpadmin/data/datap3)
      
      #master所在机器的host name
      MASTER_HOSTNAME=mdw
      
      #master的数据目录
      MASTER_DIRECTORY=/home/gpadmin/data/master
      
      #master的端口
      MASTER_PORT=5432
      
      #指定bash的版本
      TRUSTED_SHELL=/usr/bin/ssh
      
      #将日志写入磁盘的间隔,每个段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1
      CHECK_POINT_SEGMENTS=8
      
      #字符集
      ENCODING=UNICODE
      
      #mirror segment 起始的端口号
      MIRROR_PORT_BASE=44000
      
      # mirror的数据目录,和主数据一样,一个对一个,多个对多个
      declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/datam1 /home/gpadmin/data/datam2 /home/gpadmin/data/datam3)
      
  • host文件: hostfile_gpinitsystem

    sdw1
    sdw2
    sdw3
    sdw4
    sdw5
    sdw6
    sdw7
    sdw8
    sdw9
    sdw10
    

3.1 初始化数据库

  • 安装

    cd ..
    source /opt/greenplum/greenplum-db/greenplum_path.sh
    gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
    
  • 没有报错的话一路yes, 之前是因为多了hostfile_gpinitsystem多了mdw所以报错了。

3.2 使用数据库

  • 登录

    psql -d postgres
    
  • 允许外部登录

    • navicat登录

      • 由于gp有空值权限, 并不是所有的机器都可以连接到数据库, 需要在pg_hba.conf文件增加客户端机器的权限。

      • 先给gpadmin创建密码

        alter role gpadmin with password 'gpadmin';
        
      • 找到pg_hba.conf位置

        find / -type f -name pg_hba.conf
        
        • 在/home/gpadmin/data/master/gpseg-1目录下, vim 添加一行:

          host     all         gpadmin     10.4.36.3/32   trust
          
      • 刷新

        pg_ctl reload -D /home/gpadmin/data/master/gpseg-1
        
      • Navicat测试连接成功

4.1 Greenplum6调参

(1)全局死锁检测开关
在Greenplum 6中其默认关闭,需要打开它才可以支持并发更新/删除操作;
gpconfig -c gp_enable_global_deadlock_detector -v on

(2) 禁用GPORCA优化器(GPDB6默认的优化器为:GPORCA, 还不够成熟)
gpconfig -c optimizer -v off

(3)关闭日志
此GUC减少不必要的日志,避免日志输出对I/O性能的干扰。
gpconfig -c log_statement -v none

posted @ 2020-09-20 20:27  wellDoneGaben  阅读(320)  评论(0编辑  收藏  举报