Belajar pgBackRest - Konsep Dasar & Arsitektur Utama
Episode 2 of 23

Belajar pgBackRest - Konsep Dasar & Arsitektur Utama

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.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

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.

Arsitektur pgBackRest

Stanza: Unit Backup per Cluster Database

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.

/etc/pgbackrest.conf
[global]
repo1-path = /var/lib/pgbackrest
 
[main]
pg1-path = /var/lib/postgresql/16/main

Di 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: Tujuan Penyimpanan Backup

Repository adalah tempat semua backup dan WAL disimpan. Tiga tipe repository yang didukung:

  • Local: direktori di host yang sama dengan database (repo1-path).
  • Remote: direktori di host lain, diakses via SSH (repo1-host).
  • Object storage: S3-compatible, Azure Blob, atau GCS (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.

Proses Backup: Full, Differential, Incremental

pgBackRest menyusun backup dalam tiga tipe yang saling melengkapi:

  • Full: menyalin seluruh data cluster. Fondasi dari semua backup lain.
  • Differential: hanya perubahan sejak full backup terakhir.
  • Incremental: hanya perubahan sejak backup apa pun yang terakhir.
Rantai backup
Full (Minggu) ── Diff (Senin) ── Incr (Selasa) ── Incr (Rabu)
   └── basis       └── sejak Full   └── sejak Incr  └── sejak Incr

Karena setiap backup hanya menyimpan perubahan, kombinasi ini menghemat ruang dan waktu — detailnya kita bedah di episode 5.

Komponen Utama

Binary pgbackrest

Satu binary melakukan semuanya. Cek perintah yang tersedia:

Daftar perintah pgBackRest
pgbackrest help

Perintah 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).

Config /etc/pgbackrest.conf

Semua 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:

/etc/pgbackrest.conf
[global]
repo1-path = /var/lib/pgbackrest
log-level-file = info
process-max = 4
 
[main]
pg1-path = /var/lib/postgresql/16/main
pg1-port = 5432

Semua opsi global maupun per-stanza bisa dioverride per perintah via argumen --opsi, misalnya pgbackrest --stanza=main --type=diff backup.

archive_command di postgresql.conf

Inilah jembatan antara PostgreSQL dan pgBackRest. Saat archive_mode=on, setiap kali WAL dirotasi, PostgreSQL memanggil archive_command — yang kita arahkan ke pgBackRest:

postgresql.conf
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.

Alur Data Satu Arah

Mari ikuti perjalanan data dalam satu backup siklus:

  1. PostgreSQL menulis transaksi ke WAL, lalu merotasi WAL.
  2. archive_command memanggil pgbackrest archive-push %p → WAL masuk repository.
  3. pgbackrest backup menyalin file data + berkonsultasi dengan WAL yang sudah di-archive untuk konsistensi.
  4. Saat bencana, pgbackrest restore menyalin balik file data + memakai archive-get untuk mereplay WAL sampai titik yang diinginkan.
Alur arsitektur
 PostgreSQL ──archive-push──▶ Repository ◀──backup── pgbackrest
      ▲                                  │
      └──────── archive-get ─────────────┘
                 (saat restore)

Perintah yang Paling Sering Dipakai

Sepanjang series ini kalian akan memakai lima perintah ini hampir setiap episode:

Perintah inti pgBackRest
pgbackrest --stanza=main stanza-create
pgbackrest --stanza=main check
pgbackrest --stanza=main backup --type=full
pgbackrest info
pgbackrest --stanza=main restore

Catat 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.

Penutup

Inti yang harus dibawa pulang:

  • Stanza = unit backup per cluster; satu repository bisa menampung banyak stanza.
  • Repository = tujuan backup: local, remote (SSH), atau object storage.
  • Proses backup = full (fondasi), differential (sejak full terakhir), incremental (sejak backup terakhir).
  • Komponen = binary pgbackrest, config /etc/pgbackrest.conf, archive_command di postgresql.conf.
  • Alur = archive-push masuk, backup konsisten, restore + archive-get keluar.

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!