MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2019年5月2日 星期四

EDB PostgreSQL 企業版資料庫的 RPM 套件安裝方式

EnterpriseDB 在 PostgreSQL 11 釋出之後,調整了資料庫軟體的發行方式:
  • 對 Windows 以及 Mac OS 仍然有提供 PostgreSQL 互動式安裝程式
  • 不再提供 Linux 作業系統下 PostgreSQL 的互動式安裝檔
  • 企業版軟體(EDB Postgres Advanced Server,EPAS)也不再提供 Linux 作業系統下的互動式安裝檔
  • 不論是原生的 PostgreSQL 或是企業版軟體,對 Linux 的支援,改以維護主流的 OS 發行版的套件庫(YUM 以及 APT)
  • 企業版軟體,仍然提供 Windows 平台的互動式安裝檔(近兩大版本的軟體),以提供軟體試用服務
  • 提供企業版資料庫的 Docker Image
  • 雲端資料庫:在各大公有雲都有提供企業版軟體,以及 EDB 自己的 Cloud Database Service

這篇紀錄一下企業版軟體在 Red Hat 系列作業系統中安裝的方式。


目前 EDB 公司的企業版軟體 EPAS 的服務範圍,包含
  • 64 位元的 Windows Server
  • Red Hat 與相關延伸系列的 Linux 作業系統(具體來說是 RHEL、CentOS、Oracle Linux、SUSE)
  • Debian 與其延伸發行版 Ubuntu

以上都分別以各作業系統預設的軟體安裝方式提供安裝檔。
這邊要紀錄的是 Red Hat 系列的安裝過程。

首先,先取得安裝檔。
安裝檔都以套件庫(Repository)的形式提供,連結如下
原生 PostgreSQL
 - https://yum.postgresql.org/
 - https://apt.postgresql.org/pub/repos/apt/

企業版資料庫
 - https://yum.enterprisedb.com/
 - https://apt.enterprisedb.com/

其中,企業版的軟體,需要訂閱用戶才能夠取得。
[UPDATE 2021/02/18] 新網站位置:https://repos.enterprisedb.com/

取得企業版 Repository 密碼

訂閱用戶要登入 Repository 的方式如下:
 1. 使用「訂閱帳戶」登入 EDB 網站(授權書上面登載的代表帳號~)
雖然網站一陣子就會有改變,但登入方式都是大同小異,只要按 Login 輸入帳密就可以了(基本上按鈕都在右上角)

 2. 進入軟體進階下載頁面(Advanced Download),選取「Access Repository」
進入方式,不外乎是點選右上角的 「Download」 按鈕,然後找尋 「Advanced Download」 連結。

 3. 待認證成功,便會在帳戶資訊頁面顯示存取 Repository 密碼(Repository Password)
這邊要以帳號登入後,選取「My Account」按鈕進入

此時便使用本密碼登入 Repository。
這邊可以看到有多個頁籤,主要分成
ASxx:資料庫軟體
Tools:企業版的週邊工具
Dependencies:相依的套件

登入之後,可以
  • 直接使用 https://yum.enterprisedb.com/edbrepos/edb-repo-latest.noarch.rpm ,讓主機直接連外網,用 yum install 指令;也可以準備 Reposync 主機,建置本地 YUM Mirror(訂閱期間有效)
  • 個別 RPM 下載:不建議
  • 下載離線 Tarball 檔案:這邊示範的是這個,裡面是全部的安裝檔


安裝

從上面的網頁下載兩個頁籤「AS11」、「Dependencies」的 Tarball 檔案之後,丟到需要安裝資料庫的 RHEL/CentOS 主機裡面。
然後依照一下步驟執行。

 1. 解壓縮安裝檔
這邊解壓縮到 /var/local/repos/ 目錄
[root@edbtest ~]# mkdir -p /var/local/repos/edb_11/ /var/local/repos/edb_dependencies/
[root@edbtest ~]# tar -xvf edb_11_redhat_rhel-7-x86_64.tar.gz -C /var/local/repos/edb_11/
[root@edbtest ~]# tar -xvf edb_dependencies_redhat_rhel-7-x86_64.tar.gz -C /var/local/repos/edb_dependencies/

