Postgresql
PGPool II - 目前主節點死亡時的故障轉移
我有一個 2 節點高可用性 postgresql 9.5 集群。我正在使用流複製,PGPool II (3.5.4
$$ ekieboshi $$) 和一個虛擬(或浮動)輔助 IP 都託管在 aws 上來完成此操作。 我已經配置了 PGPool 看門狗,它執行良好,但似乎只在 postgresql 服務實例死亡時在故障節點上執行故障轉移腳本。
當主節點無法訪問時,我希望能夠在從節點上執行故障轉移腳本。在 PGPool II 中有什麼鉤子嗎?如果不是,這真的不是一個好主意嗎?在此先感謝您的幫助。
聽起來您的
failover_command
價值可能不正確。並且通常故障轉移腳本在 pgpool 伺服器上執行,而不是在數據庫節點上。failover_command = '/etc/pgpool-II/failover.sh %d %H %P /tmp/postgresql.trigger.failover [hostname of failover pgpool server]'
上面的配置將新的主候选和一個參數傳遞給我的故障轉移腳本,該腳本在 pgpool 上執行,但最終使用 postgresql 將主候選(這是一個熱備用)提升為一個主。
你需要的鉤子是
failover_command
.在 PgPool 的配置中定義的所有腳本 -
failover_command
、follow_master_command
、failback_command
等 - 都由 pgpool 主程序執行。pcp_watchdog_info
您可以使用實用程序檢查哪個是主控。這意味著如果你想在 PostgreSQL 節點上執行命令,你需要設置從 pgpool 到 postgres 節點的無密碼身份驗證,並在腳本中使用 ssh。舉個例子,在我的
failover.sh
我有這個:#!/bin/bash node=$1 host=$2 port=$3 pgdata=$4 newmasternode=$5 newmasterhost=$6 oldmasternode=$7 oldprimarynode=$8 newmasterport=$9 newmasterpgdata=${10} echo "$0 params: node=$node host=$host port=$port pgdata=$pgdata newmasternode=$newmasternode newmasterhost=$newmasterhost oldmasternode=$oldmasternode oldprimarynode=$oldprimarynode newmasterport=$newmasterport newmasterpgdata=$newmasterpgdata" ssh_opts="-o BatchMode=yes -o StrictHostKeyChecking=no -o CheckHostIP=no -o ConnectTimeout=10" echo "$0 Disabling postgresql on $host" ssh $ssh_opts -l root $host 'systemctl mask postgresql --now' if [ $newmasternode -ne $oldmasternode ]; then echo "$0 Promoting postgresql on $newmasterhost" ssh $ssh_opts -l root $newmasterhost 'pg_ctlcluster 10 main promote' fi