2015-03-10 14:51:31 +09:00
2015-03-10 14:51:31 +09:00
2015-02-09 18:31:18 +09:00
2011-06-07 01:42:15 -04:00
2015-03-09 12:00:05 +09:00
2015-01-03 08:12:13 +09:00
2015-03-09 12:00:05 +09:00
2015-01-03 08:12:13 +09:00
2013-12-19 01:40:00 -05:00
2015-03-09 15:48:46 +09:00
2015-01-05 09:36:48 +09:00
2015-03-06 14:35:41 +09:00
2010-10-30 13:56:40 -04:00
2015-01-03 08:12:13 +09:00
2015-01-03 08:12:13 +09:00
2015-01-03 08:12:13 +09:00
2015-03-03 07:43:02 +09:00
2015-03-04 15:54:14 +09:00
2015-03-09 12:00:05 +09:00
2015-03-03 11:13:37 +09:00
2015-01-03 08:12:13 +09:00
2015-01-03 08:12:13 +09:00
2015-01-03 08:12:13 +09:00
2014-01-30 14:10:14 +01:00
2015-01-03 08:12:13 +09:00
2015-02-20 10:10:17 +09:00

repmgr: Replication Manager for PostgreSQL clusters

repmgr is an open-source tool suite for mananaging replication and failover among multiple PostgreSQL server nodes. It enhances PostgreSQL's built-in hot-standby capabilities with a set of administration tools for monitoring replication, setting up standby servers and performing failover/switchover operations.

This document assumes you are familiar with PostgreSQL replication setup and Linux/UNIX system administration.

Repmgr 3 Features

repmgr 3 takes advantage of features introduced in PostgreSQL 9.3 and later, including timeline following and replication slots, to make setting up and managing replication smoother and easier. For earlier PostgreSQL versions please continue use the 2.x branch.

New features in repmgr 3 include:

  • uses pg_basebackup to clone servers
  • Supports timeline following, meaning a standby does not have to be restarted after being promoted to master
  • supports cascading replication
  • supports tablespace remapping (in PostgreSQL 9.3 via rsync only)
  • enables use of replication slots (PostgreSQL 9.4 and later)
  • usability improvements, including better logging and error reporting

Conceptual Overview

repmgr provides two binaries:

  • repmgr: a command-line client to manage replication and repmgr configuration
  • repmgrd: an optional daemon process which runs on standby nodes to monitor replication and node status

Each PostgreSQL node requires a repmgr.conf configuration file; additionally it must be "registered" with the current master node using the repmgr command-line client. repmgr stores information about managed nodes in a custom schema on the node's current master database; see below for details.

Supported Releases

repmgr works with PostgreSQL 9.3 and later. All server nodes must be running the same PostgreSQL major version, and preferably should be running the same minor version.

PostgreSQL versions 9.0 ~ 9.2 are supporeted by repmgr version 2.

Requirements

repmgr will work on any Linux or UNIX-like environment capable of running PostgreSQL. rsync and password-less SSH connections between servers are only required if rsync is to be used to clone standby servers. Also, if repmgr is meant to copy PostgreSQL configuration files located outside of the main data directory, pg_basebackup will not be able to copy these, and rsync will be used.

Installation

repmgr must be installed on each PostgreSQL server node.

  • Packages
  • RPM packages for RedHat-based distributions are available from PGDG
  • Debian/Ubuntu provide .deb packages.

It is also possible to build .deb packages directly from the repmgr source; see README.rst for further details.

  • Source installation

Configuration

Server configuration

By default, repmgr uses PostgreSQL's build-in replication protocol for communicating with remote servers, e.g. when cloning a primary. However, password-less SSH logins may need to be enable for the database system user (typically postgres) between all server nodes if you wish repmgr to copy configuration files not located in

PostgreSQL configuration

PostgreSQL node needs to be configured for replication with the following settings:

wal_level = 'hot_standby'      # minimal, archive, hot_standby, or logical
archive_mode = on              # allows archiving to be done
archive_command = 'cd .'       # command to use to archive a logfile segment
max_wal_senders = 10           # max number of walsender processes
wal_keep_segments = 5000       # in logfile segments, 16MB each; 0 disables
hot_standby = on               # "on" allows queries during recovery

Note that repmgr expects a default of 5000 wal_keep_segments, although this value can be overridden when executing the repmgr client.

From PostgreSQL 9.4, replication slots are available, which remove the requirement to retain a fixed number of WAL logfile segments. See 'repmgr configuration' for details.

Additionally, repmgr requires a dedicated PostgreSQL superuser account and a database in which to store monitoring and replication data. The repmgr user account will also be used for replication connections from the standby, so a separate replication user with the REPLICATION privilege is not required. The database can in principle be any database, including the default postgres one, however it's probably advisable to create a dedicated database for repmgr usage. Both user and database will be created by repmgr.