建議不用將兩個壓縮檔的內容物全部放在一起,因為 EDB 提供的壓縮檔已經預先做好設置了,我們可以方便的直接使用。
若有必要放在一起,則需要用 createrepo 指令更新目錄裡的 Repo Metadata 才行。

 2. 設定 YUM Repo 檔案
這邊要設定 Repo 檔案,告訴 OS 安裝檔放到哪裡去了
請新建一個文字檔 /etc/yum.repos.d/local-edb.repo,把以下內容貼進去
[local-edb-11] 
name=Local EPAS 11 Packages for Enterprise Linux 7 - $basearch 
baseurl=file:///var/local/repos/edb_11/ 
enabled=1  
gpgcheck=0 

[local-edb-dependencies] 
name=Local EPAS Dependency Packages for Enterprise Linux 7 - $basearch 
baseurl=file:///var/local/repos/edb_dependencies/ 
enabled=1 
gpgcheck=0 

#[local-edb-tools] 
#name=Local Packages EDB Tools for Enterprise Linux 7 - $basearch 
#baseurl=file:///var/local/repos/edb_tools/ 
#enabled=1 
#gpgcheck=0

若是環境許可,安裝資料庫的電腦可以連通外部網路,就可以直接下載
[root@edbtest ~]# yum install -y https://yum.enterprisedb.com/edbrepos/edb-repo-latest.noarch.rpm

然後把 Repository 的帳密填進來(這邊用 sed 指令作替代)
[root@edbtest ~]# sed "s/<username>:<password>/帳號名稱:密碼字串/g" -i /etc/yum.repos.d/edb.repo


 3. 進行安裝
安裝需要 EPEL YUM Repo 的套件,因此「還是」需要連到外部網路,不然得自己載相依套件。。。
所幸在這裡,EDB 11 需要的套件已經標定出來了,分別是 llvm3.9-3.9.1-7.el7.x86_64.rpm 以及 llvm3.9-libs-3.9.1-7.el7.x86_64.rpm 這兩個套件,可以獨立下載並預先安裝。
這邊直接列舉有連外網的安裝,YUM 指令自己會解析相依套件
[root@edbtest ~]# yum install -y epel-release
[root@edbtest ~]# yum install -y edb-as11-server edb-as11-server-edb-modules

安裝完畢之後,執行檔會安裝完成,並且建立一個 enterprisedb 的 OS 帳號,預設家目錄在 /var/lib/edb/
[補充] 透過 YUM REPO 安裝原生 PostgreSQL 的話,則會建立 postgres 的 OS 帳號,預設家目錄在 /var/lib/postgres/
家目錄裡面有附上一點東西($HOME/.bash_profile 檔案以及 $HOME/as11/data/ 目錄),等下會用到。

安裝後設置

以上安裝的執行檔,基本上整個 OS 裡面,除了 root 帳號之外,每個帳號都可以執行。
通常會直接使用 enterprisedb 帳號。

 1. 初始化資料庫
平常的資料庫初始化,會直接使用 initdb 指令。但是這邊為了讓資料庫以 SystemD 服務控制,我們會採用一個內建的 setup Script。
在執行 initdb 時,通常會指定一些額外參數。而我們這邊則需要使用一個變數來指定。這邊示範的是,增大 WAL Segment 檔案大小,從預設的 16MB 加大到 128MB(EDB 10 / PGSQL 11 之後支援的功能)
[root@edbtest ~]# export LANG=en_US.UTF8
[root@edbtest ~]# export PGSETUP_INITDB_OPTIONS="-E UTF-8 --wal-segsize=128"
[root@edbtest ~]# /usr/edb/as11/bin/edb-as-11-setup initdb
Initializing database ... OK

[root@edbtest ~]# 


 2. 建議參數設置
