Central Server HA Migration

This article explains how to migrate from a Central Server HA setup (<= v6.22) that uses PostgreSQL 9.4 with BDR 1.0.x to an external PostgreSQL database cluster.

This article is only for Central Server versions <= v6.22.

The migration is completed by following the steps below.

  1. Take a backup of the Central Servers.
  2. Update Central Servers to version 6.23.0 (or later). See Central Server High Availability Installation Guide for instructions.
    • Verify that center.ha-node-name is configured in /etc/xroad/conf.d/local.ini (on each server).
  3. Create the destination database using DB super-user privileges:

    psql --host=<host> --username=<super-user, e.g. postgres> <<EOF
    create user centerui password '<password>';
    grant centerui to postgres; -- required e.g. by AWS RDS because the managed super-user does not have full privileges
    create database centerui_production owner centerui;
    \c centerui_production
    create extension hstore;
  4. Stop Central Servers.
    • Alternatively, one can leave the servers running but any modifications to the configuration (e.g. new Security Server registrations) during the upgrade are lost.
  5. Take a dump of the Central Server database:
    • Note the destination database version (e.g. PostgreSQL 10.10).
    • If necessary, install a version of the postgresql-client package that has the same major version as the destination database (e.g. postgresql-client-10).
    • (warning) Use the pg_dump version that has the same major version as the destination database. Do not use pg_dump from the BDR version of PostgreSQL.

      /usr/lib/postgresql/<major version>/bin/pg_dump --host=localhost --username=centerui --no-privileges --no-owner --schema=public --exclude-table=xroad_bdr_replication_info --dbname=centerui_production --format=c -f center.dmp
  6. Restore the dump to the new database:
    (warning) Use pg_restore that has the same major version as the destination database.

    /usr/lib/postgresql/<major version>/bin/pg_restore --list center.dmp | sed '/FUNCTION public get_xroad_bdr_replication_info()/d' >center.list
    /usr/lib/postgresql/<major version>/bin/pg_restore --host=<host> --username=centerui --dbname=centerui_production --no-owner --single-transaction --use-list=center.list center.dmp
    psql --host=<host> --username=centerui --dbname=centerui_production -c "select fix_sequence();"
  7. Update the configuration file /etc/xroad/db.properties with information about the new database.
  8. (Re)start Central Servers.
  9. If the local PosgreSQL is not used by other applications, stop the local instance and prevent it from starting:

    sudo systemctl stop postgresql
    sudo systemctl mask postgresql