Postgresql

PGPool II - 目前主節點死亡時的故障轉移

  • February 23, 2018

我有一個 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_commandfollow_master_commandfailback_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

引用自:https://dba.stackexchange.com/questions/159370