這邊主要是設定一些環境變數,以及 psql 指令的功能。
其中 Bash 的環境變數,根據 $HOME/.bash_profile 內容,填寫到 $HOME/.enterprisedb_profile 裡面;而 psql 的設定,則填寫到 $HOME/.psqlrc 裡面。
以下直接以 heredoc 的方式,產生這兩個需要的檔案
[root@edbtest ~]# su - enterprisedb
bash-4.2$ cat << "EOF" >> ~/.enterprisedb_profile
export PATH=/usr/edb/as11/bin:$PATH
export EDBHOME=/var/lib/edb/
export PGDATA=/var/lib/edb/as11/data
export PGDATABASE=edb
export PGUSER=enterprisedb
export PGPORT=5444
export PGLOCALEDIR=/usr/edb/as11/share/locale
EOF
bash-4.2$ 
bash-4.2$ cat << EOF >> ~/.psqlrc
\timing on
\pset null '(NULL)'
EOF
bash-4.2$

3. 記憶體充足時的 Huge Pages 設定
初始化之後,通常會作一點調校,使資料庫可以充分利用資料庫資源。在這邊,我們直接將需要的內容貼到 $PGDATA/postgresql.auto.conf,方便以後的管理。需要調整主要是記憶體相關參數,以及 EDB 內建動態調整功能
與上一步驟一樣,這邊直接以 heredoc 處理。
bash-4.2$ free -h
              total        used        free      shared  buff/cache   available
Mem:           125G        1.3G         34G        9.3M         90G        123G
Swap:          4.0G          0B        4.0G
bash-4.2$ cat << "EOF" >> $PGDATA/
edb_dynatume = 100
shared_buffers = 30GB
effective_cache_size = 90GB
EOF
bash-4.2$ 

 4. 記憶體充足時的 Huge Pages 設定
這個步驟,在主機的可用記憶體超過 64GB 時,才有設置的效果。並且會需要以 root 帳號進行設定。
進行這步驟之前,會需要先啟動資料庫,以便確認資料庫需要的 Shared Memory 數量
[root@edbtest ~]# service edb-as-11 start
Redirecting to /bin/systemctl start  edb-as-11.service

然後就是設定 Higepages。這邊的設定,主要是需要一步步抓一些參數,用來作一點點計算,才以 sysctl 指令去設定(以及填到 sysctl 設定檔)
[root@edbtest ~]# head -1 /var/lib/edb/as11/data/postmaster.pid
12060
[root@edbtest ~]# grep -i '^VMPeak' /proc/12060/status
VmPeak: 32565808 kB
[root@edbtest ~]# echo $((32565808/2048 + 1))
15902
[root@edbtest ~]# ## 設定比上面得到的值大一點點就好
[root@edbtest ~]# sysctl -w vm.nr_hugepages=15910
vm.nr_hugepages = 15910
[root@edbtest ~]# echo "vm.nr_hugepages=15910" >> /etc/sysctl.d/edb.conf
[root@edbtest ~]#
[root@edbtest ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           125G         32G         92G        765M        1.2G         92G
Swap:          4.0G          0B        4.0G
[root@edbtest ~]#

 5. 最後,正式以 SystemD 指令啟動。
以 SystemD 啟動的原因是,直接使用 pg_ctl 指令的話,比較有機會被 OS 的 OOM Killer 給停掉服務;使用 systemctl / service 指令的話,Service Unit File 裡面已經有針對 OOM 作一些設定,比較不會被 OOM Killer 干擾。
因為上面的設置已經用 service 指令啟動了,這邊就重新啟動資料庫,讓資料庫的 shared_buffers 去使用 Hugepages 就好
[root@edbtest ~]# service edb-as-11 restart
[root@edbtest ~]# chkconfig edb-as-11 on

另外,如果是設定 HA 環境的話,就不建議執行 chkconfig 的開機啟動功能。以免在 Failover 發生後,重啟電腦也一併把資料庫帶起來,處理災後復原會麻煩一點。


參考資料

沒有留言:

張貼留言