Episode ini membedah arsitektur pgBackRest: stanza sebagai unit backup per cluster, repository sebagai tujuan penyimpanan (local, remote, atau object storage), dan proses backup full, differential, serta incremental. Kalian juga mengenali peran binary pgbackrest, config /etc/pgbackrest.conf, archive_command, dan command utama seperti backup, restore, archive-push/get, serta info.

Setelah memahami sejarah dan filosofi di episode 1, saatnya membedah anatomi pgBackRest. Jika episode 1 menjawab "mengapa", episode 2 menjawab "bagaimana ia disusun" — dan ini penting karena seluruh konfigurasi dan perintah di episode berikutnya merujuk ke konsep-konsep ini. Paham arsitekturnya, dan semua perintah terasa logis; tidak paham, dan kalian hanya menghafal command.
Tiga konsep kunci yang harus kalian kuasai: stanza, repository, dan proses backup. Ketiganya akan muncul di hampir setiap baris konfigurasi dan perintah yang kita tulis.
Stanza adalah unit backup untuk satu cluster PostgreSQL. Setiap cluster (primary, atau nanti di episode 18, standby) memiliki stanza sendiri dengan nama bebas yang kita tentukan — misalnya main, prod, atau analytics. Stanza memisahkan semua data (backup, WAL, metadata) antar cluster di dalam repository yang sama.
[global]
repo1-path = /var/lib/pgbackrest
[main]
pg1-path = /var/lib/postgresql/16/mainDi sini [main] adalah stanza untuk cluster yang PGDATA-nya ada di /var/lib/postgresql/16/main. Satu repository bisa menampung banyak stanza — bayangkan satu host dengan tiga cluster: main, reports, warehouse, masing-masing dengan stanza sendiri.
Repository adalah tempat semua backup dan WAL disimpan. Tiga tipe repository yang didukung:
repo1-path).repo1-host).repo1-type=s3 dsb.).pgBackRest mendukung hingga dua repository (repo1, repo2) sekaligus — pola umumnya satu local untuk recovery cepat, satu object storage untuk off-site. Kita bangun konfigurasi ini di episode 12.
pgBackRest menyusun backup dalam tiga tipe yang saling melengkapi:
Full (Minggu) ── Diff (Senin) ── Incr (Selasa) ── Incr (Rabu)
└── basis └── sejak Full └── sejak Incr └── sejak IncrKarena setiap backup hanya menyimpan perubahan, kombinasi ini menghemat ruang dan waktu — detailnya kita bedah di episode 5.
pgbackrestSatu binary melakukan semuanya. Cek perintah yang tersedia:
pgbackrest helpPerintah inti: backup (buat backup), restore (pulihkan), archive-push (terima WAL dari PostgreSQL), archive-get (kirim WAL saat restore), info (status), check (validasi), stanza-create (inisialisasi stanza), dan expire (retention).
/etc/pgbackrest.confSemua opsi disimpan di config file (format INI). Struktur umumnya dua bagian: [global] untuk opsi yang berlaku ke semua stanza, dan [nama-stanza] untuk opsi khusus cluster:
[global]
repo1-path = /var/lib/pgbackrest
log-level-file = info
process-max = 4
[main]
pg1-path = /var/lib/postgresql/16/main
pg1-port = 5432Semua opsi global maupun per-stanza bisa dioverride per perintah via argumen --opsi, misalnya pgbackrest --stanza=main --type=diff backup.
Inilah jembatan antara PostgreSQL dan pgBackRest. Saat archive_mode=on, setiap kali WAL dirotasi, PostgreSQL memanggil archive_command — yang kita arahkan ke pgBackRest:
archive_mode = on
archive_command = 'pgbackrest --stanza=main archive-push %p'
archive_timeout = 60%p adalah path WAL lengkap yang sedang diarsipkan. pgBackRest menyalin, mengompresi, dan mengencripsi WAL tersebut ke repository. Arah sebaliknya (saat restore) memakai archive-get yang diintegrasikan otomatis oleh perintah restore.
Mari ikuti perjalanan data dalam satu backup siklus:
archive_command memanggil pgbackrest archive-push %p → WAL masuk repository.pgbackrest backup menyalin file data + berkonsultasi dengan WAL yang sudah di-archive untuk konsistensi.pgbackrest restore menyalin balik file data + memakai archive-get untuk mereplay WAL sampai titik yang diinginkan. PostgreSQL ──archive-push──▶ Repository ◀──backup── pgbackrest
▲ │
└──────── archive-get ─────────────┘
(saat restore)Sepanjang series ini kalian akan memakai lima perintah ini hampir setiap episode:
pgbackrest --stanza=main stanza-create
pgbackrest --stanza=main check
pgbackrest --stanza=main backup --type=full
pgbackrest info
pgbackrest --stanza=main restoreCatat polanya: --stanza menentukan cluster mana yang disentuh, lalu diikuti perintah yang ingin dijalankan. info menampilkan status semua stanza dan backup dalam bentuk tabel.
Note
Stanza itu seperti "lemari arsip" per cluster. Jangan pernah memakai nama stanza yang sama untuk dua cluster berbeda — pgBackRest mengunci stanza dengan metadata cluster, dan mencampurnya akan membuat check gagal dengan error identitas cluster yang tidak cocok.
Inti yang harus dibawa pulang:
pgbackrest, config /etc/pgbackrest.conf, archive_command di postgresql.conf.Di episode 3 selanjutnya kita akan menginstall dan mengonfigurasi pgBackRest secara nyata — dari instalasi paket distribusi atau build from source, pembuatan user dan direktori, hingga penulisan /etc/pgbackrest.conf pertama dengan bagian [global] dan [stanza] yang benar. Saatnya tangan kalian menyentuh keyboard!