天天看點

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