Commit Graph

277 Commits

Author SHA1 Message Date
Ian Barwick
4f2161bd83 Cleanup various #defines 2017-08-10 15:11:53 +09:00
Ian Barwick
970ed5d959 Bump minimum supported version to 9.5
We assume availability of pg_rewind.
2017-08-10 15:07:32 +09:00
Ian Barwick
cc52227d61 Miscellaneous cleanup 2017-08-10 15:05:01 +09:00
Ian Barwick
7ca68b7cc8 Standardize "primary_conninfo" generation
Previously repmgr would write all the default libpq parameters
into "primary_conninfo" on "standby clone", but not for
"standby follow", which is inconsistent.

For repmgr4 we'll determine that the upstream node's conninfo
must be canonical and contain all required connection parameters,
even if these are available as defaults or environment variables
in the local environment, as those are transient and may not
be available in all environments/situations.

recovery.conf's "primary_conninfo" will be generated using the
upstream's conninfo parameters, except for those specific
to the downstream node. These are:

  - "application_name": this will always be set to the
      "node_name"  of the downstream node
  - "passfile" and "servicefile": these, must of course
    reference files on the downstream node so will be extracted
    from the downstream node's conninfo, if set
2017-08-10 12:37:50 +09:00
Ian Barwick
1cb0adfdcb Finalize switchover process 2017-08-10 09:34:48 +09:00
Ian Barwick
5fb86771b1 Use stored node configuration file path when executing remote commands
Makes life much easier.
2017-08-10 09:12:07 +09:00
Ian Barwick
1d99a07b43 Store configuration file in repmgr.nodes table
When executing repmgr on remote nodes, we otherwise end up jumping
through hoops as we can't make assumptions about where the configuration
file is located, but really need to be able to provide it.

From a support point of view it will also make life easier as it will
be easy to specify exactly which file to provide.
2017-08-10 08:03:24 +09:00
Ian Barwick
a57fb5b50c After switchover, enable sibling standbys to follow new primary 2017-08-10 00:06:16 +09:00
Ian Barwick
4930c95ef7 Consolidate final output of "standby follow" / "node rejoin" 2017-08-09 19:31:42 +09:00
Ian Barwick
bae82318f1 No need to expose configuration file archive functions as repmgr commands 2017-08-09 13:32:15 +09:00
Ian Barwick
df425a38b7 Refactor "standby follow" functionality
"standby follow" was originally co-opted to start up a demoted node;
this functionality is now delegated to "node rejoin", with the core
functionality of "standby follow" implemented as an internal function.
2017-08-09 13:26:27 +09:00
Ian Barwick
b1e544f962 Enable use of pg_rewind during switchover operations
But only if required and --force-rewind required, and pg_rewind
can actually be used.
2017-08-09 12:09:37 +09:00
Ian Barwick
2553839630 Split actual promote functionality of do_standby_promote() into seperate function
No need to do all the sanity checks performed by "repmgr standby promote"
when promoting the standby during a switchover operation.
2017-08-08 10:45:56 +09:00
Ian Barwick
f2cf46bba3 Check replication lag before attempting switchover 2017-08-08 10:16:47 +09:00
Ian Barwick
fd5dfa2ebc Document "archiver_lag_*" configuration settings. 2017-08-08 00:50:12 +09:00
Ian Barwick
2499b42ef8 switchover: check for pending archive files on the demotion candidate
If the current primary (demotion candidate) still has any files to archive,
it will delay the shutdown until all files are archived. If there is a
substantial number of files, and/or the archive command executes slowly,
this will probably lead to an unwelcome delay in the switchover process.
2017-08-08 00:37:20 +09:00
Ian Barwick
068ecc963d Minor log output fix 2017-08-04 23:58:15 +09:00
Ian Barwick
20eeeef884 don't try and drop non-existent slot after switchover 2017-08-04 14:20:38 +09:00
Ian Barwick
972f8394ff Fix slot deletion after switchover 2017-08-04 13:16:46 +09:00
Ian Barwick
82639b6903 Refactor slot name handling
Better to work with the slot name in a node record, rather than
creating a global variable.
2017-08-04 11:56:11 +09:00
Ian Barwick
2c682b31c2 Attempt to delete replication slot on old primary after switchover 2017-08-04 11:55:54 +09:00
Ian Barwick
c34f5c1ed1 Initial switchover code 2017-08-04 09:39:30 +09:00
Ian Barwick
5948cf6cda repmgr standby switchover: add sanity check for pg_rewind useability
pg_rewind will only be executed on a demoted primary if explictly
requested, to prevent transactions on the primary, which
were never replicated, from being automatically overwritten.

