1. 程式人生 > 實用技巧 >Greenplum6.9叢集安裝文件

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/*  
    
  • 免密登入成功案例:

  • 建立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