Reputation: 1
failback.sh
echo failover.sh: start: failed_node_id=$FAILED_NODE_ID failed_host=$FAILED_NODE_HOST \
old_primary_node_id=$OLD_PRIMARY_NODE_ID new_main_node_id=$NEW_MAIN_NODE_ID new_main_host=$NEW_MAIN_NODE_HOST
## If there's no main node anymore, skip failover.
if [ $NEW_MAIN_NODE_ID -lt 0 ]; then
echo failover.sh: All nodes are down. Skipping failover.
exit 0
fi
## Test passwordless SSH
ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} ls /tmp > /dev/null
if [ $? -ne 0 ]; then
echo failover.sh: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} failed. Please setup passwordless SSH.
exit 1
fi
## If Standby node is down, skip failover.
if [ $OLD_PRIMARY_NODE_ID != "-1" -a $FAILED_NODE_ID != $OLD_PRIMARY_NODE_ID ]; then
# If Standby node is down, drop replication slot.
${PGHOME}/bin/psql -h ${OLD_PRIMARY_NODE_HOST} -p ${OLD_PRIMARY_NODE_PORT} postgres \
-c "SELECT pg_drop_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo ERROR: failover.sh: drop replication slot \"${REPL_SLOT_NAME}\" failed. You may need to drop replication slot manually.
fi
echo failover.sh: end: standby node is down. Skipping failover.
exit 0
fi
## Promote Standby node.
echo failover.sh: primary node is down, promote new_main_node_id=$NEW_MAIN_NODE_ID on ${NEW_MAIN_NODE_HOST}.
ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} ${PGHOME}/bin/pg_ctl -D ${NEW_MAIN_NODE_PGDATA} -w promote
echo "primary_conninfo = 'user=repuser passfile=''/home/postgres/.pgpass'' channel_binding=prefer host=${NEW_MAIN_NODE_HOST} port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'" >> ${FAILED_NODE_PGDATA}/postgresql.auto.conf
# Create standby.signal file to indicate it's a standby node
touch ${FAILED_NODE_PGDATA}/standby.signal
if [ $? -ne 0 ]; then
echo ERROR: failover.sh: end: failover failed
exit 1
fi
echo failover.sh: end: new_main_node_id=$NEW_MAIN_NODE_ID on ${NEW_MAIN_NODE_HOST} is promoted to a primary
exit 0
I modified it based on examples. Except for "primary_conninfo" and the part that builds "standby.signal"
when i stop and start postgresql ,the old primary status became standby , stream replication still work
but when i check pgpool => show pool_nodes;
pg-status is up ,but status down log does not show any error message,What happened? How do I fix it?
did i miss any config?Also, I would like to ask when should failback be used?
Upvotes: 0
Views: 180