Commit Graph

291 Commits

Author SHA1 Message Date
Ian Barwick
ff63954c68 do_standby_clone(): primary_conn -> upstream_conn
We could be cloning from a standby.
2015-03-06 17:44:06 +09:00
Ian Barwick
1a9fbd623f Fix log message 2015-03-06 16:10:53 +09:00
Ian Barwick
491309f4ba Write events of note to a log table
This makes keeping track of events such as failovers
much easier. Note that this is for convenience and is
not a foolproof auditing log.

Sample output:

repmgr_db=# SELECT * from repmgr_test.repl_events ;
 node_id |          event           | successful |        event_timestamp        |                         details
---------+--------------------------+------------+-------------------------------+----------------------------------------------------------
       1 | master_register          | t          | 2015-03-06 14:14:08.196636+09 |
       2 | standby_clone            | t          | 2015-03-06 14:14:17.660768+09 | Backup method: pg_basebackup; --force: N
       2 | standby_register         | t          | 2015-03-06 14:14:18.762222+09 |
       4 | witness_create           | t          | 2015-03-06 14:14:22.072815+09 |
       3 | standby_clone            | t          | 2015-03-06 14:14:23.524673+09 | Backup method: pg_basebackup; --force: N
       3 | standby_register         | t          | 2015-03-06 14:14:24.620161+09 |
       2 | repmgrd_start            | t          | 2015-03-06 14:14:29.639096+09 |
       3 | repmgrd_start            | t          | 2015-03-06 14:14:29.641489+09 |
       4 | repmgrd_start            | t          | 2015-03-06 14:14:29.648002+09 |
       2 | standby_promote          | t          | 2015-03-06 14:15:01.956737+09 | Node 2 was successfully be promoted to master
       2 | repmgrd_failover_promote | t          | 2015-03-06 14:15:01.964771+09 | Node 2 promoted to master; old master 1 marked as failed
       3 | repmgrd_failover_follow  | t          | 2015-03-06 14:15:07.228493+09 | Node 3 now following new upstream node 2
(12 rows)
2015-03-06 14:35:41 +09:00
Ian Barwick
072c2d70ff Reformat comment for legibility 2015-03-05 17:54:34 +09:00
Ian Barwick
1f9b19f3ff Add configuration option ignore_external_config_files 2015-03-05 13:46:55 +09:00
Ian Barwick
04fe820aff Note where compatibility check for replication slots is carried out
Scanning the source code gives the impression there's no check.
2015-03-05 10:12:36 +09:00
Ian Barwick
0f8759d316 Consolidate duplicated code 2015-03-04 17:27:51 +09:00
Ian Barwick
defb1e819b Add some annotations 2015-03-04 10:36:19 +09:00
Ian Barwick
e3b734f177 Check for max_replication_slots > 0 2015-03-03 18:51:58 +09:00
Ian Barwick
238fc589a1 Improve logging of configuration file operations 2015-03-03 18:14:26 +09:00
Ian Barwick
46888de77f Improve configuration file handling
Put logic in config.c so it can be shared between repmgr and repmgrd.
2015-03-03 15:39:56 +09:00
Ian Barwick
6b1f55ff1b Improve command line error handling
Per e.g. this complaint:

 https://groups.google.com/d/msg/repmgr/a-SMIQFGDBs/rgRH3p4ZPgYJ

Before:

    $ repmgr -f /etc/postgres/repmgr.conf cluster status

    repmgr: Replicator manager
    Try "repmgr --help" for more information.

after:

    $ repmgr -f /etc/postgres/repmgr.conf cluster status
    repmgr: Replication manager
    [ERROR] Unknown server command 'status'
    Try "repmgr --help" for more information.
2015-03-03 11:13:37 +09:00
Ian Barwick
3d3f082617 Ensure witness server updates its node records following a failover
This involves mainly abstracting the functions which copy
and create records from repmgr.c to dbutils.c, as they need
to be shared between repmgr and repmgrd.

Per issue noted here:

  https://groups.google.com/forum/#!topic/repmgr/v5nu1Xwf6X0
2015-03-03 08:57:20 +09:00
Ian Barwick
b79bce5821 Support tablespace mapping in --rsync-only mode
This makes it practical to take a back with rsync where tablespaces
require remapping. It also makes tablespace remapping possible for
9.3, where pg_basebackup does not support this option.
2015-03-01 14:10:17 +09:00
Ian Barwick
a69176fc1b tablespace_dirs -> tablespace_mapping
For consistency with the parameter name.
2015-02-28 11:03:03 +09:00
Ian Barwick
ff30df3d96 In rsync mode, move pg_control last
Emulate the backup protocol as much as possible.
2015-02-27 19:27:46 +09:00
Ian Barwick
74e4b6aa3c Refactor rsync file/directory exclusion
Better simulate what goes on in 'src/backend/replication/basebackup.c';
avoid copying some files/directories introduced in 9.4.
2015-02-27 15:59:47 +09:00
Ian Barwick
22dd164cbb Clarify intent 2015-02-27 13:29:21 +09:00
Ian Barwick
63c416bb76 Set synchronous_commit to off for current session
Forward-ported from 2.x; need to verify it makes sense.
2015-02-27 11:40:57 +09:00
Ian Barwick
2eb242553a Fix log message 2015-02-27 09:57:18 +09:00
Ian Barwick
e3ecd3cdc5 Move cluster size check to an earlier point
Seems to make more sense that way.
2015-02-25 14:28:42 +09:00
Ian Barwick
32611f5f04 Add --rsync-only option
Sometimes it's desirable to re-sync a "stale" data directory
on a standby, rather than start from scratch with pg_basebackup().

