ThingWorx 高可用性 > 透過 Pgpool-II 部署 PostgreSQL HA 的範例 > 9. 為 Pgpool II 主節點與待命節點配置看門狗服務
9. 為 Pgpool II 主節點與待命節點配置看門狗服務
步驟 1
將每個 Pgpool II 節點的 pgpool.conf 編輯為包含相關看門狗設定及值。
設定
描述
use_watchdog
on
在 Pgpool-II 內開啟看門狗
wd_hostname
'10.91.9.101'
'10.91.9.102'
此看門狗的主機名稱或 IP 位址
wd_port
9000
此看門狗的埠號
delegate_IP
'10.91.9.100'
用戶端用於存取 PostgreSQL (透過 Pgpool-II) 的虛擬 IP 位址
ifconfig_path
'/etc/pgpool2'
包含 if_up_cmd 和 if_down_cmd 命令或指令集的目錄之絕對路徑
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
當 Pgpool-II 嘗試顯示位址為 delegate_IP 的虛擬 IP 介面時發出的指令。可以透過登入 EC2 管理主控台並找到 Pgpool-II 實例來擷取 Pgpool-II 節點的 eni ID。在控制台的描述中,找到 Network interfaces entry,按一下 eth0,並找出介面 ID。將其用於 $<eni id of Pgpool node>
if_down_cmd
ifdown.sh $_IP_$ <eni id of Pgpool node>
當 Pgpool-II 嘗試關閉位址為 delegate_IP 的虛擬 IP 介面時發出的指令。請參閱 if_up_cmd 取得 Pgpool-II 節點的 eni ID。
arping_path
'/usr/bin'
iputils-arping 封裝的安裝路徑
arping_cmd
'arping -U $_IP_$ -w 1'
用於核對 IP 的 arping 指令。
heartbeat_destination0
'10.91.9.102'
'10.91.9.101'
針對其執行活動訊號檢查的 IP 位址;other_pgpool_hostname0 設定的值
heartbeat_destination_port0
9694
使用預設值。
heartbeat_device
'eth0'
活動訊號通訊 IP 地址的 NIC 裝置
other_pgpool_hostname0
'10.91.9.102'
'10.91.9.101'
其他 Pgpool-II 伺服器實例的 IP 位址
other_pgpool_port0
5432
其他 Pgpool-II 節點接聽的埠
other_wd_port0
9000
其他 Pgpool-II 看門狗功能接聽的埠
步驟 2
建立用於 pgpool.conf 檔案 if_up_cmd 設定的 ifup.sh 指令集。
1. 將此指令集放置在 /etc/pgpool2 目錄中。
2. 確保其由 PostgreSQL 所擁有,且屬於 postgres 使用者。
3. 確保其權限設定為 755。
4. 此檔案應包含下列內容
#!/bin/bash -x
/sbin/ifconfig eth0:0 inet $1 netmask 255.255.255.0
步驟 3
建立用於 pgpool.conf 檔案 if_down_cmd 設定的 ifdown.sh 指令集。
1. 將此檔案放置在 /etc/pgpool2 目錄中。
2. 確保其由 PostgreSQL 所擁有,且屬於 postgres 使用者。
3. 確保其權限設定為 755。
4. 此檔案應包含下列內容
#!bin/bash -x
/sbin/ifconfig eth0:0 down
步驟 4
設定對應於 /root/.ssh 目錄中每個 PostgreSQL 資料庫伺服器之 PostgreSQL 使用者 .ssh/authorized_keys 項目的 ssh 公開金鑰。根使用者會執行 HA (包括看門狗) Pgpool-II 流程,且若發生 PostgreSQL 資料庫伺服器的容錯移轉,則負責執行 /etc/pgpool2/failover.sh 指令集。
* 
與金鑰相關的 Permission Denied 訊息將會在容錯移轉期間出現。
步驟 5
在使用看門狗初始啟動 Pgpool II 節點之前,PTC 建議清理或捨棄 /var/log/postgresql 目錄中的 pgpool_status 檔案。這會導致 Pgpool-II 在啟動時使用 pgpool.conf 檔案中 node0 所配置的 PostgreSQL 資料庫。如果發生容錯轉移,且主節點不符合 pgpool.conf 檔案中的 node0 項目,則保留 pgpool_status 檔案,因為它會在 Pgpool-II 流程開始到停止的這段期間保持追蹤目前主節點。
步驟 6
以根使用者身份針對第一個 Pgpool-II 實例啟動 pgpool 流程。請勿將其作為服務啟動。執行下列指令:
sudo su
/usr/sbin/pgpool -n -f /etc/pgpool2/pgpool.conf > ~postgres/pgpool.log
2>&1 &
步驟 7
檢視 syslog 中的 Pgpool-II 項目,以驗證看門狗功能是否已正確初始化。
more /var/log/syslog | grep pgpool
輸出應說明看門狗與 Pgpool-II 已完成初始化並已成功啟動。
步驟 8
要在執行 Pgpool-II 新流程之前清除此記錄,PTC 建議備份目前 syslog 用作歷史參考,然後呼叫下列指令:
> /var/log/syslog
確認 ~postgres/pgpool.log 檔案中沒有錯誤項目。確認 Pgpool-II 流程已啟動。
步驟 9
PostgreSQL HA 部份中指定的預設組態將 pgpool.conf 檔案中 num_init_children 設定的值設定為 125。應該有 125 個狀況為「等待連接請求」的流程,包括一個前置字元為 "PCP:" 的流程。還有數個由 Pgpool-II 與看門狗建立的其他流程。
步驟 10
檢查介面組態 (ifconfig) 以確保虛擬 IP 已建立。確認是否已使用 pgpool.conf 檔案中指派給 delegate_IP 設定的 IP 位址建立了新的網路介面。此介面應稱為 "eth0:0"。
步驟 11
以根使用者身份針對第二個 Pgpool-II 伺服器實例啟動 Pgpool-II 流程。請勿將其作為服務啟動。記錄目前應顯示,一個實例已升級為主節點,另一個已成功啟動。主實例應報告其已接受非主 Pgpool-II 實例的註冊請求 (透過其 IP 位址)。
步驟 12
若要停止 Pgpool-II 流程,請以 root 權限執行下列指令:
sudo su
/usr/sbin/pgpool --mode=immediate stop