dbmirror revisions - Mailing list pgsql-general

From Ed L.
Subject dbmirror revisions
Date
Msg-id 200304031637.03517.pgsql@bluepolka.net
Whole thread Raw
Responses Re: dbmirror revisions  ("Ed L." <pgsql@bluepolka.net>)
Re: dbmirror revisions  ("Ed L." <pgsql@bluepolka.net>)
Re: dbmirror revisions  ("Ed L." <pgsql@bluepolka.net>)
Re: dbmirror revisions  ("Ed L." <pgsql@bluepolka.net>)
Re: dbmirror revisions  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-general
I've been modifying dbmirror and wanted to offer my changes to anyone that
cared to experiment, FWIW.  My effort is ongoing, the docs aren't perfect,
I make no claims of production readiness, and testing of this latest
version has been minimal, so I strongly advise you to conduct your own
thorough testing before considering a production deployment.  That said,
it's a significantly improved solution for our async master-slave needs,
with a few caveats below, and shouldn't be too hard to setup.

There are enough changes that I would hardly consider this a patch,  closer
to an overhaul, since I've removed files, renamed others, and added new
files.  Among the changes I've made so far:

    * Added script for easier setup of many tables/dbs/slaves;
    * Added initial support for multiple master replicating distinct data to a
single slave;
    * Added batching to minimize load on master and net traffic.  You can grab
a configurable number of updates to replicate before hitting the master
again.

    * Added port specification;
    * Wrapped all replication in transactions;
        * Bulletproofed against downed master or slave;
        * Started modularization of DB access layer, added some error
handling;
        * Added a number of config vars for sync delays, etc;
        * Eliminated bug in transaction ordering for replay.  Updates cannot
be replicated in the order of the transactions (see archives for discussion
of why).

        * Eliminated need for clear_pending.pl by making dbmirror.pl
self-clearing;
        * Collasped schema into 1 queue table for performance;
        * Changed sequence ID column types to BIGINT for 64-bit sequence;
        * Added reconnection handling for robustness;
        * Added local tracking of last seq_id to help with recovery
robustness;
        * Added master/slave compatibility checking;
        * Enabled slave setup during production service so master does not
have to stop serving.
        * Renamed tables to minimize namespace conflicts;
        * Added lots of logging/debug messages;

    * Maybe a few other things I've forgotten...


AFAICS, there are still at least a few major drawbacks to this approach:

    *  DML statements are not replicated (same for eRServer, AFAIK).

    *  SEQUENCE objects are not handled;  nextval() will not be replicated, so
sequence objects (and serial columns) between master and slave can easily
get out of sync.  I wonder if eRServer has this same issue?

    *  Mass updates/deletes/inserts of 5000 rows with a single SQL command on
the master will result in 5000 individual trigger-firings, and 5000
individual replication inserts on the slave.  Rumor has it eRServer's
snapshot gets around this problem.

The code is here:

    http://bluepolka.net/dbmirror/dbmirror-20030403-1605.tar.gz

Ed


pgsql-general by date:

Previous
From: Manfred Koizar
Date:
Subject: Re: Single Byte values
Next
From: "Ed L."
Date:
Subject: Re: dbmirror revisions