PITRTools: Multiple slave support
I gave a lightning talk at Pg Conference: West 08 about a tool that I have developed call PITRTools. PITRTools is a python based log shipping utility. Essentially it wraps itself around standard tools such as rsync, and pg_standby to provide a usable experience. Some of the features is provides are:
  • Auto initialization of environment
  • Simple base backups
  • Monitoring of Master
  • Arbitrary alerts
  • Failover
  • Failover actions
  • etc...
In all it is by far the simplest and most effective tool for PostgreSQL standby that I have used (of course I wrote it so...). One of the features recently added to PITRTools is multi-slave support. The way it works is like this:
   Archiver checks for logs in local queue
      if found
         archiver attempts to sends (queued) logs to slave N
         if success
            archiver sends new archive to slave N
            if success
               continue
            if fail
               archive local
               if success 
                  continue
               if fail
                  bail out really loudly (FATAL)
               exit 1
         if fail
            archive local
            if success 
                  continue
               if fail
                  bail out really loudly (FATAL)
               exit 1
      if not found
         Archiver sends log to Slave N
         if success
            continue
         if fail
            archive local (queue)
            if success
               continue
            if fail
               bail out really loudly (FATAL)
         continue
   if fail
      queue
      exit 1
   exit 0
One of the key requirements of PITRTools was no extra support. It requires no extra Python modules just Python >= 2.5 AND Python <= 2.6. No it is not 3.0 safe, but will be soon enough. Give it a whirl and let us know what you think, its BSD licensed. To get PITRTools you can check it out like so:
svn co https://projects.commandprompt.com/public/pitrtools/repo pitrtools
It's BSD licensed. Have at it.