Monitor Hot Standby Continue...
As discussed in previous Blogs about Hot Standby in following links:
1. Monitoring Hot Standby
2. HotStandby in PostgreSQL 9.0.
I came up with the following Monitoring Script for Hot Standby.
Usage:
1. Monitoring Hot Standby
2. HotStandby in PostgreSQL 9.0.
I came up with the following Monitoring Script for Hot Standby.
#!/bin/bash # Filename: monitor_hotstandby # Usage is $0 -m master:port -s slave:port -b "PostgreSQL Bin Directory" # Author: Vibhor Kumar # Date: Jan 4th 2011 # E-mail: vibhor.aim@gmail.com while getopts "m:s:b:" opt;do case $opt in m) h1=`echo $OPTARG|cut -d":" -f1` p1=`echo $OPTARG|cut -d":" -f2`;; s) h2=`echo $OPTARG|cut -d":" -f1` p2=`echo $OPTARG|cut -d":" -f2`;; b) PGHOME="$OPTARG" esac done PSQL=$PGHOME/psql function usage() { if [ -z $h1 ];then echo "USAGE: " echo "$0 -m master:port -s slave:port -b pg bin directory" exit 1 fi if [ -z $h2 ];then echo "USAGE: " echo "$0 -m master:port -s slave:port -b pg bin directory" exit 1 fi if [ -z $p1 ];then echo "USAGE: " echo "$0 -m master:port -s slave:port -b pg bin directory" exit 1 fi if [ -z $p2 ];then echo "USAGE: " echo "$0 -m master:port -s slave:port -b pg bin directory" exit 1 fi if [ -z $PGHOME ];then echo "USAGE: " echo "$0 -m master:port -s slave:port -b pg bin directory" exit 1 fi } function verifybin_connect() { if [ -f $PGHOME/psql ];then : else echo "ERROR: psql Not Found!" exit 1 fi Q="SELECT 'ping';" $PGHOME/psql -h $1 -p $2 -c "$Q1" >/dev/null 2>/dev/null if [ $? -ne 0 ];then echo "ERROR: Master is not pinging on $h1" exit 1 fi $PGHOME/psql -h $3 -p $4 -c "$Q1" >/dev/null 2>/dev/null if [ $? -ne 0 ];then echo "ERROR: Slave is not pinging on $h2" exit 1 fi } function verify_is_recovery() { Q="select pg_is_in_recovery()::int;" status=`$PGHOME/psql -c "$Q" -t -h $1 -p $2 template1|sed '/^$/d'` if [ $status -eq 1 ];then echo "MESSAGE: PG is in Recovery Mode" else echo "ERROR: Slave is out of Recovery Mode" exit 1 fi } function convert_decimal() { decimalval=`echo "ibase=16;obase=A;$1"|bc` echo $decimalval } function get_xlog_name() { Q1="select pg_xlogfile_name('$1');" xlogname=`$PSQL -h $2 -p $3 -t -c "$Q1" template1|sed '/^$/d'` echo $xlogname } function main() { verifybin_connect $1 $2 $3 $4 verify_is_recovery $3 $4 Q1="select pg_current_xlog_location();" Q2="select pg_last_xlog_receive_location();" Primxlog=`$PSQL -t -c "$Q1" -h $1 -p $2 template1|sed '/^$/d'` Secxlog=`$PSQL -t -c "$Q2" -h $3 -p $4 template1|sed '/^$/d'` secwal=`get_xlog_name $Secxlog $1 $2` primwal=`get_xlog_name $Primxlog $1 $2` primloc=`convert_decimal $primwal` secloc=`convert_decimal $secwal` result=`echo $primloc - $secloc|bc` if [ $result -ne 0 ];then echo "ALERT:: Seconday is lagging behind by $result files" else echo "Streaming Replication between $h1 -> $h2 is in Sync" fi } usage main $h1 $p1 $h2 $p2
Usage:
monitor_hotstandby -m masterhost:masterport -s slavehost:slaveport -b PG Bin directory.Example is given below:
./monitor_hotstandby -m master:5432 -s slave:5432 -b /opt/PostgreSQL/9.0/bin MESSAGE: PG is in Recovery Mode Streaming Replication between Master -> Slave is in Sync
Comments
Post a Comment