On 12 October 2010 23:28, Fujii Masao <[email protected]> wrote:
> On Sat, Oct 9, 2010 at 10:04 AM, Brendan Jurd <[email protected]> wrote:
>> I have just set up HS+SR for the first time, and for the most part,
>> the docs were excellent. The one exception for me was the discussion
>> of archive_cleanup_command. This is a pretty important part of
>> constructing a healthy standby server, and IMO the docs don't give it
>> the treatment it deserves.
...
> Agreed.
>
> And, ISTM that we should mention that we must not just specify
> pg_archivecleanup in archive_cleanup_command when there are multiple
> standby servers. This is because, in that case, we must calculate
> the oldest restart point in those standbys and delete the archived
> WAL files according to that point.
As promised, here is a patch to try to address $SUBJECT.
Summary of changes:
In 25.2.4. "Setting Up a Standby Server":
* Get rid of the extraneous short paragraph,
* move the full-size paragraph up to where the now-extinct short para was,
* add an archive_cleanup_command to the example recovery.conf,
* flesh out the wording,
* add links to 26.1 and F.22.
In 26.1. "Archive recovery settings":
* Add detail to the description of how it works,
* add an example recovery.conf snippet,
* per Fujii-san's comment, indicate that multi-standby setups require
more finesse,
* link to F.22.
In F.22. "pg_archivecleanup":
* Edit and clarify wording,
* standardise label for the <archivelocation> argument,
* again indicate the multi-standby issue,
* link to 25.2.
I'll drop this onto the next open commitfest. If it passes muster, it
sure wouldn't hurt to backpatch it to 9.0.
Cheers,
BJ
*** a/doc/src/sgml/high-availability.sgml
--- b/doc/src/sgml/high-availability.sgml
***************
*** 681,691 **** protocol to make nodes agree on a serializable transactional
order.
</para>
<para>
- You can use <varname>archive_cleanup_command</> to prune the archive of
- files no longer needed by the standby.
- </para>
-
- <para>
If you're setting up the standby server for high availability purposes,
set up WAL archiving, connections and authentication like the primary
server, because the standby server will work as a primary server after
--- 681,686 ----
***************
*** 697,708 **** protocol to make nodes agree on a serializable transactional
order.
--- 692,716 ----
</para>
<para>
+ If you're using a WAL archive, its size can be minimized using the <xref
+ linkend="archive-cleanup-command"> parameter to remove files that are no
+ longer required by the standby server.
+ The <application>pg_archivecleanup</> utility is designed specifically to
+ be used with <varname>archive_cleanup_command</> in typical single-standby
+ configurations, see <xref linkend="pgarchivecleanup">.
+ Note however, that if you're using the archive for backup purposes, you
+ need to retain files needed to recover from at least the latest base
+ backup, even if they're no longer needed by the standby.
+ </para>
+
+ <para>
A simple example of a <filename>recovery.conf</> is:
<programlisting>
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'
restore_command = 'cp /path/to/archive/%f %p'
trigger_file = '/path/to/trigger_file'
+ archive_cleanup_command = 'pg_archivecleanup /path/to/archive %r'
</programlisting>
</para>
***************
*** 712,725 **** trigger_file = '/path/to/trigger_file'
the primary to allow them to be connected simultaneously.
</para>
- <para>
- If you're using a WAL archive, its size can be minimized using
- the <varname>archive_cleanup_command</> option to remove files that are
- no longer required by the standby server. Note however, that if you're
- using the archive for backup purposes, you need to retain files needed
- to recover from at least the latest base backup, even if they're no
- longer needed by the standby.
- </para>
</sect2>
<sect2 id="streaming-replication">
--- 720,725 ----
*** a/doc/src/sgml/pgarchivecleanup.sgml
--- b/doc/src/sgml/pgarchivecleanup.sgml
***************
*** 8,17 ****
</indexterm>
<para>
! <application>pg_archivecleanup</> is designed to cleanup an archive when
used
! as an <literal>archive_cleanup_command</literal> when running with
! <literal>standby_mode = on</literal>. <application>pg_archivecleanup</> can
! also be used as a standalone program to clean WAL file archives.
</para>
<para>
--- 8,18 ----
</indexterm>
<para>
! <application>pg_archivecleanup</> is designed to be used as an
! <literal>archive_cleanup_command</literal> to clean up WAL file archives
when
! running as a standby server (see <xref linkend="warm-standby">).
! <application>pg_archivecleanup</> can also be used as a standalone program
to
! clean WAL file archives.
</para>
<para>
***************
*** 39,58 ****
server to use <application>pg_archivecleanup</>, put this into its
<filename>recovery.conf</filename> configuration file:
<programlisting>
! archive_cleanup_command = 'pg_archivecleanup <replaceable>archiveDir</> %r'
</programlisting>
! where <replaceable>archiveDir</> is the directory from which WAL segment
! files should be restored.
</para>
<para>
! When used within <literal>archive_cleanup_command</literal>,
! all WAL files logically preceding the value of the <literal>%r</>
! will be removed <replaceable>archivelocation</>. This minimizes
! the number of files that need to be retained, while preserving
! crash-restart capability. Use of this parameter is appropriate if the
! <replaceable>archivelocation</> is a transient staging area for this
! particular standby server, but <emphasis>not</> when the
! <replaceable>archivelocation</> is intended as a long-term WAL archive
area.
</para>
<para>
The full syntax of <application>pg_archivecleanup</>'s command line is
--- 40,60 ----
server to use <application>pg_archivecleanup</>, put this into its
<filename>recovery.conf</filename> configuration file:
<programlisting>
! archive_cleanup_command = 'pg_archivecleanup <replaceable>archivelocation</>
%r'
</programlisting>
! where <replaceable>archivelocation</> is the directory from which WAL
segment
! files should be removed.
</para>
<para>
! When used within <xref linkend="archive-cleanup-command">, all WAL files
! logically preceding the value of the <literal>%r</> argument will be
removed
! from <replaceable>archivelocation</>. This minimizes the number of files
! that need to be retained, while preserving crash-restart capability. Use
of
! this parameter is appropriate if the <replaceable>archivelocation</> is a
! transient staging area for this particular standby server, but
! <emphasis>not</> when the <replaceable>archivelocation</> is intended as a
! long-term WAL archive area, or when multiple standby servers are recovering
! from the same archive location.
</para>
<para>
The full syntax of <application>pg_archivecleanup</>'s command line is
*** a/doc/src/sgml/recovery-config.sgml
--- b/doc/src/sgml/recovery-config.sgml
***************
*** 80,99 **** restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' #
Windows
</indexterm>
<listitem>
<para>
! This parameter specifies a shell command that will be executed at
! every restartpoint. This parameter is optional. The purpose of the
! <varname>archive_cleanup_command</> is to provide a mechanism for
cleaning
! up old archived WAL files that are no longer needed by the standby
! server.
! Any <literal>%r</> is replaced by the name of the file
! containing the last valid restart point. That is the earliest file
that
! must be kept to allow a restore to be restartable, so this information
! can be used to truncate the archive to just the minimum required to
! support restart from the current restore. <literal>%r</> would
! typically be used in a warm-standby configuration
! (see <xref linkend="warm-standby">).
! Write <literal>%%</> to embed an actual <literal>%</> character
! in the command.
</para>
<para>
If the command returns a non-zero exit status then a WARNING log
--- 80,109 ----
</indexterm>
<listitem>
<para>
! This optional parameter specifies a shell command that will be
executed
! at every restartpoint. The purpose of
! <varname>archive_cleanup_command</> is to provide a mechanism for
! cleaning up old archived WAL files that are no longer needed by the
! standby server.
! Any <literal>%r</> is replaced by the name of the file containing the
! last valid restart point.
! That is the earliest file that must be <emphasis>kept</> to allow a
! restore to be restartable, and so all files earlier than
<literal>%r</>
! may be safely removed.
! This information can be used to truncate the archive to just the
! minimum required to support restart from the current restore.
! The <application>pg_archivecleanup</> utility provided in
! <literal>contrib</> (see <xref linkend="pgarchivecleanup">) serves as
a
! convenient target for <varname>archive_cleanup_command</> in typical
! single-standby configurations, for example:
! <programlisting> archive_cleanup_command = 'pg_archivecleanup
/mnt/server/archivedir %r' </programlisting>
! Note however that if multiple standby servers are restoring from the
! same archive directory, you will need to ensure that you do not delete
! WAL files until they are no longer needed by any of the servers.
! <varname>archive_cleanup_command</> would typically be used in a
! warm-standby configuration (see <xref linkend="warm-standby">).
! Write <literal>%%</> to embed an actual <literal>%</> character in the
! command.
</para>
<para>
If the command returns a non-zero exit status then a WARNING log
--
Sent via pgsql-docs mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs