@@ -315,6 +315,11 @@ NET STOP postgresql-8.4
315
315
NET STOP postgresql-9.0
316
316
</programlisting>
317
317
</para>
318
+
319
+ <para>
320
+ Streaming replication and log-shipping standby servers can remain running until
321
+ a later step.
322
+ </para>
318
323
</step>
319
324
320
325
<step>
@@ -398,6 +403,136 @@ pg_upgrade.exe
398
403
</para>
399
404
</step>
400
405
406
+ <step>
407
+ <title>Upgrade Streaming Replication and Log-Shipping standby
408
+ servers</title>
409
+
410
+ <para>
411
+ If you have Streaming Replication (<xref
412
+ linkend="streaming-replication">) or Log-Shipping (<xref
413
+ linkend="warm-standby">) standby servers, follow these steps to
414
+ upgrade them (before starting any servers):
415
+ </para>
416
+
417
+ <procedure>
418
+
419
+ <step>
420
+ <title>Install the new PostgreSQL binaries on standby servers</title>
421
+
422
+ <para>
423
+ Make sure the new binaries and support files are installed on all
424
+ standby servers.
425
+ </para>
426
+ </step>
427
+
428
+ <step>
429
+ <title>Make sure the new standby data directories do <emphasis>not</>
430
+ exist</title>
431
+
432
+ <para>
433
+ Make sure the new standby data directories do <emphasis>not</>
434
+ exist or are empty. If <application>initdb</> was run, delete
435
+ the standby server data directories.
436
+ </para>
437
+ </step>
438
+
439
+ <step>
440
+ <title>Install custom shared object files</title>
441
+
442
+ <para>
443
+ Install the same custom shared object files on the new standbys
444
+ that you installed in the new master cluster.
445
+ </para>
446
+ </step>
447
+
448
+ <step>
449
+ <title>Stop standby servers</title>
450
+
451
+ <para>
452
+ If the standby servers are still running, stop them now using the
453
+ above instructions.
454
+ </para>
455
+ </step>
456
+
457
+ <step>
458
+ <title>Verify standby servers</title>
459
+
460
+ <para>
461
+ To prevent old standby servers from being modified, run
462
+ <application>pg_controldata</> against the primary and standby
463
+ clusters and verify that the <quote>Latest checkpoint location</>
464
+ values match in all clusters. (This requires the standbys to be
465
+ shut down after the primary.)
466
+ </para>
467
+ </step>
468
+
469
+ <step>
470
+ <title>Save configuration files</title>
471
+
472
+ <para>
473
+ Save any configuration files from the standbys you need to keep,
474
+ e.g. <filename>postgresql.conf</>, <literal>recovery.conf</>,
475
+ as these will be overwritten or removed in the next step.
476
+ </para>
477
+ </step>
478
+
479
+ <step>
480
+ <title>Start and stop the new master cluster</title>
481
+
482
+ <para>
483
+ In the new master cluster, change <varname>wal_level</> to
484
+ <literal>hot_standby</> in the <filename>postgresql.conf</> file
485
+ and then start and stop the cluster.
486
+ </para>
487
+ </step>
488
+
489
+ <step>
490
+ <title>Run <application>rsync</></title>
491
+
492
+ <para>
493
+ From a directory that is above the old and new database cluster
494
+ directories, run this for each slave:
495
+
496
+ <programlisting>
497
+ rsync --archive --delete --hard-links --size-only old_pgdata new_pgdata remote_dir
498
+ </programlisting>
499
+
500
+ where <option>old_pgdata</> and <option>new_pgdata</> are relative
501
+ to the current directory, and <option>remote_dir</> is
502
+ <emphasis>above</> the old and new cluster directories on
503
+ the standby server. The old and new relative cluster paths
504
+ must match on the master and standby server. Consult the
505
+ <application>rsync</> manual page for details on specifying the
506
+ remote directory, e.g. <literal>standbyhost:/opt/PostgreSQL/</>.
507
+ <application>rsync</> will be fast when <application>pg_upgrade</>'s
508
+ <option>--link</> mode is used because it will create hard links
509
+ on the remote server rather than transferring user data.
510
+ </para>
511
+
512
+ <para>
513
+ If you have tablespaces, you will need to run a similar
514
+ <application>rsync</> command for each tablespace directory. If you
515
+ have relocated <filename>pg_xlog</> outside the data directories,
516
+ <application>rsync</> must be run on those directories too.
517
+ </para>
518
+ </step>
519
+
520
+ <step>
521
+ <title>Configure streaming replication and log-shipping standby
522
+ servers</title>
523
+
524
+ <para>
525
+ Configure the servers for log shipping. (You do not need to run
526
+ <function>pg_start_backup()</> and <function>pg_stop_backup()</>
527
+ or take a file system backup as the slaves are still synchronized
528
+ with the master.)
529
+ </para>
530
+ </step>
531
+
532
+ </procedure>
533
+
534
+ </step>
535
+
401
536
<step>
402
537
<title>Restore <filename>pg_hba.conf</></title>
403
538
@@ -408,6 +543,15 @@ pg_upgrade.exe
408
543
</para>
409
544
</step>
410
545
546
+ <step>
547
+ <title>Start the new server</title>
548
+
549
+ <para>
550
+ The new server can now be safely started, and then any
551
+ <application>rsync</>'ed standby servers.
552
+ </para>
553
+ </step>
554
+
411
555
<step>
412
556
<title>Post-Upgrade processing</title>
413
557
@@ -547,23 +691,16 @@ psql --username postgres --file script.sql postgres
547
691
location. (This is not relevant on Windows.)
548
692
</para>
549
693
550
- <para>
551
- A Log-Shipping Standby Server (<xref linkend="warm-standby">) cannot
552
- be upgraded because the server must allow writes. The simplest way
553
- is to upgrade the primary and use <command>rsync</> to rebuild the
554
- standbys. You can run <command>rsync</> while the primary is down,
555
- or as part of a base backup (<xref linkend="backup-base-backup">)
556
- which overwrites the old standby cluster.
557
- </para>
558
-
559
694
<para>
560
695
If you want to use link mode and you do not want your old cluster
561
696
to be modified when the new cluster is started, make a copy of the
562
697
old cluster and upgrade that in link mode. To make a valid copy
563
698
of the old cluster, use <command>rsync</> to create a dirty
564
699
copy of the old cluster while the server is running, then shut down
565
- the old server and run <command>rsync</> again to update the copy with any
566
- changes to make it consistent. You might want to exclude some
700
+ the old server and run <command>rsync --checksum</> again to update the
701
+ copy with any changes to make it consistent. (<option>--checksum</>
702
+ is necessary because <command>rsync</> only has file modification-time
703
+ granularity of one second.) You might want to exclude some
567
704
files, e.g. <filename>postmaster.pid</>, as documented in <xref
568
705
linkend="backup-lowlevel-base-backup">. If your file system supports
569
706
file system snapshots or copy-on-write file copies, you can use that
0 commit comments