BDR Quick Start

From PostgreSQL wiki

This guide discusses how to quickly configure a test install of Bi-Directional Replication (BDR) for experimentation and learning. These instructions are not suitable for a production install, as they neglect security considerations, proper system administration procedure, etc. If you're trying to set up a production BDR install, see the BDR Admin Guide.

Creating and starting a test BDR install

initdb a new data directory or upgrade your current one to support BDR;

Start one or more additional BDR-patched PostgreSQL instances for replication

Logical senders and receivers on each node

For simplicitly this guide assumes that you want to start a new server instance rather than BDR-enable an existing one. As a further simplification, the instructions show the creation of multiple PostgreSQL instances on a single computer rather than the normal BDR deployment pattern of one instance per computer on multiple computers.

PostgreSQL 9.3 and below do not support BDR, and 9.4 requires patches, so this guide will not work for you if you are trying to use a normal install of PostgreSQL. (It is expected that PostgreSQL 9.5 will support the BDR extension without additional patches).

BDR only supports Linux and Mac OS X. You cannot use BDR on Windows yet. There are no fundamental technical barriers to supporting Windows, but it has not been a priority of the project.

Compiling PostgreSQL with BDR

A script to download and compile BDR is provided for your convenience. For those who prefer to do it by hand, see installing BDR from source.

(Now, on an aside, that script could've been almost anything. It's safer to download scripts like that, read them, then run the downloaded copy.)

When it finishes, the script will print:

---------------------------
BDR compiled and installed.
Sources at /home/myuser/2ndquadrant_bdr/bdr-src
Installed to /home/myuser/2ndquadrant_bdr/bdr
Now add it to your PATH:
export PATH=/home/myuser/2ndquadrant_bdr/bdr/bin:$PATH
and carry on with the quickstart at https://wiki.postgresql.org/wiki/BDR_Quick_Start
---------------------------

Adjusting your environment

To actually use these new binaries you will need to do as the quickstart script suggested and:

export PATH=$HOME/2ndquadrant_bdr/bdr/bin:$PATH

This only affects the terminal you ran it in and makes no permanent changes. For how to apply the change permanently see adjusting your environment.

Now check that you're using the BDR binaries by running:

psql --version

It should print something like:

psql (PostgreSQL) 9.4_bdr0601

that mentions BDR.

Creating BDR-enabled PostgreSQL instances

Since we're creating new PostgreSQL instances for this example, run:

initdb -D $HOME/2ndquadrant_bdr/bdr5598 -A trust -U postgres

initdb -D $HOME/2ndquadrant_bdr/bdr5599 -A trust -U postgres

to make two new PostgreSQL database server instances ("clusters").

The -A trust option tells PostgreSQL to turn off user authentication. This should never be used in production, it just keeps this quickstart simpler. Securely
configuring BDR is covered in BDR Administration.

Start the server

We'll run the two servers on ports 5598 and 5599 respectively, so they don't conflict with each other or with PostgreSQL's default port 5432.

To start the servers, which won't yet be connected to each other, run:

Each server will start up then switch to running in the background, printing:

waiting for server to start.... done
server started

If you instead get:

waiting for server to start........ stopped waiting
pg_ctl: could not start server
Examine the log output.

then take a look at $HOME/2ndquadrant_bdr/bdr5598.log or bdr5599.log (depending on which failed to start) to see what happened. Most likely you already have a server running on the target port or you're repeating a step and the BDR postgres server is already running on that port.

These parts specify a two-node BDR configuration in which the bdrdemo database on the PostgreSQL instance on port 5598 is replicated to and from the bdrdemo database on the instance on port 5599. Each node has to be told how to connect to the other node(s) in its configuration file.

The init_replica option that appears only on node 5599 means that when BDR first starts on bdr5599, the bdrdemo database's contents are automatically copied from bdr5598 into bdr5599 so that replication can begin from a consistent point. (Explicit configuration of this will be removed in a later release).

Add a pg_hba.conf entry to allow replication

PostgreSQL requires that you explicitly enable replication in the host-based access control file pg_hba.conf. So edit $HOME/2ndquadrant_bdr/bdr5598/pg_hba.conf and add the following lines (or uncomment the ones already there):