Обсуждение: Warm-Backup configuration question

Поиск
Список
Период
Сортировка

Warm-Backup configuration question

От
Kenji Morishige
Дата:
I've got 2 identical servers configured exactly the same way, except for some
minor differences for the WAL logging directories.  I have both machines set up
as a NFS server and client, so that the WAL archive gets written out to the
local filesystem of the backup machine depending on which role the machine is
currently configured for.

I've been able to get the backup server syncronized by using the recover.conf
file as described in the documenation, but I can't seem to write a generic shell
script that will keep the warm-backup in a continously syncronizing mode.  It
always stops and renames the recover.conf to recover.done.

I've tried to write an alternate restore command as follows:

#!/usr/local/bin/bash
if [ -e /export/raid/pgsql/recovery.stop ]; then
  exit 1
fi
if [ -e $1 ]; then
  `/bin/cp $1 $2`
fi
sleep 5
exit 0

The documenation says that it should return 0 only if it is successfull.  My
understanding is that the recovery script should continuously try to copy the
archived data to the WAL directory so that the WARM-BACKUP server can
syncronize.  I'd like to have the WARM-BACKUP always be only a few minutes
behind in syncronization from the PRIMARY without human intervention. I can
write a cronjob to clean out the WAL archive directory accordingly.

I would be extremely gratefull for any assistance from anyone with a similar
configuration.  I must be confused by how the restore_command is supposed to
work.

Sincerely,
Kenji

Re: Warm-Backup configuration question

От
Tom Arthurs
Дата:
You need to make the script wait forever for the next archive file, or
return 1 only if you want to complete the recovery.  Here's a stub of
what we do:

#!/usr/bin/ksh

set -e

# Where copy.sh fetches WALs from
ARCHDIR=/data3/archive_log

# Name of log file that copy.sh writes to
copy_log=copy.log
# Name of stop file that copy looks for to signal "go live"
copy_stop=copy.stop

# How many seconds sleep between copy iterations
seconds=15
# Expected size of WAL file
size=16777216

src=$1
dest=$2
base=$(basename $src)

exec >>$copy_log
exec 2>&1

echo $base

case $base in
     *.history)
         echo "\tignored"
         exit 1
         ;;
     *.backup)
         size=+0
         ;;
esac


while :; do

     if [ -f $copy_stop ]; then
         echo "\tstop file"
         rm $copy_stop
         exit 1
     fi

     if [ -f "$src" ]; then
         if [ "$(find $src -size ${size}c)" ]; then

             echo "\tfound"
             cp $src $dest

             exit 0
         else
             echo "\ttoo small"
         fi
     fi

     echo "\tsleeping $seconds"
     sleep $seconds
done


Kenji Morishige wrote:
> I've got 2 identical servers configured exactly the same way, except for some
> minor differences for the WAL logging directories.  I have both machines set up
> as a NFS server and client, so that the WAL archive gets written out to the
> local filesystem of the backup machine depending on which role the machine is
> currently configured for.
>
> I've been able to get the backup server syncronized by using the recover.conf
> file as described in the documenation, but I can't seem to write a generic shell
> script that will keep the warm-backup in a continously syncronizing mode.  It
> always stops and renames the recover.conf to recover.done.
>
> I've tried to write an alternate restore command as follows:
>
> #!/usr/local/bin/bash
> if [ -e /export/raid/pgsql/recovery.stop ]; then
>   exit 1
> fi
> if [ -e $1 ]; then
>   `/bin/cp $1 $2`
> fi
> sleep 5
> exit 0
>
> The documenation says that it should return 0 only if it is successfull.  My
> understanding is that the recovery script should continuously try to copy the
> archived data to the WAL directory so that the WARM-BACKUP server can
> syncronize.  I'd like to have the WARM-BACKUP always be only a few minutes
> behind in syncronization from the PRIMARY without human intervention. I can
> write a cronjob to clean out the WAL archive directory accordingly.
>
> I would be extremely gratefull for any assistance from anyone with a similar
> configuration.  I must be confused by how the restore_command is supposed to
> work.
>
> Sincerely,
> Kenji
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
>
>

Re: Warm-Backup configuration question

От
"Mikko Partio"
Дата:


On 8/24/07, Kenji Morishige <kenjim@juniper.net> wrote:
I've got 2 identical servers configured exactly the same way, except for some
minor differences for the WAL logging directories.  I have both machines set up
as a NFS server and client, so that the WAL archive gets written out to the
local filesystem of the backup machine depending on which role the machine is
currently configured for.

I've been able to get the backup server syncronized by using the recover.conf
file as described in the documenation, but I can't seem to write a generic shell
script that will keep the warm-backup in a continously syncronizing mode.  It
always stops and renames the recover.conf to recover.done.

I've tried to write an alternate restore command as follows:

#!/usr/local/bin/bash
if [ -e /export/raid/pgsql/recovery.stop ]; then
  exit 1
fi
if [ -e $1 ]; then
  `/bin/cp $1 $2`
fi
sleep 5
exit 0

The documenation says that it should return 0 only if it is successfull.  My
understanding is that the recovery script should continuously try to copy the
archived data to the WAL directory so that the WARM-BACKUP server can
syncronize.  I'd like to have the WARM-BACKUP always be only a few minutes
behind in syncronization from the PRIMARY without human intervention. I can
write a cronjob to clean out the WAL archive directory accordingly.

I would be extremely gratefull for any assistance from anyone with a similar
configuration.  I must be confused by how the restore_command is supposed to
work.



Why don't you just use pg_standby from contrib.

Regards

MP

Re: Warm-Backup configuration question

От
Kenji Morishige
Дата:
Hmm. I recently installed 8.2.4 out of ports (FreeBSD) and didn't see that file
in contrib.  I'd like to take a look at it.
Kenji

On Fri, Aug 24, 2007 at 07:18:12AM +0300, Mikko Partio wrote:
>
>
> On 8/24/07, Kenji Morishige <kenjim@juniper.net> wrote:
>
>     I've got 2 identical servers configured exactly the same way, except for
>     some
>     minor differences for the WAL logging directories.  I have both machines
>     set up
>     as a NFS server and client, so that the WAL archive gets written out to the
>     local filesystem of the backup machine depending on which role the machine
>     is
>     currently configured for.
>
>     I've been able to get the backup server syncronized by using the
>     recover.conf
>     file as described in the documenation, but I can't seem to write a generic
>     shell
>     script that will keep the warm-backup in a continously syncronizing
>     mode.  It
>     always stops and renames the recover.conf to recover.done.
>
>     I've tried to write an alternate restore command as follows:
>
>     #!/usr/local/bin/bash
>     if [ -e /export/raid/pgsql/recovery.stop ]; then
>       exit 1
>     fi
>     if [ -e $1 ]; then
>       `/bin/cp $1 $2`
>     fi
>     sleep 5
>     exit 0
>
>     The documenation says that it should return 0 only if it is
>     successfull.  My
>     understanding is that the recovery script should continuously try to copy
>     the
>     archived data to the WAL directory so that the WARM-BACKUP server can
>     syncronize.  I'd like to have the WARM-BACKUP always be only a few minutes
>     behind in syncronization from the PRIMARY without human intervention. I can
>     write a cronjob to clean out the WAL archive directory accordingly.
>
>     I would be extremely gratefull for any assistance from anyone with a
>     similar
>     configuration.  I must be confused by how the restore_command is supposed
>     to
>     work.
>
>
>
>
> Why don't you just use pg_standby from contrib.
>
> Regards
>
> MP