(原)centos7安裝和使用greenplum4.3.12(詳細版)


 

   對於很多IT人來說GREENPLUM是個陌生的名字。簡單的說它就是一個與ORACLE, DB2一樣面向對象的關系型數據庫。我們通過標准的SQL可以對GP中的數據進行訪問存取。

  本質上講GREENPLUM是一個關系型數據庫集群. 它實際上是由數個獨立的數據庫服務組合成的邏輯數據庫。與RAC不同,這種數據庫集群采取的是MPP架構。如下圖所示

  它的組件分成三個部分MASTER/SEGMENT以及MASTER與SEGMENT之間的高效互聯技術GNET。其中MASTER和SEGMENT本身就是獨立的數據庫SERVER。不同之處在於,MASTER只負責應用的連接,生成並拆分執行計划,把執行計划分配給SEGMENT節點,以及返回最終結果給應用,它只存儲一些數據庫的元數據,不負責運算,因此不會成為系統性能的瓶頸。這也是GREENPLUM與傳統MPP架構數據庫的一個重要區別。 SEGMENT節點存儲用戶的業務數據,並根據得到執行計划,負責處理業務數據。也就是用戶關系表的數據會打散分布到每個SEGMENGT節點。當進行數據訪問時,首先所有SEGMENT並行處理與自己有關的數據,如果需要segment可以通過進行innterconnect進行彼此的數據交互。 segment節點越多,數據就會打的越散,處理速度就越快。因此與SHARE ALL數據庫集群不同,通過增加SEGMENT節點服務器的數量,GREENPLUM的性能會成線性增長。

  安裝之前看了一些關於greenplun的文章,介紹和解釋地實在難以讓人滿意,結合官網,記錄一下自己的搭建過程.

  • greenplum集群一共有三個角色,主節點,備節點和數據節點,理論上至少要有三台機器,如果條件差一些,備用節點去掉后續再添加也可以
    • 10.10.10.1 master節點
    • 10.10.10.2 standby節點
    • 10.10.10.3 data1節點
    • 10.10.10.4 data2節點
    • 系統都為centos7
  • 下載地址: https://network.pivotal.io/products/pivotal-gpdb/(包括jdbc連接jar包下載地址)
  • 下圖是官方對系統的要求
    • Table 1. System Prerequisites for Greenplum Database 4.3
      Operating System SUSE Linux Enterprise Server 11 SP2

      CentOS 5.0 or higher

      Red Hat Enterprise Linux (RHEL) 5.0 or higher

      Oracle Unbreakable Linux 5.5

      Note: See the Greenplum Database Release Notes for current supported platform information.
      File Systems
      • xfs required for data storage on SUSE Linux and Red Hat (ext3 supported for root file system)
      Minimum CPU Pentium Pro compatible (P3/Athlon and above)
      Minimum Memory 16 GB RAM per server
      Disk Requirements
      • 150MB per host for Greenplum installation
      • Approximately 300MB per segment instance for meta data
      • Appropriate free space for data with disks at no more than 70% capacity
      • High-speed, local storage
      Network Requirements 10 Gigabit Ethernet within the array

      Dedicated, non-blocking switch

      Software and Utilities bash shell

      GNU tars

      GNU zip

      GNU sed (used by Greenplum Database gpinitsystem)

  • 安裝分為兩步,一個是系統配置,然后才是配置.系統配置主要是做磁盤優化,主機通訊等工作.
    • root用戶登錄,查看SELinuxstatus
      sestatus

      如果不是disabled,則需要修改參數:

      vi /etc/selinux/config

      修改

      SELINUX=disabled

       

    • 關閉防火牆 ,因為是centos7,默認防火牆為firewall,先查看
      systemctl status firewalld

      如果為關閉狀態則顯示如下:

      * firewalld.service - firewalld - dynamic firewall daemon
         Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
         Active: inactive (dead)

      否則執行命令:

      # systemctl stop firewalld
      # systemctl disable firewalld

       

    • 接下來執行一些推薦配置,理論上不配置也不影響使用,只不過影響性能,包括三方面,共享內存,網絡和用戶限制
      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.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 = 10000 65535
      net.core.netdev_max_backlog = 10000
      net.core.rmem_max = 2097152
      net.core.wmem_max = 2097152
      vm.overcommit_memory = 2

      更改文件限制

      vi /etc/security/limits.conf

      文件末尾添加

      * soft nofile 65536
      * hard nofile 65536
      * soft nproc 131072
      * hard nproc 131072

      說明,如果centos或redhat6版本的,該配置會被/etc/security/limits.d/90-nproc.conf覆蓋,注意兩邊都修改.

    • 更改文件格式,推薦xfs
      vi /etc/fstab

      比如:

      /dev/data /data xfs nodev,noatime,nobarrier,inode64,allocsize=16m 0 0

       

    • 磁盤io調度算法有多種:CFQAS,deadline.greenplum推薦deadline,通過命令指定重啟后的調度算法:(對各個盤進行操作)
      # echo schedulername > /sys/block/devname/queue/scheduler

      比如修改sdb調度:

      # echo deadline > /sys/block/sdb/queue/schedule

      也可以通過加入啟動項參數的方法修改調度算法,centos6和7的做法不相同,如果是6:

      vi /boot/grub/grub.conf

      添加啟動參數如下:

      kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/
          elevator=deadline crashkernel=128M@16M  quiet console=tty1
          console=ttyS1,115200 panic=30 transparent_hugepage=never 
          initrd /initrd-2.6.18-274.3.1.el5.img

      如果是centos7,運行:

      grubby --update-kernel=ALL --args="elevator=deadline"

       

    • 修改磁盤預讀量為16384,查看預讀量
      # /sbin/blockdev --getra devname

      比如:

      # /sbin/blockdev --getra /dev/sdb

      設置預讀量:

      # /sbin/blockdev --setra bytes devname

      比如:

      # /sbin/blockdev --setra 16384 /dev/sdb

       

    • 修改hosts文件確保,幾個主機之間能夠互相識別:
      vi /etc/hosts

      比如

      10.10.10.1 mdw
      10.10.10.2 smdw
      10.10.10.3 sdw1
      10.10.10.4 sdw2

      注意多網卡的情況,我只有單網卡,所以就不麻煩得寫多網卡了.

    • 關閉Transparent Huge Pages (THP),同樣是分開centos6和centos7兩種不同的系統不同操作,分別是:
      kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/
          elevator=deadline crashkernel=128M@16M  quiet console=tty1
          console=ttyS1,115200 panic=30 transparent_hugepage=never 
          initrd /initrd-2.6.18-274.3.1.el5.img

      centos7:

      # grubby --update-kernel=ALL --args="transparent_hugepage=never"

       

    • 到這里系統配置就完成了,重啟后安裝greenplum
  • 安裝greenplum,注意所有操作均在master節點上運行
    • 解壓運行
    • # unzip greenplum-db-4.3.x.x-PLATFORM.zip
      # /bin/bash greenplum-db-4.3.x.x-PLATFORM.bin

      有提示安裝路徑推薦默認()/usr/local/greenplum-db-4.3.x.x)

    • 安裝
      $ su -

      環境變量:

      # source /usr/local/greenplum-db/greenplum_path.sh

      創建文件hostfile_exkeys:

      mdw
      smdw
      sdw1
      sdw2

      如果機子上存在多個網卡,則要全部寫上,比如:(每台機子下方寫上該主機的網絡接口,mdw-1是網絡接口)

      mdw
      mdw-1
      mdw-2
      smdw
      smdw-1
      smdw-2
      sdw1
      sdw1-1
      sdw1-2
      sdw2
      sdw2-1
      sdw2-2
      sdw3
      sdw3-1
      sdw3-2

      運行文件:后面跟着的賬戶和密碼是greenplum管理用戶

      # gpseginstall -f hostfile_exkeys -u gpadmin -p changeme

       

    • 確認安裝:先用gpadmin登錄:
      $ su - gpadmin

      環境變量:

      # source /usr/local/greenplum-db/greenplum_path.sh

      運行命令測試

      $ gpssh -f hostfile_exkeys -e ls -l $GPHOME

      這個命令目的是登錄到其他數據機器運行ls,如果能夠正常顯示說明主機之間登錄和命令運行沒有問題.如果出現提示需要輸入密碼,則需要再運行:

      $ gpssh-exkeys -f hostfile_exkeys

       

    • 安裝拓展
      $ psql -d testdb -f $GPHOME/share/postgresql/contrib/orafunc.sql

      安裝拓展需要對每一個庫運行,上面命令是對testdb拓展,如果想去掉拓展

      $GPHOME/share/postgresql/contrib/uninstall_orafunc.sql

       

    • master和standby節點創建目錄(使用root):
      # mkdir /data/master

      賦權

      # chown gpadmin /data/master

      使用工具在standby節點上操作:

      # source /usr/local/greenplum-db-4.3.x.x/greenplum_path.sh 
      # gpssh -h smdw -e 'mkdir /data/master'
      # gpssh -h smdw -e 'chown gpadmin /data/master'

       

    • segment 節點創建目錄(也是root),先創建文件hostfile_gpssh_segonly,內容是數據節點

      sdw1
      sdw2

      運行:

      # source /usr/local/greenplum-db-4.3.x.x/greenplum_path.sh 
      # gpssh -f hostfile_gpssh_segonly -e 'mkdir /data/primary'
      # gpssh -f hostfile_gpssh_segonly -e 'mkdir /data/mirror'
      # gpssh -f hostfile_gpssh_segonly -e 'chown gpadmin /data/primary'
      # gpssh -f hostfile_gpssh_segonly -e 'chown gpadmin /data/mirror'

       

    • 所有機器用ntp同步時間,修改配置文件並更新即可:

      vi  /etc/ntp.conf

      在主節點上運行:

      # gpssh -f hostfile_gpssh_allhosts -v -e 'ntpd'

       

    • 開啟防火牆

      $ gpstop -a
      $ service firewalld start
      $ gpstart -a
    •  
  • greenplum使用須知
    • 權限配置文件:/data/master/gpseg-1/pg_hba.conf(當前配置了10.1.3.0的所有ip都可以以任何角色訪問任何庫),不配置角色權限以下幾點可以不看:

      1. TYPE定義了多種連接PostgreSQL的方式,分別是:“local”使用本地unix套接字,“host”使用TCP/IP連接(包括SSL和非SSL),“host”結合“IPv4地址”使用IPv4方式,結合“IPv6地址”則使用IPv6方式,“hostssl”只能使用SSL TCP/IP連接,“hostnossl”不能使用SSL TCP/IP連接。

      2. DATABASE指定哪個數據庫,多個數據庫,庫名間以逗號分隔。“all”只有在沒有其他的符合條目時才代表“所有”,如果有其他的符合條目則代表“除了該條之外的”,因為“all”的優先級最低。

      3. 這兩條都是指定local訪問方式,因為前一條指定了特定的數據庫db1,所以后一條的all代表的是除了db1之外的數據庫,同理用戶的all也是這個道理。

      4. USER指定哪個數據庫用戶(PostgreSQL正規的叫法是角色,role)。多個用戶以逗號分隔。

      5. CIDR-ADDRESS項local方式不必填寫,該項可以是IPv4地址或IPv6地址,可以定義某台主機或某個網段。

      6. METHOD指定如何處理客戶端的認證。常用的有ident,md5,password,trust,reject。

      7. ident是Linux下PostgreSQL默認的local認證方式,凡是能正確登錄服務器的操作系統用戶(注:不是數據庫用戶)就能使用本用戶映射的數據庫用戶不需密碼登錄數據庫。用戶映射文件為pg_ident.conf,這個文件記錄着與操作系統用戶匹配的數據庫用戶,如果某操作系統用戶在本文件中沒有映射用戶,則默認的映射數據庫用戶與操作系統用戶同名。比如,服務器上有名為user1的操作系統用戶,同時數據庫上也有同名的數據庫用戶,user1登錄操作系統后可以直接輸入psql,以user1數據庫用戶身份登錄數據庫且不需密碼。很多初學者都會遇到psql -U username登錄數據庫卻出現“username ident 認證失敗”的錯誤,明明數據庫用戶已經createuser。原因就在於此,使用了ident認證方式,卻沒有同名的操作系統用戶或沒有相應的映射用戶。解決方案:1、在pg_ident.conf中添加映射用戶;2、改變認證方式。

      8. md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給數據庫,較安全,且不需建立同名的操作系統用戶。

      9. password是以明文密碼傳送給數據庫,建議不要在生產環境中使用。

      10. trust是只要知道數據庫用戶名就不需要密碼或ident就能登錄,建議不要在生產環境中使用。

      11. reject是拒絕認證。

      12. 修改后運行gpstop –u生效,不必重啟

    • 連接可以使用Navicat,pgadmin, RazorSQL, Aginity Workbench for Pivotal Greenplum,連接屬性如下圖:

    • 創建概念須知:
      • 角色(role)與用戶(user):對於PostgreSQL來說,這是完全相同的兩個對象。
      • 數據庫是被模式(schema)來切分的,一個數據庫至少有一個模式,所有數據庫內部的對象(object)是被創建於模式的。用戶登錄到系統,連接到一個數據庫后,是通過該數據庫的search_path(schema)來尋找schema的搜索順序:
      • 更改角色的search_path,可以使查詢時優先根據search_path中帶有的schema進行查詢,簡便查詢.因為一個角色下可能有多個schema,其中有些對象名稱相同,如果沒有配置search_path,查詢時又沒有帶上表所屬的schema將會報錯.更改語句如下:

         ALERT ROLE name SET search_path TO schema [, schema, ...]
      • 官方建議是這樣的:在管理員創建一個具體數據庫后,應該為所有可以連接到該數據庫的用戶分別創建一個與用戶名相同的模式,然后,將search_path設置為"$user"(即缺省模式為與用戶名相同的模式),這樣,任何當某個用戶連接上來后,會默認將查找或者定義的對象都定位到與之同名的模式中。這是一個好的設計架構。

    • 創建示例:

      create user testuser;
      
      create schema testuser;
      
      GRANT ALL ON SCHEMA testuser TO testuser;
      
      GRANT ALL ON DATABASE xxx TO testuser;
      
      alter user testuser PASSWORD ‘testuser’;

       

    • Linux連接操作:

      psql -h 10.1.4.59 -Udctest pg_dc –W

      (dctest為用戶名,pg_dc是數據庫)

        

      • 操作語句與oracle差不多:比如創建表

        create table public.t1(id text);
      • 創建schema:
        create schema authorization hippo;#最好指定擁有者,默認為當前用戶.
      • 有一些系統表可以查看對象信息:

      • pg_class:該系統表記錄了數據表、索引(仍然需要參閱pg_index)、序列、視圖、復合類型和一些特殊關系類型的元數據。注意:不是所有字段對所有對象類型都有意義。
      • pg_attribute:該系統表存儲所有表(包括系統表,如pg_class)的字段信息。數據庫中的每個表的每個字段在pg_attribute表中都有一行記錄。
      • pg_database:該系統表存儲數據庫的信息。和大多數系統表不同的是,在一個集群里該表是所有數據庫共享的,即每個集群只有一份pg_database拷貝,而不是每個數據庫一份。
      • 以上幾個比較常用,其他也有看表空間,索引等…

    • jdbc示例:
      • git clone https://github.com/randomtask1155/PivotalJDBCTest.git
  • 其他內容后續添加.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM