#!/bin/bash # This script is run by recovery_1st_stage to recovery the slave from the primary. set -o xtrace exec > >(logger -i -p local1.info) 2>&1 PRIMARY_NODE_HOST=$(hostname -s) PRIMARY_NODE_PORT=$4 PRIMARY_NODE_PGDATA="$1" DEST_NODE_HOST="$2" DEST_NODE_PGDATA="$3" PGHOME=/applic/postgres/10 ARCHIVEDIR=/backup/pg_basebackup/current/wal_archive REPLUSER=replicuser logger -i -p local1.info online_recovery.sh: start: pg_basebackup for $DEST_NODE_HOST # Run pg_basebackup to recovery the slave from the primary ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@$DEST_NODE_HOST " rm -rf $DEST_NODE_PGDATA ${PGHOME}/bin/pg_basebackup -h $PRIMARY_NODE_HOST -U $REPLUSER -p $PRIMARY_NODE_PORT -D $DEST_NODE_PGDATA --wal-method=stream " if [[ $? -ne 0 ]]; then logger -i -p local1.error online_recovery.sh: end: pg_basebackup failed. online recovery failed. exit 1 fi ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@$DEST_NODE_HOST " rm -rf $ARCHIVEDIR/* cat > $DEST_NODE_PGDATA/recovery.conf << EOF standby_mode = 'on' primary_conninfo = 'user=$REPLUSER password=user4rep host=$PRIMARY_NODE_HOST port=$PRIMARY_NODE_PORT sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any' restore_command = 'cp /backup/pg_basebackup/current/wal_archive/%f %p' EOF " if [[ $? -ne 0 ]]; then logger -i -p local1.error online_recovery.sh: end: online recovery failed exit 1 else logger -i -p local1.info online_recovery.sh: end: online recovery is finished exit 0 fi