Episode ini memindahkan beban backup ke replica: mengambil backup dari standby dengan pg1-standby dan backup-standby untuk meringankan primary, menjaga konsistensi WAL, mengintegrasikan dengan Patroni/repMgr, dan restore ke node baru di cluster HA. Backup dan high availability bekerja dalam satu arsitektur.

Sampai episode 17, semua backup kita diambil dari primary — server yang melayani traffic. Untuk database besar, backup memakan CPU, I/O, dan bandwidth — persis sumber daya yang dibutuhkan transaksi produksi. Di episode 18 kita menyelesaikan masalah ini dengan cara yang elegan: mengambil backup dari standby (replica) — server yang tidak melayani traffic tulis.
Ini juga episode tempat pgBackRest dan high availability (HA) bertemu: backup tidak lagi menjadi beban primary, dan restore menjadi cara menumbuhkan node baru di cluster HA. Dua sistem yang biasanya diurus terpisah, kini berjalan dalam satu kesatuan.
Primary melayani semua tulis dan baca kritikal. Menjalankan backup di sana berarti:
Standby tidak punya masalah ini — ia hanya menerapkan WAL dari primary. Backup di standby = beban nol di primary.
Standby harus streaming replication aktif dari primary, dan backup (full/diff/incr) tetap konsisten karena diambil dari file data + WAL yang sama. pgBackRest memastikan konsistensi dengan memeriksa posisi WAL saat backup — konsep yang sama seperti backup dari primary.
Pada host standby, konfigurasi stanza menunjuk ke cluster standby:
[global]
repo1-path = /var/lib/pgbackrest
[main]
pg1-path = /var/lib/postgresql/16/standby
pg1-standby = ypg1-standby = y — memberitahu pgBackRest bahwa cluster ini adalah standby, sehingga memperlakukan backup dengan cara yang sesuai.backup-standby = y pada perintah backup:sudo -u postgres pgbackrest --stanza=main --backup-standby backup --type=fullPertanyaan yang sering muncul: bagaimana backup standby konsisten jika file data standby selalu berubah (menerapkan WAL)?
Jawabannya: pgBackRest mencatat posisi WAL (replay location) saat backup dimulai dan selesai, lalu melengkapi backup dengan WAL yang diarsipkan hingga posisi tersebut. Hasilnya backup standby identik konsisten dengan backup primary — sama-sama mewakili kondisi database pada titik waktu tertentu. Ini yang membuat restore dari backup standby sama validnya.
Note
Backup standby membutuhkan WAL archiving aktif di primary (episode 6) — tanpa WAL yang terarsipkan, konsistensi backup standby tidak bisa dijamin. Pastikan archive_mode=on dan archive_command mengarah ke repository yang sama.
Patroni dan repMgr mengelola siapa yang jadi primary dan kapan failover terjadi. pgBackRest mengelola bagaimana data dipulihkan dan node baru dilahirkan. Keduanya saling melengkapi: Patroni memutuskan, pgBackRest menyediakan data.
Pola yang paling umum di cluster yang dikelola Patroni:
backup-standby) — beban nol di primary.sudo -u postgres pgbackrest --stanza=main --delta restore
sudo -u postgres pg_ctl -D /var/lib/postgresql/16/main start
# Patroni mendeteksi node baru dan menghubungkannya ke primaryKarena Patroni mengelola identitas cluster, pastikan stanza pgBackRest konsisten dengan identitas yang diharapkan Patroni — restore dari backup yang sama lalu sinkron via WAL adalah pola yang sangat umum di produksi.
Saat failover, standby naik menjadi primary. Konsekuensi bagi pgBackRest:
archive_command benar di semua node, bukan hanya node lama.Praktik baik: stanza-create dan check di setiap node setelah failover, sehingga identitas cluster tetap sinkron:
sudo -u postgres pgbackrest --stanza=main check
sudo -u postgres pgbackrest --stanza=main infoWarning
Setelah failover, jangan lupa stanza-upgrade jika timeline berubah drastis dan check di semua node. Kegagalan paling umum pasca-failover adalah WAL archiving yang masih mengarah ke node lama — alarm failed_count (episode 14) biasanya yang pertama menyadarkan.
Ketika cluster HA butuh node tambahan (atau node rusak), jangan menyalin PGDATA dari primary (mahal dan mengganggu). Gunakan backup:
# 1. buat direktori dan restore dari backup terakhir
sudo mkdir -p /var/lib/postgresql/16/main
sudo chown postgres:postgres /var/lib/postgresql/16/main
sudo -u postgres pgbackrest --stanza=main --delta restore
# 2. konfigurasi replica (primary_conninfo) lalu start
# 3. Patroni/repMgr mengelola pengenalan dan streamingNode baru start sebagai standby, menerapkan WAL dari primary, dan mengejar ketertinggalan dengan cepat. Backup yang pernah diuji (episode 16) membuat proses ini bisa diprediksi.
Simulasikan penambahan node di lab:
sudo -u postgres pgbackrest --stanza=main --delta \
--pg1-path=/var/lib/postgresql/16/nodebaru restore
sudo -u postgres /usr/lib/postgresql/16/bin/pg_ctl \
-D /var/lib/postgresql/16/nodebaru start
# verifikasi streaming: SELECT * FROM pg_stat_replication;Inti yang harus dibawa pulang:
backup-standby) memindahkan beban backup dari primary ke replica.pg1-standby = y memberi tahu pgBackRest bahwa cluster adalah standby.check dan stanza-upgrade di semua node, dan pastikan archive_command benar.Di episode 19 selanjutnya kita akan mengukur dan mengoptimalkan untuk skala: database besar & delta optimization — parallel backup untuk data terabyte, tuning process-max sesuai resource, --delta restore, dan benchmark yang membandingkan durasi backup/restore terhadap ukuran database. Optimasi dimulai dari data, bukan tebakan!