Re: Upgrade streaming replication and log-shipping standby servers

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Greg Spiegelberg <gspiegelberg(at)gmail(dot)com>
Cc: Victor Sudakov <vas(at)sibptus(dot)ru>, pgsql-admin(at)lists(dot)postgresql(dot)org
Subject: Re: Upgrade streaming replication and log-shipping standby servers
Date: 2020-06-16 17:00:44
Message-ID: 20200616170044.GA12143@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

On Tue, Jun 16, 2020 at 05:48:10AM -0600, Greg Spiegelberg wrote:
> On Mon, Jun 15, 2020 at 4:46 AM Victor Sudakov <vas(at)sibptus(dot)ru> wrote:
>
> Dear Colleagues,
>
> When upgrading to a new major version, pg_upgrade documentation
> https://www.postgresql.org/docs/current/pgupgrade.html#
> PGUPGRADE-STEP-REPLICAS
> states that pg_upgrade can be used on a master server. After upgrading
> the PostgreSQL version on standbys, however, one must either pull the
> data from scratch with pg_basebackup, or run rsync from master to
> standby.
>
> Is running pg_upgrade on replicas not supported and why?
>
>
>
> Hi Victor,
>
> I agree it would be extraordinarily convenient if pg_upgrade could operate on
> standbys.

Uh, pg_upgrade is already documented as being able to upgrade standby
servers:

https://www.postgresql.org/docs/12/pgupgrade.html

8. Prepare for standby server upgrades

Am I missing something? The sync is not sync'ing the file contents,
just the hard links. You can see the details in the docs:

f. Run rsync

When using link mode, standby servers can be quickly upgraded using
rsync. To accomplish this, from a directory on the primary server that
is above the old and new database cluster directories, run this on the
primary for each standby server:

rsync --archive --delete --hard-links --size-only --no-inc-recursive
old_cluster new_cluster remote_dir

where old_cluster and new_cluster are relative to the current directory
on the primary, and remote_dir is above the old and new cluster
directories on the standby. The directory structure under the specified
directories on the primary and standbys must match. Consult the rsync
manual page for details on specifying the remote directory, e.g.

rsync --archive --delete --hard-links --size-only --no-inc-recursive
/opt/PostgreSQL/9.5 \
/opt/PostgreSQL/9.6 standby.example.com:/opt/PostgreSQL

You can verify what the command will do using rsync's --dry-run option.
While rsync must be run on the primary for at least one standby, it is
possible to run rsync on an upgraded standby to upgrade other standbys,
as long as the upgraded standby has not been started.

What this does is to record the links created by pg_upgrade's link mode
that connect files in the old and new clusters on the primary server. It
then finds matching files in the standby's old cluster and creates links
for them in the standby's new cluster. Files that were not linked on the
primary are copied from the primary to the standby. (They are usually
small.) This provides rapid standby upgrades. Unfortunately, rsync
needlessly copies files associated with temporary and unlogged tables
because these files don't normally exist on standby servers.

--
Bruce Momjian <bruce(at)momjian(dot)us> https://momjian.us
EnterpriseDB https://enterprisedb.com

The usefulness of a cup is in its emptiness, Bruce Lee

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Greg Spiegelberg 2020-06-16 17:28:27 Re: Upgrade streaming replication and log-shipping standby servers
Previous Message Wells Oliver 2020-06-16 16:47:47 Re: Deleting more efficiently from large partitions