はじめに
PostgreSQLのMaster/Slave構成で、普段Slaveでバックアップ取得しているとして、HA構成などでフェイルオーバが発生すると今までSlaveだったノードがMasterになってしまい、よろしくありません。
そこでバックアップ実行前に自分がSlaveかどうか確認する処理を入れます。
このスクリプトをMaster/Slave両方で定期実行させればSlaveのみバックアップを取得できます。
前提
rootで実行されることを想定
スクリプト
スクリプト
#!/bin/sh
hostname=`/bin/hostname`
date=`/bin/date +"%Y%m%d_%H%M"`
filename="/PATH/TO/BACKUP/${hostname}_${date}.sql.gz"
is_slave=`sudo -i -u postgres psql -t -c "select pg_is_in_recovery()"`
if [ $is_slave = "t" ]; then
/usr/bin/pg_dumpall | gzip - > ${filename}
else
exit 1
fi
exit 0