Menyiapkan pgBackRest untuk AlloyDB Omni

Pilih versi dokumentasi:

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

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

Untuk mengetahui informasi selengkapnya tentang pgBackRest, lihat panduan penggunanya.

Sebelum memulai

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

Konfigurasi dasar dengan cadangan 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.

Memasang volume cadangan ke container Anda

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

  1. Jika container 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 container.
  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 Anda 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 container.
    • NEW_PASSWORD: Sandi yang ditetapkan untuk pengguna postgres penampung baru setelah pembuatannya. Perhatikan bahwa NEW_PASSWORD hanya akan menyetel 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 yang harus digunakan container untuk memublikasikan port 5432-nya sendiri. Untuk menggunakan port default PostgreSQL di mesin host juga, tentukan 5432.
  4. Buat direktori cadangan, di container Anda, 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 container.

Mengonfigurasi cadangan lokal

pgBackRest membuat subdirektori untuk setiap cadangan 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 harus cocok dengan server host, cluster PostgreSQL, atau nama database. Dokumentasi pgBackRest menyarankan untuk memberi nama stanza sesuai dengan fungsi cluster.

Repositori adalah tempat cadangan 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 terpisah. Contoh, pg1-.

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

Untuk membuat dan menginisialisasi file konfigurasi untuk mencadangkan cluster AlloyDB Omni, buat file pgbackrest.conf di direktori pencadangan sisi host yang Anda buat di Pasang volume cadangan ke container Anda.

[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 spesifik Anda jika diperlukan, seperti berikut:

  • repo1-path: Lokasi direktori tempat cadangan ditulis. Sebaiknya gunakan lokasi yang dapat dilihat oleh server host dan penampung.

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

  • repo1-retention-full: Jumlah cadangan 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 lain yang tidak penting, 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 agar sesuai dengan kebutuhan Anda dalam file konfigurasi, atau mengganti nilai ini dengan argumen command line --log-level-console. Defaultnya adalah warn.

  • start-fast: Memaksa titik pemeriksaan 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. Biasanya disetel ke max_cpu/4 di cluster utama atau max_cpu/2 di cluster standby. Defaultnya adalah 1.

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

Ada banyak parameter konfigurasi pgBackRest lainnya yang dapat disesuaikan. Dokumentasi ini hanya mencakup parameter wajib untuk konfigurasi AlloyDB 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 container.
  2. Konfigurasi 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 container.
  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 container.
  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 container.
  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 container.

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 container.
  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 container.
  3. Laporan cadangan.

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

Menyiapkan pencadangan terjadwal

Untuk menyiapkan pencadangan terjadwal, buat cron job yang menjalankan perintah pgbackrest backup sesering yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Menjadwalkan pencadangan.

Konfigurasi kustom dan cadangan 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 penentuan repositori cadangan tambahan yang berada di komputer jarak jauh, atau di cloud. Jika Anda menentukan beberapa repositori, pgBackRest akan menulis ke semuanya secara bersamaan sebagai tindakan pencadangan defaultnya.

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

Contoh konfigurasi menggunakan Cloud Storage

Langkah-langkah di bagian ini didasarkan pada file konfigurasi yang diperkenalkan di Konfigurasi dasar dengan cadangan lokal. Perubahan 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 Anda tidak menjalankan AlloyDB Omni di instance VM Compute Engine, Anda tetap dapat mencadangkan ke bucket Cloud Storage menggunakan metode autentikasi lain, seperti kunci akun layanan yang disimpan ke sistem file lokal. Google Cloud

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

  1. Konfigurasi izin bucket untuk mengizinkan akun layanan yang terlampir ke instance VM Anda menulis ke bucket. Hal ini memerlukan peran IAM Storage Object User yang ditetapkan di akun layanan tersebut.

  2. Tambahkan baris berikut ke bagian [global] pada 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 tempat Anda ingin pgBackRest menyimpan cadangan.
    • 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 container.

Setelah Anda menginisialisasi repositori cadangan di bucket Cloud Storage menggunakan perintah pgbackrest stanza-create, pgBackRest dapat mencadangkan hingga 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 repo2-gcs-bucket direktif konfigurasi yang disiapkan oleh contoh ini. Untuk menggunakan bucket Cloud Storage, tentukan --repo=2 dalam perintah pgbackrest.

Langkah berikutnya