This re-adds the rsync code from the 2.x series, with some
modifications.

TODO: tablespace support.
2015-02-25 14:17:09 +09:00
Ian Barwick
ba254d2f06 Clarify comment 2015-02-24 16:00:28 +09:00
Ian Barwick
3e6659dda0 Modify log message for consistency and testing
Pre-3.0: 'repmgr standby clone complete'
3.0: 'repmgr standby clone (using pg_basebackup) complete' or
     'repmgr standby clone (using rsync) complete'
2015-02-20 12:29:15 +09:00
Ian Barwick
b453c6a533 Fix master port check
Check introduced in dc0dfe9b56
was comparing the provided database name instead of the port.
2015-02-12 14:44:05 +09:00
Jaime Casanova
eabb3cb1ab Add "--checksum" in rsync when using "--force"
If the user don't put that option in rsync_options using of "--force"
could be unsafe.
While the probability of failures because of this are low they aren't
zero.
2015-02-11 10:38:35 +09:00
Ian Barwick
2d82ade170 Clarify error message 2015-02-10 10:21:17 +09:00
Ian Barwick
21730899da Clarify error message.
Avoid implying there's a configuration file if none was provided.
2015-02-10 10:08:49 +09:00
Ian Barwick
94bc5bdf80 Remove unneeded function 2015-02-09 18:31:18 +09:00
Ian Barwick
1369fe5c79 Rename 'test_mode' to 'target_directory_provided'
Which describes its meaning more accurately.

Also update some comments.
2015-02-09 16:32:21 +09:00
Ian Barwick
e71dd4945e Remove duplicated error message 2015-02-09 13:42:51 +09:00
Ian Barwick
49d1abf130 rempgr: adapt tablespace handling for 9.4 and later
See note in code about 9.3.

Also ensure that no empty parameters are passed to pg_basebackup.
2015-02-09 13:39:18 +09:00
Ian Barwick
1d28a2d08e runtime_options.wal_keep_segments is prepopulated with default value
Explicitly track if setting came from command line parameter.
2015-02-05 11:55:52 +09:00
Ian Barwick
9ceef937eb Emit warning if -w/--wal-keep-segments used when use_replication_slots set 2015-02-05 11:17:23 +09:00
Ian Barwick
f047ec9526 Use DEFAULT_WAL_KEEP_SEGMENTS in help output instead of hard-coded number 2015-02-04 14:08:55 +09:00
Ian Barwick
a3f0e89a05 Improve pg_bindir parameter handling
Previously, the pg_bindir parameter was mandatory and could only be
provided in the repmgr.conf file, which was leading to the slightly
bizarre situation that e.g. for "clone standby", repmgr was complaining
that it didn't want the configuration file when it actually did.

pg_bindir is now optional - if not provided, it will use the default
path. It can be provided in the repmgr.conf file, or as a command
line parameter; the latter overrides the former.
2015-02-04 14:04:04 +09:00
Ian Barwick
3d9d0d98af Improve repmgr configuration file handling
Previous behaviour was somewhat counterintuitive, with an error
message being logged if no configuration file provided or found,
even though this is not actually an error.

Configuration files now handled like this:

- if a configuration file is explicitly provided (-f), error out
  if not found.

- if no configuration file explicitly provided, attempt to open
  default configuration file; if this does not exist, log
  notice and continue with default values.

Also, for 9.4 and later add a hint about replication slot usage
if 'use_replication_slots' not set.
2015-02-04 09:57:51 +09:00
Ian Barwick
49debcdf92 Add version check if replication slot usage requested
Replication slots require 9.4 or greater
2015-02-02 22:16:04 +09:00
Ian Barwick
7a760c32ff Store slot name in repl_nodes table 2015-02-02 17:57:15 +09:00
Ian Barwick
b4b5e6cd30 do_standby_clone(): rename conn to primary_conn
For clarity.
2015-02-02 16:53:35 +09:00
Ian Barwick
2ece014952 Initial support for physical replication slots
Todo:
 - if slots specified in repmgr.conf, verify server version
 - store generated slot name in `repl_nodes` table
2015-02-02 15:53:53 +09:00
Ian Barwick
01360c3d39 Improve repl_status view. 2015-01-29 15:08:37 +09:00
Ian Barwick
031a726f04 Enable get_master_connection() to accept a null value for master_id
Saves worrying about the purpose of various superfluous ints
2015-01-29 11:25:01 +09:00
Ian Barwick
c413cff461 Function to update node records 2015-01-16 14:14:04 +09:00
Ian Barwick
a82d37e48a Improve node metadata and upstream connecting mechanism
To handle cascaded replication we're going to have to keep track
of each node's upstream node. Also enumerate the node type
("primary", "standby" or "witness") and mark if active.
2015-01-16 10:28:02 +09:00
Ian Barwick
4b6c097a3e Use AS for consistency 2015-01-16 08:46:28 +09:00
Ian Barwick
3dfa33d01d Store upstream node ID if set
Required to manage cascaded standbys
2015-01-16 00:29:43 +09:00
Ian Barwick
a20afe28ec Add upstream_node_id to repl_nodes table 2015-01-15 23:54:07 +09:00
Ian Barwick
692204e381 Consolidate duplicated schema check code 2015-01-15 18:34:51 +09:00
Ian Barwick
d141d2a8aa Remove unused variable 2015-01-14 16:25:24 +09:00