mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-28 01:16:29 +00:00
Enable repmgr standby switchover for 9.3/9.4 by recloning
A bit of a hack and unsuited for large databases - install pg_rewind instead. Or upgrade to 9.5.
This commit is contained in:
61
repmgr.c
61
repmgr.c
@@ -2678,18 +2678,24 @@ do_standby_switchover(void)
|
|||||||
|
|
||||||
/* TODO: check file actually exists on remote */
|
/* TODO: check file actually exists on remote */
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
use_pg_rewind = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SANITY CHECKS completed
|
* Sanity checks completed - prepare for the switchover
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When using pg_rewind (the preferable option), we need to
|
* When using pg_rewind (the preferable option, and default from 9.5
|
||||||
* archive any configuration files in the remote server's
|
* onwards), we need to archive any configuration files in the remote
|
||||||
* data directory as they'll be overwritten by pg_rewind
|
* server's data directory as they'll be overwritten by pg_rewind
|
||||||
|
*
|
||||||
|
* Possible todo item: enable the archive location to be specified
|
||||||
|
* by the user
|
||||||
*/
|
*/
|
||||||
if (use_pg_rewind == true)
|
if (use_pg_rewind == true)
|
||||||
{
|
{
|
||||||
@@ -2870,8 +2876,51 @@ do_standby_switchover(void)
|
|||||||
|
|
||||||
termPQExpBuffer(&command_output);
|
termPQExpBuffer(&command_output);
|
||||||
termPQExpBuffer(&recovery_done_remove);
|
termPQExpBuffer(&recovery_done_remove);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* For 9.3/9.4, if pg_rewind is not available on the remote server,
|
||||||
|
* we'll need to force a reclone of the standby sing rsync - this may
|
||||||
|
* take some time on larger databases, so use with care!
|
||||||
|
*
|
||||||
|
* Note that following this clone we'll be using `repmgr standby follow`
|
||||||
|
* to start the server - that will mean recovery.conf will be created
|
||||||
|
* for a second time, but as this is a workaround for the absence
|
||||||
|
* of pg_rewind. It's preferable to have `repmgr standby follow` start
|
||||||
|
* the remote database as it can access the remote config file
|
||||||
|
* directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
format_db_cli_params(options.conninfo, repmgr_db_cli_params);
|
||||||
|
maxlen_snprintf(command,
|
||||||
|
"%s/repmgr -D %s -f %s %s --rsync-only --force --ignore-external-config-files standby clone",
|
||||||
|
pg_bindir,
|
||||||
|
remote_data_directory,
|
||||||
|
runtime_options.remote_config_file,
|
||||||
|
repmgr_db_cli_params
|
||||||
|
);
|
||||||
|
|
||||||
|
log_debug("Executing:\n%s\n", command);
|
||||||
|
|
||||||
|
initPQExpBuffer(&command_output);
|
||||||
|
|
||||||
|
(void)remote_command(
|
||||||
|
remote_host,
|
||||||
|
runtime_options.remote_user,
|
||||||
|
command,
|
||||||
|
&command_output);
|
||||||
|
|
||||||
|
termPQExpBuffer(&command_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Execute `repmgr standby follow` to create recovery.conf and start
|
||||||
|
* the remote server
|
||||||
|
*/
|
||||||
format_db_cli_params(options.conninfo, repmgr_db_cli_params);
|
format_db_cli_params(options.conninfo, repmgr_db_cli_params);
|
||||||
maxlen_snprintf(command,
|
maxlen_snprintf(command,
|
||||||
"%s/repmgr -D %s -f %s %s standby follow",
|
"%s/repmgr -D %s -f %s %s standby follow",
|
||||||
@@ -2885,8 +2934,6 @@ do_standby_switchover(void)
|
|||||||
|
|
||||||
initPQExpBuffer(&command_output);
|
initPQExpBuffer(&command_output);
|
||||||
|
|
||||||
// XXX handle failure
|
|
||||||
|
|
||||||
(void)remote_command(
|
(void)remote_command(
|
||||||
remote_host,
|
remote_host,
|
||||||
runtime_options.remote_user,
|
runtime_options.remote_user,
|
||||||
|
|||||||
Reference in New Issue
Block a user