If --force-rewind is provided, we'll need to check pg_rewind
is actually useable before we need to use it.
2017-08-04 00:45:55 +09:00
Ian Barwick
0815accdef Formatting fix 2017-08-03 23:58:25 +09:00
Ian Barwick
7d77fd4072 Log successful switchover event 2017-08-03 17:02:30 +09:00
Ian Barwick
112ca6321a Initial switchover implementation
The repmgr3 implementation required the promotion candidate (standby)
to directly work with the demotion candidate's data directory,
directly execute server control commands etc.

Here we delegated a lot more of that work to the repmgr on the
demotion candidate, which reduces the amount of back-and-forth
over SSH and generally makes things cleaner and smoother.

In particular the repmgr on the demotion candidate will carry
out a thorough check that the node is shut down and report
the last checkpoint LSN to the promotion candidate; this
can then be used to determine whether pg_rewind needs to be
executed on the demoted primary before reintegrating it back
into the cluster (todo).

Also implement "--dry-run" for this action, which will sanity-check the
nodes as far as possible without executing the switchover.

Additionally some of the new repmgr node commands (or command options)
introduced for this can be also executed by the user to obtain
additional information about the status of each node.
2017-08-03 16:38:37 +09:00
Ian Barwick
c67aa15581 Make "pgdata" a mandatory configuration file setting
There are some circumstances, e.g. during switchover operations,
where repmgr may need to operate on a data directory while the
server isn't running, in which case there's no way to retrieve
that information.
2017-08-02 23:04:24 +09:00
Ian Barwick
83cda89362 Get data directory for server commands if needed
Also add configuration file option "pgdata" for hard-coding the
node's data directory - if the "repmgr" DB user isn't a superuser
or doesn't have permission to extract the data directory, we'll
need another way of finding out.
2017-08-02 13:16:16 +09:00
Ian Barwick
791640e3b4 repmgrd: never execute "service_promote_command" directly 2017-08-02 12:09:25 +09:00
Ian Barwick
aa528dfdfb Consolidate generation of various server control commands
This is needed for better switchover control, so we can instruct
the remote repmgr to issue the appropriate server command rather
than trying to work out what it should be from the local node.
2017-08-02 12:01:20 +09:00
Ian Barwick
5b7b276ada Make log levels case-insensitive 2017-08-02 09:46:53 +09:00
Ian Barwick
e5d50bbfd5 Separate configuration file queries into a discrete function
Simplifies main application code and makes it easier to reuse
the queries.
2017-08-02 00:04:20 +09:00
Ian Barwick
a1ad62d04e Add "repmgr node restore-config" 2017-08-01 22:13:32 +09:00
Ian Barwick
f023b9c90c Add "repmgr node archive-config" 2017-08-01 17:38:54 +09:00
Ian Barwick
3683d096f1 Avoid using PG_VERSION_NUM in frontend code
Debian.
2017-08-01 10:43:42 +09:00
Ian Barwick
8a5665a421 repmgr node status: add information about current LSN locations for streaming standbys 2017-08-01 10:34:12 +09:00
Ian Barwick
d00cb63179 repmgrd: prevent segfault if no configfile provided 2017-07-31 12:54:23 +09:00
Ian Barwick
fbe74cbee4 Rename repmgr{d}4 binaries to repmgr{d}
This was useful during initial development but now no longer required.
2017-07-31 10:37:15 +09:00
Ian Barwick
8d7d83347a repmgrd: add log line to indicate node recovery detected 2017-07-31 09:58:13 +09:00
Ian Barwick
3582a80e48 Rename package from repmgr4 to repmgr 2017-07-28 12:21:55 +09:00
Ian Barwick
dd73039d02 Update BDR documentation 2017-07-27 21:44:10 +09:00
Ian Barwick
7cf3b9b618 repmgrd: improve logging of BDR monitoring
Also always log information about event_notification command
2017-07-27 21:12:41 +09:00
Ian Barwick
0037d58dae Update README 2017-07-27 18:12:29 +09:00
Ian Barwick
5606434a97 Initial BDR failover documentation 2017-07-27 18:11:49 +09:00
Ian Barwick
42ecf5de74 Add TODO for repmgr cluster show 2017-07-27 18:11:13 +09:00
Ian Barwick
4c2ba42000 Update sample configuration file 2017-07-27 18:10:56 +09:00
Ian Barwick
4cf66c33db repmgrd: more fixes to BDR recovery handling 2017-07-27 16:33:41 +09:00
Ian Barwick
b4a655d074 Update README 2017-07-27 16:33:23 +09:00
Ian Barwick
fed6fba4ef repmgrd: more fixes for BDR node recovery 2017-07-27 14:13:39 +09:00
Ian Barwick
dc24d62009 repmgrd: improve BDR recovery handling 2017-07-27 11:53:55 +09:00