On Thu, Aug  3, 2017 at 11:37:32AM +0200, Michael Paquier wrote:
> On Mon, Jul 31, 2017 at 6:13 PM, Robert Haas <robertmh...@gmail.com> wrote:
> > On Fri, Jul 28, 2017 at 10:35 AM, Andreas Joseph Krogh
> > <andr...@visena.com> wrote:
> >> I'm reading https://www.postgresql.org/docs/10/static/pgupgrade.html to try
> >> to understand how to upgrade standby-servers using pg_upgrade with pg10.
> >>
> >> The text in step 10 sais:
> >> "You will not be running pg_upgrade on the standby servers, but rather
> >> rsync", which to me sounds like rsync, in step 10-f, should be issued on 
> >> the
> >> standy servers. Is this the case? If so I don't understand how the 
> >> standby's
> >> data is upgraded and what "remote_dir" is. If rsync is supposed to be 
> >> issued
> >> on the primary then I think it should be explicitly mentioned, and step 
> >> 10-f
> >> should provide a clarer example with more detailed values for the
> >> directory-structures involved.
> >>
> >> I really think section 10 needs improvement as I'm certainly not 
> >> comfortable
> >> upgrading standbys following the existing procedure.
> >
> > Yeah, I don't understand it either, and I have never been convinced
> > that there's any safe way to do it other than recloning the standbys
> > from the upgraded master.
> 
> Here are my 2c on the matter. 10-f means that the upgraded node may
> have generated WAL with wal_level = minimal, which, at least it seems
> to me, that we have a risk of having inconsistent data pages if only a
> rsync is used on the old standbys. Like Robert, the flow we used in
> the products I work on is to re-create standbys from scratch after the
> upgrade using a fresh backup, with a VM cloning. An upgrade here is an
> in-place process not only linked to Postgres, so standby VMs are made
> of many services, some are being linked to Postgres. So this choice is
> mainly decided by those dependencies, still it feels safer anyway.

I have applied the attached doc patch back to 9.5 to clarify
pg_upgrade's rsync instructions and explain how it works.

Improvements?

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +
diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
new file mode 100644
index d444318..f8d9630
*** a/doc/src/sgml/ref/pgupgrade.sgml
--- b/doc/src/sgml/ref/pgupgrade.sgml
*************** NET STOP postgresql-&majorversion;
*** 332,338 ****
      <para>
       Also, if upgrading standby servers, change <varname>wal_level</>
       to <literal>replica</> in the <filename>postgresql.conf</> file on
!      the new master cluster.
      </para>
     </step>
  
--- 332,338 ----
      <para>
       Also, if upgrading standby servers, change <varname>wal_level</>
       to <literal>replica</> in the <filename>postgresql.conf</> file on
!      the new primary cluster.
      </para>
     </step>
  
*************** pg_upgrade.exe
*** 425,432 ****
       linkend="streaming-replication">) or Log-Shipping (see <xref
       linkend="warm-standby">) standby servers, follow these steps to
       upgrade them.  You will not be running <application>pg_upgrade</>
!      on the standby servers, but rather <application>rsync</>.  Do not
!      start any servers yet.
      </para>
  
      <substeps>
--- 425,432 ----
       linkend="streaming-replication">) or Log-Shipping (see <xref
       linkend="warm-standby">) standby servers, follow these steps to
       upgrade them.  You will not be running <application>pg_upgrade</>
!      on the standby servers, but rather <application>rsync</> on the
!      primary.  Do not start any servers yet.
      </para>
  
      <substeps>
*************** pg_upgrade.exe
*** 455,461 ****
  
        <para>
         Install the same custom shared object files on the new standbys
!        that you installed in the new master cluster.
        </para>
       </step>
  
--- 455,461 ----
  
        <para>
         Install the same custom shared object files on the new standbys
!        that you installed in the new primary cluster.
        </para>
       </step>
  
*************** pg_upgrade.exe
*** 482,506 ****
        <title>Run <application>rsync</></title>
  
        <para>
!        From a directory that is above the old and new database cluster
!        directories, run this for each standby:
  
  <programlisting>
  rsync --archive --delete --hard-links --size-only old_pgdata new_pgdata remote_dir
  </programlisting>
  
         where <option>old_pgdata</> and <option>new_pgdata</> are relative
!        to the current directory, and <option>remote_dir</> is
!        <emphasis>above</> the old and new cluster directories on
!        the standby server.  The old and new relative cluster paths
!        must match on the master and standby server.  Consult the
         <application>rsync</> manual page for details on specifying the
         remote directory, e.g. <literal>standbyhost:/opt/PostgreSQL/</>.
!        <application>rsync</> will be fast when <application>pg_upgrade</>'s
!        <option>--link</> mode is used because it will create hard links
!        on the remote server rather than transferring user data.
!        Unfortunately, <application>rsync</> needlessly copies the
!        files associated with temporary and unlogged tables.
        </para>
  
        <para>
--- 482,514 ----
        <title>Run <application>rsync</></title>
  
        <para>
!        From a directory on the primary server that is above the old and
!        new database cluster directories, run this on the
!        <emphasis>primary</> for each standby server:
  
  <programlisting>
  rsync --archive --delete --hard-links --size-only old_pgdata new_pgdata remote_dir
  </programlisting>
  
         where <option>old_pgdata</> and <option>new_pgdata</> are relative
!        to the current directory on the primary, and <option>remote_dir</>
!        is <emphasis>above</> the old and new cluster directories on
!        the standby.  The old and new relative cluster paths
!        must match on the primary and standby server.  Consult the
         <application>rsync</> manual page for details on specifying the
         remote directory, e.g. <literal>standbyhost:/opt/PostgreSQL/</>.
!       </para>
! 
!       <para>
!        What <application>rsync</> does is to copy files from the
!        primary to the standby, and, if <application>pg_upgrade</>'s
!        <option>--link</> mode was used, link files from the old to
!        new clusters on the standby.  It links the same files that
!        <application>pg_upgrade</> linked in the primary old and new
!        clusters.  (Of course, linking speeds up <application>rsync</>.)
!        Unfortunately, <application>rsync</> needlessly copies files
!        associated with temporary and unlogged tables because these files
!        don't normally exist on standby servers.
        </para>
  
        <para>
*************** rsync --archive --delete --hard-links --
*** 518,524 ****
         Configure the servers for log shipping.  (You do not need to run
         <function>pg_start_backup()</> and <function>pg_stop_backup()</>
         or take a file system backup as the standbys are still synchronized
!        with the master.)
        </para>
       </step>
  
--- 526,532 ----
         Configure the servers for log shipping.  (You do not need to run
         <function>pg_start_backup()</> and <function>pg_stop_backup()</>
         or take a file system backup as the standbys are still synchronized
!        with the primary.)
        </para>
       </step>
  
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to