mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-23 15:16:29 +00:00
Compare commits
16 Commits
v4.0.6
...
REL4_0_STA
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee1a6f9d0f | ||
|
|
49eb408873 | ||
|
|
fba3d29514 | ||
|
|
77200e5030 | ||
|
|
4589b8d439 | ||
|
|
048f7c3310 | ||
|
|
1e5f63792f | ||
|
|
d26989bd12 | ||
|
|
f999c810a7 | ||
|
|
81077d4bc2 | ||
|
|
a549941d4f | ||
|
|
2f6c159f9a | ||
|
|
2eca1a0311 | ||
|
|
f6377084ec | ||
|
|
d85c02b92b | ||
|
|
d9ba41fc35 |
51
dbutils.c
51
dbutils.c
@@ -2178,8 +2178,9 @@ get_downstream_nodes_with_missing_slot(PGconn *conn, int this_node_id, NodeInfoL
|
|||||||
"LEFT JOIN pg_catalog.pg_replication_slots rs "
|
"LEFT JOIN pg_catalog.pg_replication_slots rs "
|
||||||
" ON rs.slot_name = n.slot_name "
|
" ON rs.slot_name = n.slot_name "
|
||||||
" WHERE n.slot_name IS NOT NULL"
|
" WHERE n.slot_name IS NOT NULL"
|
||||||
" AND rs.slot_name IS NULL "
|
" AND rs.slot_name IS NULL "
|
||||||
" AND n.upstream_node_id = %i ",
|
" AND n.upstream_node_id = %i "
|
||||||
|
" AND n.type = 'standby'",
|
||||||
this_node_id);
|
this_node_id);
|
||||||
|
|
||||||
log_verbose(LOG_DEBUG, "get_all_node_records_with_missing_slot():\n%s", query.data);
|
log_verbose(LOG_DEBUG, "get_all_node_records_with_missing_slot():\n%s", query.data);
|
||||||
@@ -2916,8 +2917,7 @@ get_datadir_configuration_files(PGconn *conn, KeyValueList *list)
|
|||||||
|
|
||||||
for (i = 0; i < PQntuples(res); i++)
|
for (i = 0; i < PQntuples(res); i++)
|
||||||
{
|
{
|
||||||
key_value_list_set(
|
key_value_list_set(list,
|
||||||
list,
|
|
||||||
PQgetvalue(res, i, 1),
|
PQgetvalue(res, i, 1),
|
||||||
PQgetvalue(res, i, 0));
|
PQgetvalue(res, i, 0));
|
||||||
}
|
}
|
||||||
@@ -3654,7 +3654,7 @@ get_slot_record(PGconn *conn, char *slot_name, t_replication_slot *record)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
get_free_replication_slots(PGconn *conn)
|
get_free_replication_slot_count(PGconn *conn)
|
||||||
{
|
{
|
||||||
PQExpBufferData query;
|
PQExpBufferData query;
|
||||||
PGresult *res = NULL;
|
PGresult *res = NULL;
|
||||||
@@ -3691,6 +3691,47 @@ get_free_replication_slots(PGconn *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
get_inactive_replication_slots(PGconn *conn, KeyValueList *list)
|
||||||
|
{
|
||||||
|
PQExpBufferData query;
|
||||||
|
PGresult *res = NULL;
|
||||||
|
int i, inactive_slots = 0;
|
||||||
|
|
||||||
|
initPQExpBuffer(&query);
|
||||||
|
|
||||||
|
appendPQExpBuffer(&query,
|
||||||
|
" SELECT slot_name, slot_type "
|
||||||
|
" FROM pg_catalog.pg_replication_slots "
|
||||||
|
" WHERE active IS FALSE "
|
||||||
|
" ORDER BY slot_name ");
|
||||||
|
|
||||||
|
res = PQexec(conn, query.data);
|
||||||
|
termPQExpBuffer(&query);
|
||||||
|
|
||||||
|
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||||
|
{
|
||||||
|
log_error(_("unable to execute replication slot query"));
|
||||||
|
log_detail("%s", PQerrorMessage(conn));
|
||||||
|
PQclear(res);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inactive_slots = PQntuples(res);
|
||||||
|
|
||||||
|
for (i = 0; i < inactive_slots; i++)
|
||||||
|
{
|
||||||
|
key_value_list_set(list,
|
||||||
|
PQgetvalue(res, i, 0),
|
||||||
|
PQgetvalue(res, i, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
PQclear(res);
|
||||||
|
return inactive_slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ==================== */
|
/* ==================== */
|
||||||
/* tablespace functions */
|
/* tablespace functions */
|
||||||
/* ==================== */
|
/* ==================== */
|
||||||
|
|||||||
@@ -455,7 +455,8 @@ void create_slot_name(char *slot_name, int node_id);
|
|||||||
bool create_replication_slot(PGconn *conn, char *slot_name, int server_version_num, PQExpBufferData *error_msg);
|
bool create_replication_slot(PGconn *conn, char *slot_name, int server_version_num, PQExpBufferData *error_msg);
|
||||||
bool drop_replication_slot(PGconn *conn, char *slot_name);
|
bool drop_replication_slot(PGconn *conn, char *slot_name);
|
||||||
RecordStatus get_slot_record(PGconn *conn, char *slot_name, t_replication_slot *record);
|
RecordStatus get_slot_record(PGconn *conn, char *slot_name, t_replication_slot *record);
|
||||||
int get_free_replication_slots(PGconn *conn);
|
int get_free_replication_slot_count(PGconn *conn);
|
||||||
|
int get_inactive_replication_slots(PGconn *conn, KeyValueList *list);
|
||||||
|
|
||||||
/* tablespace functions */
|
/* tablespace functions */
|
||||||
bool get_tablespace_name_by_location(PGconn *conn, const char *location, char *name);
|
bool get_tablespace_name_by_location(PGconn *conn, const char *location, char *name);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<sect1 id="release-4.0.6">
|
<sect1 id="release-4.0.6">
|
||||||
<title>Release 4.0.6</title>
|
<title>Release 4.0.6</title>
|
||||||
<para><emphasis>June ??, 2018</emphasis></para>
|
<para><emphasis>June 14, 2018</emphasis></para>
|
||||||
<para>
|
<para>
|
||||||
&repmgr; 4.0.6 contains a number of bug fixes and usability enhancements.
|
&repmgr; 4.0.6 contains a number of bug fixes and usability enhancements.
|
||||||
</para>
|
</para>
|
||||||
@@ -58,6 +58,23 @@
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<command><link linkend="repmgr-standby-clone">repmgr standby clone</link></command>:
|
||||||
|
Improve documentation of <option>--recovery-conf-only</option> mode
|
||||||
|
(GitHub #438)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<command><link linkend="repmgr-standby-clone">repmgr standby clone</link></command>:
|
||||||
|
Don't require presence of <varname>user</varname> parameter in conninfo string
|
||||||
|
(GitHub #437)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
@@ -71,7 +88,7 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<command><link linkend="repmgr-witness-register">repmgr witness register</link></command>:
|
<command><link linkend="repmgr-witness-register">repmgr witness register</link></command>:
|
||||||
prevent registration of a witness server with the same name as an existing node.
|
prevent registration of a witness server with the same name as an existing node
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
@@ -84,23 +101,6 @@
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
<command><link linkend="repmgr-standby-clone">repmgr standby clone</link></command>:
|
|
||||||
Don't require presence of <varname>user</varname> parameter in conninfo string
|
|
||||||
(GitHub #437)
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
<command><link linkend="repmgr-standby-clone">repmgr standby clone</link></command>:
|
|
||||||
Improve documentation of <option>--recovery-conf-only</option> mode
|
|
||||||
(GitHub #438)
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<command><link linkend="repmgr-node-rejoin">repmgr node rejoin</link></command>:
|
<command><link linkend="repmgr-node-rejoin">repmgr node rejoin</link></command>:
|
||||||
|
|||||||
@@ -33,34 +33,5 @@
|
|||||||
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="repmgr-rpm-key" xreflabel="repmgr rpm key">
|
|
||||||
<title>repmgr RPM signing key</title>
|
|
||||||
<para>
|
|
||||||
The signing key ID used for <application>repmgr</application> source code bundles is:
|
|
||||||
<ulink url="http://packages.2ndquadrant.com/repmgr/RPM-GPG-KEY-repmgr">
|
|
||||||
<literal>0x702D883A</literal></ulink>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
To download the <application>repmgr</application> source key to your computer:
|
|
||||||
<programlisting>
|
|
||||||
curl -s http://packages.2ndquadrant.com/repmgr/RPM-GPG-KEY-repmgr | gpg --import
|
|
||||||
gpg --fingerprint 0x702D883A
|
|
||||||
</programlisting>
|
|
||||||
then verify that the fingerprint is the expected value:
|
|
||||||
<programlisting>
|
|
||||||
AE4E 390E A58E 0037 6148 3F29 888D 018B 702D 883A</programlisting>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
To check a repository RPM, use <application>rpmkeys</application> to load the
|
|
||||||
packaging signing key into the RPM database then use <literal>rpm -K</literal>, e.g.:
|
|
||||||
<programlisting>
|
|
||||||
sudo rpmkeys --import http://packages.2ndquadrant.com/repmgr/RPM-GPG-KEY-repmgr
|
|
||||||
rpm -K postgresql-bdr94-2ndquadrant-redhat-1.0-2.noarch.rpm
|
|
||||||
</programlisting>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
</appendix>
|
</appendix>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
If using <application>systemd</application>, ensure you have <varname>RemoteIPC</varname> set to <literal>off</literal>.
|
If using <application>systemd</application>, ensure you have <varname>RemoveIPC</varname> set to <literal>off</literal>.
|
||||||
See the <ulink url="https://wiki.postgresql.org/wiki/Systemd">systemd</ulink>
|
See the <ulink url="https://wiki.postgresql.org/wiki/Systemd">systemd</ulink>
|
||||||
entry in the <ulink url="https://wiki.postgresql.org/wiki/Main_Page">PostgreSQL wiki</ulink> for details.
|
entry in the <ulink url="https://wiki.postgresql.org/wiki/Main_Page">PostgreSQL wiki</ulink> for details.
|
||||||
</para>
|
</para>
|
||||||
@@ -47,16 +47,24 @@
|
|||||||
service_restart_command
|
service_restart_command
|
||||||
service_reload_command</programlisting>
|
service_reload_command</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
It's also possible to specify a <varname>service_promote_command</varname>;
|
It's also possible to specify a <varname>service_promote_command</varname>.
|
||||||
this overrides any value contained in the setting <varname>promote_command</varname>.
|
|
||||||
This is intended for systems which provide a package-level promote command,
|
This is intended for systems which provide a package-level promote command,
|
||||||
such as Debian's <application>pg_ctlcluster</application>.
|
such as Debian's <application>pg_ctlcluster</application>, to promote the
|
||||||
|
PostgreSQL from standby to primary.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
If your packaging system does not provide such a command, it can be left empty,
|
||||||
|
and &repmgr; will generate the appropriate <command>pg_ctl ... promote</command> command.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Do not confuse this with <varname>promote_command</varname>, which is used
|
||||||
|
by <application>repmgrd</application> to execute <xref linkend="repmgr-standby-promote">.
|
||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
To confirm which command &repmgr; will execute for each action, use
|
To confirm which command &repmgr; will execute for each action, use
|
||||||
<command>repmgr node service --list --action=...</command>, e.g.:
|
<command>repmgr node service --list --action=...</command>, e.g.:
|
||||||
|
|||||||
@@ -217,9 +217,6 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<simpara><literal>repmgrd_promote_error</literal></simpara>
|
<simpara><literal>repmgrd_promote_error</literal></simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
|
||||||
<simpara><literal>repmgrd_failover_promote</literal></simpara>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara><literal>bdr_failover</literal></simpara>
|
<simpara><literal>bdr_failover</literal></simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|||||||
@@ -79,9 +79,26 @@
|
|||||||
|
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
</refsect1>
|
||||||
Individual checks can also be output in a Nagios-compatible format by additionally
|
|
||||||
providing the option <literal>--nagios</literal>.
|
<refsect1>
|
||||||
</para>
|
<title>Output format</title>
|
||||||
|
<para>
|
||||||
|
<itemizedlist spacing="compact" mark="bullet">
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>
|
||||||
|
<literal>--csv</literal>: generate output in CSV format (not available
|
||||||
|
for individual checks)
|
||||||
|
</simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>
|
||||||
|
<literal>--nagios</literal>: generate output in a Nagios-compatible format
|
||||||
|
</simpara>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
</refentry>
|
</refentry>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<title>Example</title>
|
<title>Example</title>
|
||||||
<para>
|
<para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
$ repmgr -f /etc/repmgr.comf node status
|
$ repmgr -f /etc/repmgr.conf node status
|
||||||
Node "node1":
|
Node "node1":
|
||||||
PostgreSQL version: 10beta1
|
PostgreSQL version: 10beta1
|
||||||
Total data size: 30 MB
|
Total data size: 30 MB
|
||||||
@@ -38,6 +38,20 @@
|
|||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Output format</title>
|
||||||
|
<para>
|
||||||
|
<itemizedlist spacing="compact" mark="bullet">
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>
|
||||||
|
<literal>--csv</literal>: generate output in CSV format
|
||||||
|
</simpara>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>See also</title>
|
<title>See also</title>
|
||||||
<para>
|
<para>
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
check the promotion every <varname>promote_check_interval</varname> seconds (default: 1 second).
|
check the promotion every <varname>promote_check_interval</varname> seconds (default: 1 second).
|
||||||
Both values can be defined in <filename>repmgr.conf</filename>.
|
Both values can be defined in <filename>repmgr.conf</filename>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
<refpurpose>promote a standby to primary and demote the existing primary to a standby</refpurpose>
|
<refpurpose>promote a standby to primary and demote the existing primary to a standby</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Description</title>
|
<title>Description</title>
|
||||||
|
|
||||||
@@ -39,6 +40,14 @@
|
|||||||
For more details on performing a switchover, including preparation and configuration,
|
For more details on performing a switchover, including preparation and configuration,
|
||||||
see section <xref linkend="performing-switchover">.
|
see section <xref linkend="performing-switchover">.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
<application>repmgrd</application> should not be active on any nodes while a switchover is being
|
||||||
|
executed. This restriction may be lifted in a later version.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
@@ -171,10 +180,12 @@
|
|||||||
Execute with the <literal>--dry-run</literal> option to test the switchover as far as
|
Execute with the <literal>--dry-run</literal> option to test the switchover as far as
|
||||||
possible without actually changing the status of either node.
|
possible without actually changing the status of either node.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<important>
|
||||||
<application>repmgrd</application> should not be active on any nodes while a switchover is being
|
<para>
|
||||||
executed. This restriction may be lifted in a later version.
|
<application>repmgrd</application> must be shut down on all nodes while a switchover is being
|
||||||
</para>
|
executed. This restriction will be removed in a future &repmgr; version.
|
||||||
|
</para>
|
||||||
|
</important>
|
||||||
<para>
|
<para>
|
||||||
External database connections, e.g. from an application, should not be permitted while
|
External database connections, e.g. from an application, should not be permitted while
|
||||||
the switchover is taking place. In particular, active transactions on the primary
|
the switchover is taking place. In particular, active transactions on the primary
|
||||||
|
|||||||
@@ -25,7 +25,13 @@
|
|||||||
<para>
|
<para>
|
||||||
This is the official documentation of &repmgr; &repmgrversion; for
|
This is the official documentation of &repmgr; &repmgrversion; for
|
||||||
use with PostgreSQL 9.3 - PostgreSQL 10.
|
use with PostgreSQL 9.3 - PostgreSQL 10.
|
||||||
It describes the functionality supported by the current version of &repmgr;.
|
</para>
|
||||||
|
<para>
|
||||||
|
&repmgr; is being continually developed and we strongly recommend using the
|
||||||
|
latest version. Please check the
|
||||||
|
<ulink url="https://repmgr.org/">repmgr website</ulink> for details
|
||||||
|
about the current &repmgr; version as well as the
|
||||||
|
<ulink url="https://repmgr.org/docs/current/index.html">current documentation</ulink>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|||||||
@@ -99,15 +99,16 @@
|
|||||||
replication cluster. The database must be the BDR-enabled database.
|
replication cluster. The database must be the BDR-enabled database.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If defined, the evenr <application>event_notifications</application> parameter
|
If defined, the <varname>event_notifications</varname> parameter will restrict
|
||||||
will restrict execution of <varname>event_notification_command</varname>
|
execution of the script defined in <varname>event_notification_command</varname>
|
||||||
to the specified event(s).
|
to the specified event(s).
|
||||||
</para>
|
</para>
|
||||||
<note>
|
<note>
|
||||||
<simpara>
|
<simpara>
|
||||||
<varname>event_notification_command</varname> is the script which does the actual "heavy lifting"
|
<varname>event_notification_command</varname> is the script which does the actual "heavy lifting"
|
||||||
of reconfiguring the proxy server/ connection pooler. It is fully
|
of reconfiguring the proxy server/ connection pooler. It is fully
|
||||||
user-definable; a reference implementation is documented below.
|
user-definable; see section <xref linkend="bdr-event-notification-command"> for a reference
|
||||||
|
implementation.
|
||||||
</simpara>
|
</simpara>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
@@ -169,8 +170,8 @@
|
|||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="bdr-event-notification-command" xreflabel="BDR failover event notification command">
|
<sect1 id="bdr-event-notification-command" xreflabel="Defining the BDR failover "event_notification command"">
|
||||||
<title>Defining the "event_notification_command"</title>
|
<title>Defining the BDR failover "event_notification_command"</title>
|
||||||
<para>
|
<para>
|
||||||
Key to "failover" execution is the <literal>event_notification_command</literal>,
|
Key to "failover" execution is the <literal>event_notification_command</literal>,
|
||||||
which is a user-definable script specified in <filename>repmpgr.conf</filename>
|
which is a user-definable script specified in <filename>repmpgr.conf</filename>
|
||||||
|
|||||||
@@ -34,6 +34,24 @@
|
|||||||
the <ulink url="https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-SHARED-PRELOAD-LIBRARIES">PostgreSQL documentation</ulink>.
|
the <ulink url="https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-SHARED-PRELOAD-LIBRARIES">PostgreSQL documentation</ulink>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To apply configuration file changes to a running <application>repmgrd</application>
|
||||||
|
daemon, execute the operating system's r<application>repmgrd</application> service reload command
|
||||||
|
(see <xref linkend="appendix-packages"> for examples),
|
||||||
|
or for instances which were manually started, execute <command>kill -HUP</command>, e.g.
|
||||||
|
<command>kill -HUP `cat /tmp/repmgrd.pid`</command>.
|
||||||
|
</para>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
Check the <application>repmgrd</application> log to see what changes were
|
||||||
|
applied, or if any issues were encountered when reloading the configuration.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<para>
|
||||||
|
Note that only a subset of configuration file parameters can be changed on a
|
||||||
|
running <application>repmgrd</application> daemon.
|
||||||
|
</para>
|
||||||
|
|
||||||
<sect2 id="repmgrd-automatic-failover-configuration">
|
<sect2 id="repmgrd-automatic-failover-configuration">
|
||||||
<title>automatic failover configuration</title>
|
<title>automatic failover configuration</title>
|
||||||
<para>
|
<para>
|
||||||
@@ -162,13 +180,6 @@
|
|||||||
repmgrd -f /etc/repmgr.conf --pid-file /tmp/repmgrd.pid --daemonize</programlisting>
|
repmgrd -f /etc/repmgr.conf --pid-file /tmp/repmgrd.pid --daemonize</programlisting>
|
||||||
and stopped with <command>kill `cat /tmp/repmgrd.pid`</command>. Adjust paths as appropriate.
|
and stopped with <command>kill `cat /tmp/repmgrd.pid`</command>. Adjust paths as appropriate.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
To apply configuration file changes to a running <application>repmgrd</application>
|
|
||||||
daemon, execute the operating system's service reload command (for manually started
|
|
||||||
instances, execute <command>kill -HUP `cat /tmp/repmgrd.pid`</command>).
|
|
||||||
Note that only a subset of configuration file parameters can be changed on a
|
|
||||||
running <application>repmgrd</application> daemon.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<sect2 id="repmgrd-configuration-debian-ubuntu">
|
<sect2 id="repmgrd-configuration-debian-ubuntu">
|
||||||
<indexterm>
|
<indexterm>
|
||||||
|
|||||||
@@ -140,10 +140,12 @@
|
|||||||
manually with <command>repmgr node check --archive-ready</command>.
|
manually with <command>repmgr node check --archive-ready</command>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<note>
|
||||||
Ensure that <application>repmgrd</application> is *not* running anywhere to prevent it unintentionally
|
<para>
|
||||||
promoting a node.
|
Ensure that <application>repmgrd</application> is *not* running anywhere to prevent it unintentionally
|
||||||
</para>
|
promoting a node. This restriction will be removed in a future &repmgr; version.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Finally, consider executing <command>repmgr standby switchover</command> with the
|
Finally, consider executing <command>repmgr standby switchover</command> with the
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2257,7 +2257,7 @@ do_standby_follow(void)
|
|||||||
|
|
||||||
if (config_file_options.use_replication_slots)
|
if (config_file_options.use_replication_slots)
|
||||||
{
|
{
|
||||||
int free_slots = get_free_replication_slots(primary_conn);
|
int free_slots = get_free_replication_slot_count(primary_conn);
|
||||||
if (free_slots < 0)
|
if (free_slots < 0)
|
||||||
{
|
{
|
||||||
log_error(_("unable to determine number of free replication slots on the primary"));
|
log_error(_("unable to determine number of free replication slots on the primary"));
|
||||||
@@ -3433,8 +3433,6 @@ do_standby_switchover(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check there are sufficient free walsenders - obviously there's potential
|
* check there are sufficient free walsenders - obviously there's potential
|
||||||
* for a later race condition if some walsenders come into use before the
|
* for a later race condition if some walsenders come into use before the
|
||||||
@@ -3858,7 +3856,6 @@ do_standby_switchover(void)
|
|||||||
* If --siblings-follow specified, attempt to make them follow the new
|
* If --siblings-follow specified, attempt to make them follow the new
|
||||||
* primary
|
* primary
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (runtime_options.siblings_follow == true && sibling_nodes.node_count > 0)
|
if (runtime_options.siblings_follow == true && sibling_nodes.node_count > 0)
|
||||||
{
|
{
|
||||||
int failed_follow_count = 0;
|
int failed_follow_count = 0;
|
||||||
@@ -3885,8 +3882,17 @@ do_standby_switchover(void)
|
|||||||
initPQExpBuffer(&remote_command_str);
|
initPQExpBuffer(&remote_command_str);
|
||||||
make_remote_repmgr_path(&remote_command_str, &sibling_node_record);
|
make_remote_repmgr_path(&remote_command_str, &sibling_node_record);
|
||||||
|
|
||||||
appendPQExpBuffer(&remote_command_str,
|
if (sibling_node_record.type == WITNESS)
|
||||||
"standby follow 2>/dev/null && echo \"1\" || echo \"0\"");
|
{
|
||||||
|
appendPQExpBuffer(&remote_command_str,
|
||||||
|
"witness register -d \\'%s\\' --force 2>/dev/null && echo \"1\" || echo \"0\"",
|
||||||
|
local_node_record.conninfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
appendPQExpBuffer(&remote_command_str,
|
||||||
|
"standby follow 2>/dev/null && echo \"1\" || echo \"0\"");
|
||||||
|
}
|
||||||
get_conninfo_value(cell->node_info->conninfo, "host", host);
|
get_conninfo_value(cell->node_info->conninfo, "host", host);
|
||||||
log_debug("executing:\n %s", remote_command_str.data);
|
log_debug("executing:\n %s", remote_command_str.data);
|
||||||
|
|
||||||
@@ -3901,8 +3907,16 @@ do_standby_switchover(void)
|
|||||||
|
|
||||||
if (success == false || command_output.data[0] == '0')
|
if (success == false || command_output.data[0] == '0')
|
||||||
{
|
{
|
||||||
log_warning(_("STANDBY FOLLOW failed on node \"%s\""),
|
if (sibling_node_record.type == WITNESS)
|
||||||
cell->node_info->node_name);
|
{
|
||||||
|
log_warning(_("WITNESS REGISTER failed on node \"%s\""),
|
||||||
|
cell->node_info->node_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_warning(_("STANDBY FOLLOW failed on node \"%s\""),
|
||||||
|
cell->node_info->node_name);
|
||||||
|
}
|
||||||
failed_follow_count++;
|
failed_follow_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -253,11 +253,11 @@ ssh_options='-q -o ConnectTimeout=10' # Options to append to "ssh"
|
|||||||
# primary (or other upstream node)
|
# primary (or other upstream node)
|
||||||
#reconnect_interval=10 # Interval between attempts to reconnect to an unreachable
|
#reconnect_interval=10 # Interval between attempts to reconnect to an unreachable
|
||||||
# primary (or other upstream node)
|
# primary (or other upstream node)
|
||||||
#promote_command= # command to execute when promoting a new primary; use something like:
|
#promote_command= # command repmgrd executes when promoting a new primary; use something like:
|
||||||
#
|
#
|
||||||
# repmgr standby promote -f /etc/repmgr.conf
|
# repmgr standby promote -f /etc/repmgr.conf
|
||||||
#
|
#
|
||||||
#follow_command= # command to execute when instructing a standby to follow a new primary;
|
#follow_command= # command repmgrd executes when instructing a standby to follow a new primary;
|
||||||
# use something like:
|
# use something like:
|
||||||
#
|
#
|
||||||
# repmgr standby follow -f /etc/repmgr.conf -W --upstream-node-id=%n
|
# repmgr standby follow -f /etc/repmgr.conf -W --upstream-node-id=%n
|
||||||
@@ -310,11 +310,11 @@ ssh_options='-q -o ConnectTimeout=10' # Options to append to "ssh"
|
|||||||
#service_stop_command = ''
|
#service_stop_command = ''
|
||||||
#service_restart_command = ''
|
#service_restart_command = ''
|
||||||
#service_reload_command = ''
|
#service_reload_command = ''
|
||||||
#service_promote_command = '' # Note: this overrides any value contained in the setting
|
#service_promote_command = '' # This parameter is intended for systems which provide a
|
||||||
# "promote_command". This is intended for systems which
|
# package-level promote command, such as Debian's
|
||||||
# provide a package-level promote command, such as Debian's
|
# "pg_ctlcluster". *IMPORTANT*: it is *not* a substitute
|
||||||
# "pg_ctlcluster"
|
# for "promote_command"; do not use "repmgr standby promote"
|
||||||
|
# (or a script which executes "repmgr standby promote") here.
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Status check thresholds
|
# Status check thresholds
|
||||||
|
|||||||
Reference in New Issue
Block a user