- 對 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/
1. 使用「訂閱帳戶」登入 EDB 網站(授權書上面登載的代表帳號~)
雖然網站一陣子就會有改變,但登入方式都是大同小異,只要按 Login 輸入帳密就可以了(基本上按鈕都在右上角)
2. 進入軟體進階下載頁面(Advanced Download),選取「Access Repository」
進入方式,不外乎是點選右上角的 「Download」 按鈕,然後找尋 「Advanced Download」 連結。
3. 待認證成功,便會在帳戶資訊頁面顯示存取 Repository 密碼(Repository Password)
這邊要以帳號登入後,選取「My Account」按鈕進入
此時便使用本密碼登入 Repository。
這邊可以看到有多個頁籤,主要分成
ASxx:資料庫軟體
Tools:企業版的週邊工具
Dependencies:相依的套件
登入之後,可以
然後依照一下步驟執行。
1. 解壓縮安裝檔
這邊解壓縮到 /var/local/repos/ 目錄
2. 設定 YUM Repo 檔案
這邊要設定 Repo 檔案,告訴 OS 安裝檔放到哪裡去了
請新建一個文字檔 /etc/yum.repos.d/local-edb.repo,把以下內容貼進去
若是環境許可,安裝資料庫的電腦可以連通外部網路,就可以直接下載
然後把 Repository 的帳密填進來(這邊用 sed 指令作替代)
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 指令自己會解析相依套件
安裝完畢之後,執行檔會安裝完成,並且建立一個 enterprisedb 的 OS 帳號,預設家目錄在 /var/lib/edb/。
[補充] 透過 YUM REPO 安裝原生 PostgreSQL 的話,則會建立 postgres 的 OS 帳號,預設家目錄在 /var/lib/postgres/。
家目錄裡面有附上一點東西($HOME/.bash_profile 檔案以及 $HOME/as11/data/ 目錄),等下會用到。
通常會直接使用 enterprisedb 帳號。
1. 初始化資料庫
平常的資料庫初始化,會直接使用 initdb 指令。但是這邊為了讓資料庫以 SystemD 服務控制,我們會採用一個內建的 setup Script。
在執行 initdb 時,通常會指定一些額外參數。而我們這邊則需要使用一個變數來指定。這邊示範的是,增大 WAL Segment 檔案大小,從預設的 16MB 加大到 128MB(EDB 10 / PGSQL 11 之後支援的功能)
2. 建議參數設置
這邊主要是設定一些環境變數,以及 psql 指令的功能。
其中 Bash 的環境變數,根據 $HOME/.bash_profile 內容,填寫到 $HOME/.enterprisedb_profile 裡面;而 psql 的設定,則填寫到 $HOME/.psqlrc 裡面。
以下直接以 heredoc 的方式,產生這兩個需要的檔案
3. 記憶體充足時的 Huge Pages 設定
初始化之後,通常會作一點調校,使資料庫可以充分利用資料庫資源。在這邊,我們直接將需要的內容貼到 $PGDATA/postgresql.auto.conf,方便以後的管理。需要調整主要是記憶體相關參數,以及 EDB 內建動態調整功能
與上一步驟一樣,這邊直接以 heredoc 處理。
4. 記憶體充足時的 Huge Pages 設定
這個步驟,在主機的可用記憶體超過 64GB 時,才有設置的效果。並且會需要以 root 帳號進行設定。
進行這步驟之前,會需要先啟動資料庫,以便確認資料庫需要的 Shared Memory 數量
然後就是設定 Higepages。這邊的設定,主要是需要一步步抓一些參數,用來作一點點計算,才以 sysctl 指令去設定(以及填到 sysctl 設定檔)
5. 最後,正式以 SystemD 指令啟動。
以 SystemD 啟動的原因是,直接使用 pg_ctl 指令的話,比較有機會被 OS 的 OOM Killer 給停掉服務;使用 systemctl / service 指令的話,Service Unit File 裡面已經有針對 OOM 作一些設定,比較不會被 OOM Killer 干擾。
因為上面的設置已經用 service 指令啟動了,這邊就重新啟動資料庫,讓資料庫的 shared_buffers 去使用 Hugepages 就好
另外,如果是設定 HA 環境的話,就不建議執行 chkconfig 的開機啟動功能。以免在 Failover 發生後,重啟電腦也一併把資料庫帶起來,處理災後復原會麻煩一點。
參考資料
取得企業版 Repository 密碼
訂閱用戶要登入 Repository 的方式如下:1. 使用「訂閱帳戶」登入 EDB 網站(授權書上面登載的代表帳號~)
雖然網站一陣子就會有改變,但登入方式都是大同小異,只要按 Login 輸入帳密就可以了(基本上按鈕都在右上角)
2. 進入軟體進階下載頁面(Advanced Download),選取「Access Repository」
進入方式,不外乎是點選右上角的 「Download」 按鈕,然後找尋 「Advanced Download」 連結。
3. 待認證成功,便會在帳戶資訊頁面顯示存取 Repository 密碼(Repository Password)
這邊要以帳號登入後,選取「My Account」按鈕進入
這邊可以看到有多個頁籤,主要分成
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 主機裡面。然後依照一下步驟執行。
這邊解壓縮到 /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 才行。
這邊要設定 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 帳號。
平常的資料庫初始化,會直接使用 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 發生後,重啟電腦也一併把資料庫帶起來,處理災後復原會麻煩一點。
參考資料
關於 Hugepages 與 Postgres 關係的討論
沒有留言:
張貼留言