ZZZ possible to create for existing servers?

repmgr configuration

Each PostgreSQL node requires a repmgr.conf configuration file containing identification and database connection information. This is a sample minimal configuration:

cluster=test
node=1
node_name=node1
conninfo='host=repmgr_node1 user=repmgr_usr dbname=repmgr_db'
pg_bindir=/path/to/postgres/bin
  • cluster: common name for the replication cluster; this must be the same on all nodes
  • node: a unique, abitrary integer identifier
  • name: a unique, human-readable name
  • conninfo: a standard conninfo string enabling repmgr to connect to the control database; user and name must be the same on all nodes, while other parameters such as port may differ. The host parameter must be a hostname resolvable by all nodes on the cluster.
  • pg_bindir: (optional) location of PostgreSQL binaries, if not in the default $PATH

Note that the configuration file should not be stored inside the PostgreSQL data directory. The configuration file can be specified with the -f, --config-file=PATH option and can have any arbitrary name. If no configuration file is specified, repmgr will search for repmgr.conf in the current working directory.

Each node configuration needs to be registered using the repmgr command line tool; this inserts details about each node into the control database.

Example replication setup

See the QUICKSTART.md file for an annotated example setup.

Monitoring

repmgrd is a management and monitoring daemon which runs on standby nodes and which and can automate remote actions. It can be started simply with e.g.:

repmgrd -f $HOME/repmgr/repmgr.conf --verbose > $HOME/repmgr/repmgr.log 2>&1

or alternatively:

repmgrd -f $HOME/repmgr/repmgr.conf --verbose --monitoring-history > $HOME/repmgr/repmgrd.log 2>&1

which will track advance or lag of the replication in every standby in the repl_monitor table.

Example log output:

[2014-07-04 11:55:17] [INFO] repmgrd Connecting to database 'host=localhost user=repmgr_usr dbname=repmgr_db'
[2014-07-04 11:55:17] [INFO] repmgrd Connected to database, checking its state
[2014-07-04 11:55:17] [INFO] repmgrd Connecting to primary for cluster 'test'
[2014-07-04 11:55:17] [INFO] finding node list for cluster 'test'
[2014-07-04 11:55:17] [INFO] checking role of cluster node 'host=repmgr_node1 user=repmgr_usr dbname=repmgr_db'
[2014-07-04 11:55:17] [INFO] repmgrd Checking cluster configuration with schema 'repmgr_test'
[2014-07-04 11:55:17] [INFO] repmgrd Checking node 2 in cluster 'test'
[2014-07-04 11:55:17] [INFO] Reloading configuration file and updating repmgr tables
[2014-07-04 11:55:17] [INFO] repmgrd Starting continuous standby node monitoring

Failover

To promote a standby to master, on the standby execute e.g.:

repmgr -f  $HOME/repmgr/repmgr.conf --verbose standby promote

repmgr will attempt to connect to the current master to verify that it is not available (if it is, repmgr will not promote the standby).

Other standby servers need to be told to follow the new master with:

repmgr -f  $HOME/repmgr/repmgr.conf --verbose standby follow

See file autofailover_quick_setup.rst for details on setting up automated failover.

repmgr database schema

repmgr creates a small schema for its own use in the database specified in each node's conninfo configuration parameter. This database can in principle be any database. The schema name is the global cluster name prefixed with repmgr_, so for the example setup above the schema name is repmgr_test.

The schema contains two tables:

  • repl_nodes stores information about all registered servers in the cluster
  • repl_monitor stores monitoring information about each node (generated by repmgrd

and one view, repl_status, which summarizes the latest monitoring information for each node.

Support and Assistance

2ndQuadrant provides 24x7 production support for repmgr, including configuration assistance, installation verification and training for running a robust replication cluster.

There is a mailing list/forum to discuss contributions or issues http://groups.google.com/group/repmgr

#repmgr is registered in freenode IRC

Further information is available at http://www.repmgr.org/

We'd love to hear from you about how you use repmgr. Case studies and news are always welcome. Send us an email at info@2ndQuadrant.com, or send a postcard to

repmgr c/o 2ndQuadrant 7200 The Quorum Oxford Business Park North Oxford OX4 2JZ United Kingdom

Thanks from the repmgr core team.

Ian Barwick Jaime Casanova Abhijit Menon-Sen Simon Riggs Cedric Villemain

Further reading

repmgr v5.5.0 Latest
2024-11-22 14:34:48 +00:00
Languages
C 98.1%
Lex 1.3%
Makefile 0.4%
Perl 0.2%