mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-22 22:56:29 +00:00
Initial BDR failover documentation
This commit is contained in:
101
scripts/bdr-pgbouncer.sh
Normal file
101
scripts/bdr-pgbouncer.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
set -u
|
||||
set -e
|
||||
|
||||
# Process parameters passed to script
|
||||
# -----------------------------------
|
||||
#
|
||||
# This assumes the repmgr "event_notification_command" is defined like this:
|
||||
#
|
||||
# event_notification_command='/path/to/bdr-pgbouncer.sh %n %e %s "%c" "%a" >> /tmp/bdr-failover.log 2>&1'
|
||||
#
|
||||
# Adjust as appropriate.
|
||||
|
||||
NODE_ID=$1
|
||||
EVENT_TYPE=$2
|
||||
SUCCESS=$3
|
||||
NEXT_CONNINFO=$4
|
||||
NEXT_NODE_NAME=$5
|
||||
|
||||
if [ "$EVENT_TYPE" != "bdr_failover" ]; then
|
||||
echo "unable to handle event type '$EVENT_TYPE'"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Define database name here
|
||||
# -------------------------
|
||||
#
|
||||
# Note: this assumes the BDR-enabled database has the same name on
|
||||
# both hosts
|
||||
|
||||
BDR_DBNAME=bdr_db
|
||||
|
||||
# Define PgBouncer hosts here
|
||||
# ---------------------------
|
||||
|
||||
PGBOUNCER_HOSTS="host1 host2"
|
||||
PGBOUNCER_PORTS=(6432 6432)
|
||||
PGBOUNCER_DATABASE_INI=(/path/to/pgbouncer.database.ini /path/to/pgbouncer.database.ini)
|
||||
|
||||
|
||||
# Define local host info here
|
||||
# ---------------------------
|
||||
|
||||
THIS_HOST="host1"
|
||||
THIS_PGBOUNCER_PORT="6432"
|
||||
THIS_DB_PORT="5432"
|
||||
|
||||
# Pause all pgbouncer nodes to minimize impact on clients
|
||||
# -------------------------------------------------------
|
||||
|
||||
i=0
|
||||
for HOST in $PGBOUNCER_HOSTS
|
||||
do
|
||||
PORT="${PGBOUNCER_PORTS[$i]}"
|
||||
|
||||
psql -tc "pause" -h $HOST -p $PORT -U postgres pgbouncer
|
||||
|
||||
i=$((i+1))
|
||||
done
|
||||
|
||||
# Copy pgbouncer database ini file to all nodes and restart pgbouncer
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
i=0
|
||||
THIS_HOSTPORT="$THIS_HOST$THIS_PGBOUNCER_PORT"
|
||||
PGBOUNCER_DATABASE_INI_NEW="/tmp/pgbouncer.database.ini.new"
|
||||
|
||||
for HOST in $PGBOUNCER_HOSTS
|
||||
do
|
||||
PORT="${PGBOUNCER_PORTS[$i]}"
|
||||
|
||||
# Recreate the pgbouncer config file
|
||||
# ----------------------------------
|
||||
echo -e "[databases]\n" > $PGBOUNCER_DATABASE_INI_NEW
|
||||
|
||||
echo -e "$BDR_DBNAME= $NEXT_CONNINFO application_name=pgbouncer_$PORT" >> $PGBOUNCER_DATABASE_INI_NEW
|
||||
|
||||
# Copy file to host
|
||||
# -----------------
|
||||
CONFIG="${PGBOUNCER_DATABASE_INI[$i]}"
|
||||
|
||||
if [ "$HOST$PORT" != "$THIS_HOSTPORT" ]; then
|
||||
rsync $PGBOUNCER_DATABASE_INI_NEW $HOST:$CONFIG
|
||||
else
|
||||
cp $PGBOUNCER_DATABASE_INI_NEW $CONFIG
|
||||
fi
|
||||
|
||||
# Reload and resume PgBouncer
|
||||
# ---------------------------
|
||||
|
||||
psql -tc "reload" -h $HOST -p $PORT -U postgres pgbouncer
|
||||
psql -tc "resume" -h $HOST -p $PORT -U postgres pgbouncer
|
||||
|
||||
i=$((i+1))
|
||||
done
|
||||
|
||||
|
||||
# Clean up generated file
|
||||
rm $PGBOUNCER_DATABASE_INI_NEW
|
||||
|
||||
echo "Reconfiguration of pgbouncer complete"
|
||||
Reference in New Issue
Block a user