ThingWorx 高可用性 > PostgreSQL 高可用性 > 安裝及配置 PostgreSQL HA
安裝及配置 PostgreSQL HA
以下指導原則要支援前一個圖表的實行。其用於實行 PostgreSQL HA 部署的 PostgreSQL 管理員與使用者。
作為參考, 透過 Pgpool-II 部署 PostgreSQL HA 的範例包含用於實行此解決方案之下載、指令行序列以及指令集的範例逐步解說。
參考文件
在安裝 PostgreSQL 之前,閱讀並瞭解所有安裝與組態文件,包括任何所需先決條件軟體的文件。瞭解並套用適當的設定 (包括安全性建議) 很重要。
下列連結提供了有關使用串流複製及 Pgpool-II (用於節點管理) 安裝和配置 PostgreSQL HA 的有用資訊。
安裝 PostgreSQL 並在 PostgreSQL 中建立新的使用者角色
《安裝 ThingWorx 指南》中提供了安裝及配置 PostgreSQL 的指示。請參閱要部署之 ThingWorx 特定版本的安裝指南。必須在所有三個 PostgreSQL 節點上執行相同的安裝與配置任務。
配置及執行 PostgreSQL 資料庫指令集
《安裝 ThingWorx 指南》中提供了在 PostgreSQL 中建構資料庫的指示。請參閱要部署之 ThingWorx 特定版本的安裝指南。應在所有三個 PostgreSQL 節點上執行相同的安裝與配置任務。
配置及執行模型/資料提供者結構描述指令集
《安裝 ThingWorx 指南》中提供了在 PostgreSQL 中建構 ThingWorx 結構描述的指示。請參閱要部署之 ThingWorx 特定版本的安裝指南。應在所有三個 PostgreSQL 節點上執行相同的配置任務。
在所有的 PostgreSQL 節點上建立複製使用者
建立 PostgreSQL 使用者,以管理所有節點上的複製任務。必須使用相同的使用者名稱與密碼。
將複製參數新增到所有 PostgreSQL 節點
下表包含控制其複製服務的 PostgreSQL 參數。
* 
組態欄中列出的值會反映參考架構中的範例部署,但可以針對您的環境進行修改。對於下表中的諸多設定而言,系統將提供連結來幫助您決定環境的適當組態值。
設定
組態
描述
listen_addresses
‘*’
接聽所有網路介面。在某些情況下,如果有多個網路介面,最好將此限制為特定的網路介面。
5432
這是預設埠號。
max_connections
150
PostgreSQL 中的預設值為 100。ThingWorx 中的預設設定也是 100 (maxpoolsize)。根據資料庫中預期同時進行的最大連線數量增加此數值。這應始終高於 ThingWorx platform-settings.json 檔案中的 maxpoolsize 設定值。
shared_buffers
1024MB
選用的效能調整。設定資料庫伺服器用於共用記憶體緩衝區的記憶體量。建議將此量設定為此電腦上可用記憶體的四分之一。請參閱 Resource Consumption > Memory
work_mem
32MB
選用的效能調整。在寫入暫存磁碟檔案之前,指定內部排序作業與雜湊表所使用的記憶體量。請參閱 Resource Consumption > Memory。向下捲動至 work_mem。
maintenance_work_mem
512MB
選用的效能調整。指定維護作業所使用的最大記憶體量。請參閱 Resource Consumption > Memory。此選項就在 work_mem 之後。
wal_level
enum
選用的效能調整。指定維護作業所使用的最大記憶體量。請參閱 Write Ahead Log > Settings
synchronous_commit
on
轉至 Write Ahead Log > Settings,並向下捲動至 synchronous_commit (enum)。
archive_mode
on
archive_command
‘cd .’
轉至 Write Ahead Log > Archiving,並向下捲動至 archive_command (string)。
max_wal_size
10
轉至 Write Ahead Log,然後按一下 ARCHIVING 連結。向「上」捲動至 max_wal_size (integer)。如需有關 WAL Configuration 的詳細資訊,請參閱 PostgreSQL 10 文件集中的 WAL Configuration
synchronous_standby_names
node1、node2 或 node2、node0、ornode0、node1
以逗號分隔清單的形式,根據其 recovery.conf 檔案的指定新增其他節點的 "application_name"。請參閱 Write Ahead Log 中 Settings 部份的 synchronous_commit。
hot_standby
true/false
如需有關此模式的資訊,請參閱 Hot Standby
fsync
on
轉至 Write Ahead Log > Settings,並向下捲動至 fsync。
checkpoint settings
如需有關檢查點設定的資訊,請參閱 Checkpoints
建立 start_replication 和 retargetMaster 指令集
在每個節點上建立指令集來啟動複製服務,並確保 PostgreSQL 節點與系統同步。
並且在每個節點上建立可以建立及實行 recovery.conf 檔案的指令集。recovery.conf 檔案應包含根據發生的失敗調整主節點與待命節點所需的變更。
調整所有 PostgreSQL 節點的外部連線參數
修改每個 pg_hba.conf 檔案中的參數,以允許使用者與資料庫儲存將從 IP 存取的 ThingWorx 資料。此 IP 將連線至資料庫。
* 
如果從 Pgpool-II 連線,請確認驗證存取符合 此處記錄的 Pgpool-II 文件集 (md5 或信任)。
如需有關 pg_hba 檔案的其他資訊,請參閱 PostgreSQL 10 文件集中的 pg_hba.conf File
重新啟動 PostgreSQL 服務以啟動複製
依照一定順序重新啟動所有 PostgreSQL 節點,以控制哪個節點是主節點 (第一個啟動),哪個是主要待命節點 (第二個啟動),哪個是第三節點 (最後一個啟動)。
針對主節點啟動 PostgreSQL 服務。
針對主要待命節點先執行 start_replication 指令集來與主節點同步。然後開始 PostgreSQL 服務。
針對第二待命節點先執行 start_replication 指令集來與主要待命節點同步。然後開始 PostgreSQL 服務。
安裝 Pgpool-II 節點
在安裝 Pgpool 之前,閱讀並瞭解所有安裝文件,包括所有必要先決條件軟體文件集。瞭解並套用適當的設定 (包括安全性建議) 很重要。
有關 Pgpool-II 的下載資訊,請訪問:
如需有關安裝 Pgpool-II 的指示,請參閱您的作業系統文件。所有節點上應安裝 Pgpool-II 的相同版本,以執行 Pgpool-II 服務。
配置 Pgpool-II 節點
下表包含要修改的 Pgpool-II 安裝參數。所有 Pgpool-II 參數都保留在 pgpool.conf 檔案中。這些内容和值應新增至所有 Pgpool-II 節點。
設定
描述
listen_addresses
‘*’
選擇允許 ThingWorx 應用程式的模型提供者連線至 Pgpool-II (無論是否在相同的伺服器上) 的值。
5432
要接聽的用戶端連線 TCP 埠
pcp_listen_address
*
連接埠控制通訊協定 (PCP) 連線的 IP/主機篩選器 (* 允許所有)
pcp_port
9898
要接聽的 PCP 連線 TCP 埠
backend_hostname
backend_port
backend_weight
backend_data_directory
backend_flag
<ip of backend#>
<後端連接埠#>
1
/var/lib/postgresql/10.x/main
ALLOW_TO_FAILOVER
為您三個節點 (主節點與兩個待命節點) 中的每個節點設定這些後端組態值。例如,backend_hostname0 是您的主節點,backend_hostname1 是第一待命節點,依此類推。有關詳細資訊,請參閱 PostgreSQL 線上文件集
enable_pool_hba
on
啟用 pool_hba.conf
master_slave_mode
on
這會告知 Postgres 您正在使用主/待命複製。
load_balance_mode
off
* 
PTC 不建議為 ThingWorx 實行負載平衡。
master_slave_sub_mode
串流
這會告知 Pgpool-II 使用現成的 PostgreSQL 串流複製。
replication_mode
off
不要使用 Pgpool-II 複製,改用現成的 PostgreSQL 串流複製。
sr_check_period
10
以秒為單位的串流複製延遲
sr_check_user
複製器
串流複製使用者
sr_check_password
複製器
串流複製密碼
sr_check_database
postgres
串流複製資料庫
health_check_user
postgres
容錯移轉健全狀況檢查使用者
health_check_password
postgres
容錯移轉健全狀況檢查密碼
health_check_database
postgres
容錯移轉健全狀況檢查資料庫
failover_command
/etc/pgpool2/failover.sh %d %h %D %m %H %R %M %P
有關此設定的詳細資訊,請參閱下面的 failover_command 部份。
另請參閱以下附錄 C 中的範例指令集:
failover.sh
retargetMaster_001.sh
retargetMaster_002.sh
retargetMaster_003.sh
num_init_children
max_pool
max_child_connections
superuser_reserved_connections
效能調整參數。這些設定與 Pgpool-II 的連線共用功能相關。確保在啟動時提供足夠連線以滿足您特定的最大流量需要,並且不超過 PostgreSQL 資料庫節點的最大連線設定。請參閱手冊集區部份 (請參閱以上連結) 的建議,以及用來計算值的方程式。
* 
確保 num_init_children 大於 modelproviderconfig.json 中的 maxpoolsize,且 postgresql.conf 中的 max_connections 大於 num_init_children 設定。
配置 PostgreSQL 容錯移轉指令集
在每個 Pgpool-II 節點 (Pgpool-II 服務會在偵測到失敗時呼叫此節點) 內建立容錯移轉指令集。此指令集應包含針對所有 PostgreSQL 節點失敗來執行的邏輯以及任務。
更新 PCP 組態
更新 pool_hba.conf 檔案辨識所有 ThingWorx 伺服器。
針對 ThingWorx 向 PostgreSQL 的請求,Pgpool-II 將利用 ThingWorx 認證來連線至 PostgreSQL 節點,以維持已建立的存取權限與限制。Pool_hba.conf 檔案與 pg_hba.conf 使用相同的格式、驗證方法以及驗證選項 (md5、信任等)。
如需配置 pool_hba.conf 的詳細資訊,請訪問下列連結。
更新用戶端驗證
更新 pool_hba.conf 檔案辨識所有 ThingWorx 伺服器。
針對 ThingWorx 向 PostgreSQL 的請求,Pgpool-II 將利用 ThingWorx 認證來連線至 PostgreSQL 節點,以維持已建立的存取權限與限制。pool_hba.conf 檔案與 pg_hba.conf 使用相同的格式、驗證方法以及驗證選項 (md5、信任等)。
如需配置 pool_hba.conf 的詳細資訊,請訪問下列連結。
配置 Pgpool-II 以進行容錯移轉
在高可用性組態中,Pgpool-II 以主動/被動作業的方式運作,通常有一個主動 Pgpool-II 節點與一個待命節點。Pgpool-II 提供看門狗流程來監視節點健全狀況並在主要節點失敗時啟動待命節點。
如需配置看門狗的詳細資訊,請參閱 Pgpool 文件集 ( http://www.pgpool.net/docs/latest/en/html/example-watchdog.html)。
下表包含在 Pgpool-II 內配置看門狗時應考慮的設定及值。這些設定及值應新增至每個 Pgpool-II 節點的 pgpool.conf 檔案。
設定
描述
use_watchdog
on
在 Pgpool-II 內開啟看門狗
wd_hostname
'{IP address of this Pgpool-II node}'
此看門狗的主機名稱或 IP 位址
wd_port
9000
此看門狗的埠號
delegate_IP
'{Virtual IP address to access PostgreSQL}'
用戶端用於存取 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 項目,按一下 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
'{IP address of the other Pgpool-II node}'
針對其執行活動訊號檢查的 IP 位址;other_pgpool_hostname0 設定的值
heartbeat_destination_port0
9694
使用預設值。
heartbeat_device
'eth0'
活動訊號通訊 IP 地址的 NIC 裝置
other_pgpool_hostname0
'{IP address of the other Pgpool-II node}'
其他 Pgpool-II 伺服器實例的 IP 位址
other_pgpool_port0
5432
其他 Pgpool-II 節點接聽的埠
other_wd_port0
9000
其他 Pgpool-II 看門狗功能接聽的埠