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:
- Instal dan jalankan AlloyDB Omni di server yang Anda kontrol.
- Siapkan penyimpanan data persisten untuk instance AlloyDB Omni Anda.
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:
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.
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.
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 penggunapostgres
penampung baru setelah pembuatannya. Perhatikan bahwaNEW_PASSWORD
hanya akan menetapkan sandi baru jikaDATA_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 port5432
-nya sendiri. Untuk menggunakan port default PostgreSQL di mesin host juga, tentukan5432
.
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 adalahwarn
.start-fast
: Memaksa checkpoint untuk memulai pencadangan dengan cepat. Defaultnya adalahn
.archive-async
: Mendorong file segmen WAL secara asinkron untuk performa. Defaultnya adalahn
.process-max
: Jumlah maksimum proses yang akan digunakan untuk kompresi dan transfer. Nilai ini biasanya ditetapkan kemax_cpu/4
di cluster utama ataumax_cpu/2
di cluster siaga. Defaultnya adalah1
.compress-type
: Algoritma kompresi yang akan digunakan. Defaultnya adalahgz
.
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:
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.
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.
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.
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.
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
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.
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.
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:
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.
Tambahkan baris ini ke bagian
[global]
di filepgbackrest.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.
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 perintahpgbackrest
.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 perintahpgbackrest
.