Menyiapkan pgBackRest untuk AlloyDB Omni

Halaman ini menunjukkan cara melindungi data dengan mengonfigurasi AlloyDB Omni agar berfungsi dengan pgBackRest, server pencadangan database open source.

Untuk informasi berbasis Kubernetes, lihat Mencadangkan dan memulihkan di Kubernetes.

Untuk informasi selengkapnya tentang pgBackRest, lihat panduan penggunanya.

Sebelum memulai

Sebelum mengonfigurasi AlloyDB Omni agar berfungsi dengan pgBackRest, selesaikan prasyarat berikut:

Konfigurasi dasar dengan pencadangan lokal

Langkah-langkah di bagian ini akan memandu Anda melakukan penyiapan dasar pgBackRest. Konfigurasi dasar tidak mengaktifkan pencadangan sesuai jadwal. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan pencadangan terjadwal.

Karena pgBackRest adalah produk pihak ketiga yang fleksibel dan kompatibel dengan AlloyDB Omni, Anda dapat mengubah langkah-langkah ini sesuai kebutuhan dan preferensi Anda sendiri.

Memasang volume cadangan ke penampung

Untuk tujuan organisasi, sebaiknya buat dan pasang volume terpisah untuk pencadangan pgBackRest. Untuk menyiapkan volume baru, selesaikan langkah-langkah berikut:

  1. Jika penampung Anda berjalan, hentikan dan hapus.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  2. Buat direktori cadangan di sistem file penampung Anda.

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Ganti variabel berikut:

    • BACKUP_DIR: Direktori host tempat cadangan Anda akan disimpan.
  3. Buat ulang penampung dengan volume cadangan baru.

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
    • NEW_PASSWORD: Sandi yang ditetapkan ke pengguna postgres penampung baru setelah pembuatannya. Perhatikan bahwa NEW_PASSWORD hanya akan menetapkan sandi baru jika DATA_DIR adalah lokasi baru.
    • DATA_DIR: Jalur direktori host tempat data Anda disimpan.
    • DATA_DIR: Jalur direktori host tempat data Anda disimpan.
    • BACKUP_DIR: Direktori host tempat cadangan Anda akan disimpan.
    • HOST_PORT: Port TCP di mesin host tempat penampung harus memublikasikan port 5432-nya sendiri. Untuk menggunakan port default PostgreSQL di mesin host juga, tentukan 5432.
  4. Buat direktori cadangan, di penampung Anda, yang dapat dibaca oleh postgres.

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.

Mengonfigurasi pencadangan lokal

pgBackRest membuat subdirektori untuk setiap pencadangan yang diambil dan menyertakan file manifes teks biasa.

pgBackRest menggunakan istilah stanza untuk merujuk pada konfigurasi untuk cluster database PostgreSQL. Nama stanza bersifat arbitrer dan tidak perlu cocok dengan server host, cluster PostgreSQL, atau nama database. Dokumentasi pgBackRest menyarankan untuk memberi nama stanza berdasarkan fungsi cluster.

Repositori adalah tempat pencadangan ditulis. pgBackRest mendukung penulisan ke lebih dari satu repositori dalam stanza tertentu. Sebagian besar parameter konfigurasi yang terkait dengan repositori diindeks dengan nilai numerik. Misalnya, repo1-. Parameter yang terkait dengan cluster PostgreSQL juga diindeks secara independen. Contoh, pg1-.

pgBackRest memanfaatkan file konfigurasi, yang disebut pgbackrest.conf, untuk menyimpan parameter global dan khusus stanza.

Untuk mem-build dan melakukan inisialisasi file konfigurasi guna mencadangkan cluster AlloyDB Omni, buat file pgbackrest.conf di direktori pencadangan sisi host yang Anda buat di Memasang volume cadangan ke penampung.

[global]
# Paths (all mandatory):
repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups

# Retention details:
repo1-retention-full=3
repo1-retention-full-type=count
repo1-retention-diff=16

# Force a checkpoint to start backup immediately:
start-fast=y

# Logging parameters:
log-path=/var/lib/postgresql/backups
log-level-console=info
log-level-file=info

# Recommended ZSTD compression:
compress-type=zst

# Other performance parameters:
archive-async=y
archive-push-queue-max=1024MB
archive-get-queue-max=256MB
archive-missing-retry=y

[global:archive-push]
process-max=2

[global:archive-get]
process-max=2

[omni]
pg1-user=postgres
pg1-socket-path=/tmp
pg1-path=/var/lib/postgresql/data

Beberapa parameter bersifat wajib, tetapi parameter lainnya dapat disesuaikan untuk memenuhi persyaratan khusus Anda jika diperlukan, seperti berikut:

  • repo1-path: Lokasi direktori tempat cadangan ditulis. Sebaiknya pilih lokasi yang terlihat oleh server host dan penampung.

  • log-path: Lokasi direktori tempat file log ditulis. Jika Anda ingin menulis file log ke lokasi terpisah, bukan dicampur dengan cadangan itu sendiri, sesuaikan parameter ini.

  • repo1-retention-full: Jumlah pencadangan penuh yang akan dipertahankan.

  • repo1-retention-full-type: Apakah retensi diukur berdasarkan jumlah atau jangka waktu (hari).

  • repo1-retention-diff: Jumlah cadangan diferensial yang akan dipertahankan.

Setelan parameter non-penting lainnya, tetapi direkomendasikan, yang kompatibel dengan AlloyDB Omni dalam file konfigurasi mencakup hal berikut:

  • log-level-console: Tingkat logging yang ditulis ke layar (STDOUT) saat menjalankan perintah pgBackup. Anda dapat menyesuaikannya untuk memenuhi kebutuhan Anda dalam file konfigurasi, atau mengganti nilai ini dengan argumen command line --log-level-console. Defaultnya adalah warn.

  • start-fast: Memaksa checkpoint untuk memulai pencadangan dengan cepat. Defaultnya adalah n.

  • archive-async: Mendorong file segmen WAL secara asinkron untuk performa. Defaultnya adalah n.

  • process-max: Jumlah maksimum proses yang akan digunakan untuk kompresi dan transfer. Nilai ini biasanya ditetapkan ke max_cpu/4 di cluster utama atau max_cpu/2 di cluster siaga. Defaultnya adalah 1.

  • compress-type: Algoritma kompresi yang akan digunakan. Defaultnya adalah gz.

Ada banyak parameter konfigurasi pgBackRest lainnya yang ada dan dapat disesuaikan. Dokumentasi ini hanya mencakup parameter yang wajib untuk konfigurasi AlloDB Omni default dan beberapa setelan parameter yang direkomendasikan. Untuk mengetahui daftar lengkap parameter konfigurasi, lihat dokumentasi online Referensi Konfigurasi pgBackRest.

Setelah mengonfigurasi pgBackRest, repositori target tempat cadangan ditulis harus diinisialisasi dengan membuat stanza, yang menggunakan parameter seperti yang ditetapkan dalam file konfigurasi.

Untuk mengonfigurasi database Anda untuk pencadangan, selesaikan langkah-langkah berikut:

  1. Buat stanza menggunakan perintah stanza-create.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  2. Konfigurasikan database Anda untuk pencadangan.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  3. Mulai ulang penampung Anda.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  4. Validasi konfigurasi pencadangan.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  5. Lakukan pemeriksaan pgBackRest.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.

Melakukan pencadangan

  1. Lakukan pencadangan penuh.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  2. Lakukan pencadangan diferensial.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.
  3. Melaporkan pencadangan.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.

Menyiapkan pencadangan terjadwal

Untuk menyiapkan pencadangan terjadwal, buat tugas cron yang menjalankan perintah pgbackrest backup sering kali sesuai kebutuhan. Untuk mengetahui informasi selengkapnya, lihat Menjadwalkan pencadangan.

Konfigurasi kustom dan pencadangan jarak jauh

Setelah konfigurasi dasar berfungsi, Anda dapat menyesuaikan file konfigurasi agar sesuai dengan kebutuhan dan preferensi Anda menggunakan opsi yang didokumentasikan dalam referensi konfigurasi pgBackRest.

Hal ini mencakup menentukan repositori cadangan tambahan yang berada di mesin jarak jauh, atau di cloud. Jika Anda menentukan beberapa repositori, pgBackRest akan menulis ke semua repositori secara bersamaan sebagai tindakan pencadangan default-nya.

Misalnya, pgBackRest mendukung penggunaan bucket Cloud Storage sebagai repositori cadangan, dengan sejumlah opsi konfigurasi terkait. Bagian berikut menunjukkan salah satu cara menggunakan opsi ini.

Contoh konfigurasi menggunakan Cloud Storage

Langkah-langkah di bagian ini dibuat berdasarkan file konfigurasi yang diperkenalkan di Konfigurasi dasar dengan pencadangan lokal. Modifikasi ini pada file tersebut menentukan repositori cadangan kedua di bucket Cloud Storage, yang diakses melalui Identity and Access Management (IAM).

Gaya autentikasi otomatis dalam contoh ini memerlukan cluster AlloyDB Omni untuk berjalan di instance VM Compute Engine. Jika tidak menjalankan AlloyDB Omni di instance VM Compute Engine, Anda masih dapat mencadangkan ke bucket Cloud Storage menggunakan metode autentikasi lain, seperti kunci akun layanan Google Cloud yang disimpan ke sistem file lokal.

Untuk memperluas file konfigurasi sebelumnya guna menentukan repositori pgBackRest berbasis Cloud Storage, ikuti langkah-langkah berikut:

  1. Konfigurasikan izin bucket agar akun layanan yang dilampirkan ke instance VM Anda dapat menulis ke bucket. Hal ini memerlukan peran IAM Pengguna Objek Penyimpanan yang ditetapkan di akun layanan tersebut.

  2. Tambahkan baris ini ke bagian [global] di file pgbackrest.conf Anda:

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=PATH_IN_BUCKET
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    Ganti variabel berikut:

    • BUCKET_NAME: Nama bucket Cloud Storage yang ingin Anda gunakan untuk menyimpan cadangan oleh pgBackRest.
    • PATH_IN_BUCKET: Jalur direktori di bucket Cloud Storage tempat Anda ingin pgBackRest menyimpan cadangan.
  3. Lakukan inisialisasi lokasi pencadangan berbasis cloud menggunakan perintah pgbackrest stanza-create:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Ganti variabel berikut:

    • CONTAINER_NAME: Nama yang Anda gunakan untuk penampung.

Setelah Anda menginisialisasi repositori cadangan di bucket Cloud Storage menggunakan perintah pgbackrest stanza-create, pgBackRest dapat mencadangkan ke dua lokasi:

  • Lokasi dalam sistem file lokal, yang ditentukan di tempat lain dalam file konfigurasi sebagai repo1-path. Ini adalah lokasi default saat --repo tidak ditentukan dalam perintah pgbackrest.

  • Bucket Cloud Storage, yang ditentukan menggunakan perintah konfigurasi repo2-gcs-bucket yang disiapkan oleh contoh ini. Untuk menggunakan bucket Cloud Storage, tentukan --repo=2 dalam perintah pgbackrest.

Langkah berikutnya