PostgreSQL dilengkapi dengan alat yang Anda perlukan untuk melakukan pencadangan, pencadangan tambahan/berkelanjutan, dan melakukan pemulihan tepat waktu dari pencadangan. Pengarsipan file WAL adalah operasi mendasar yang memfasilitasi fitur-fitur ini. Baca terus untuk mengetahui lebih lanjut tentang semua ini.

APA ITU WAL?

WAL adalah kependekan dari Write Ahead Log .

WAL digunakan di hampir semua sistem RDBMS modern untuk menyediakan transaksi yang tahan lama dan bersifat atomik. Sederhananya, setiap transaksi yang dilakukan pada database pertama-tama ditulis sebagai file WAL, kemudian diterapkan ke file data tabel sebenarnya pada disk. File WAL sangat berurutan. Hal ini menjadikan urutan file WAL sebagai "log pemutaran ulang" perubahan.

Konsepnya mirip dengan AOF Redis, binlog MySQL, dan oplog MongoDB.

Jadi, apakah itu file sebenarnya? Ya. Mereka tinggal di $PGDATA/pg_xlog, di mana $PGDATAdirektori datanya, seperti /var/lib/postgresql/9.6/main. Itu adalah file biner, masing-masing 16MB.

Bukankah jumlahnya akan terus menumpuk? Mereka akan melakukannya, jika Anda tidak memberi tahu Postgres kapan harus membersihkannya. Anda dapat membatasi file-file ini berdasarkan nomor ( wal_keep_segments) dan/atau ukuran total ( max_wal_size).

PENGARSIPAN WAL

Saat Anda terus memodifikasi data dalam database di server, file WAL terus dibuat (dan dibuang setelah beberapa saat).

Jika Anda menyimpan salinan setiap file WAL yang dihasilkan, Anda dapat memutar ulang seluruh rangkaian perubahan ke server lain. Melakukan ini secara real-time lebih dikenal dengan replikasi. Anda dapat membaca lebih lanjut tentang replikasi PostgreSQL di sini .

Menyimpan semua file WAL yang dihasilkan ke lokasi offline yang aman pada dasarnya menjadi cadangan tambahan .

[Catatan tambahan: Secara teknis, ada satu urutan file WAL untuk satu contoh server PostgreSQL yang sedang berjalan. File WAL akan berisi semua perubahan di seluruh database yang dikelola oleh instance tersebut.]

Dalam istilah PostgreSQL, menyalin file WAL yang dihasilkan disebut pengarsipan , dan membuat server membaca file WAL dan menerapkannya disebut memulihkan .

 halDash

Tahu lebih banyak

Pemantauan PostgreSQL Mendalam
KOMANDO ARSIP

Karena PostgreSQL tidak tahu bagaimana Anda ingin mengarsipkan file WAL, Anda harus menyediakan skrip. PostgreSQL akan memanggil skrip ini ketika setiap file WAL siap untuk diarsipkan. Skrip harus memprosesnya (biasanya menyalinnya ke lokasi yang aman) dan melaporkan apakah berhasil, melalui kode keluar (yaitu, keluar 0 dari skrip Anda setelah berhasil diselesaikan).

Setelah skrip berhasil memproses file WAL, server bebas menghapus atau mendaur ulangnya jika dirasa perlu.

Skrip diatur menggunakan archive_commandpengaturan konfigurasi. ( dokumen ). Berikut beberapa contohnya:

# Copy the file to a safe location (like a mounted NFS volume)
archive_command = 'cp %p /mnt/nfs/%f'

# Not overwriting files is a good practice
archive_command = 'test ! -f /mnt/nfs/%f && cp %p /mnt/nfs/%f'

# Copy to S3 bucket
archive_command = 's3cmd put %p s3://BUCKET/path/%f'

# Copy to Google Cloud bucket
archive_command = 'gsutil cp %p gs://BUCKET/path/%f'

# An external script
archive_command = '/opt/scripts/archive_wal %p'

Saat menulis skrip Anda sendiri, ingatlah beberapa hal:

  • Jika skrip gagal, skrip akan dipanggil lagi, berulang kali, hingga berhasil. Tidak ada penundaan antara fitur percobaan ulang atau penghentian setelah N percobaan ulang.
  • File berukuran 16MB, dan biasanya dikompres dengan baik.
  • Script akan dipanggil secara berurutan, tidak ada paralelisme.
  • Praktik terbaiknya adalah tidak menimpa file tujuan jika ada.
  • Anda harus memperlakukan file yang diberikan PostgreSQL sebagai file hanya-baca. Jika Anda ingin mengompresnya, pastikan untuk tidak mengubah aslinya.
  • Script akan dipanggil sebagai user postgres. Pastikan pengguna ini memiliki izin baca/tulis yang diperlukan untuk direktori yang relevan.
TINGKAT WAL

Secara default, file WAL hanya berisi informasi yang diperlukan untuk memulihkan dari kerusakan atau penghentian segera. Ini adalah minimaltingkat WAL.

Level berikutnya adalah archive(atau replicadi versi 9.6 ke atas). Menyetel tingkat WAL ke archiveatau lebih tinggi akan membuat server menyertakan informasi yang cukup untuk memungkinkan pengarsipan (dan pemulihan) file WAL.

Level setelahnya dipanggil hot_standy(juga dipetakan ke replicaversi 9.6 dan lebih tinggi), dan mencakup informasi yang diperlukan untuk menjalankan kueri read-only di server siaga.

Dengan level terakhir logical, dimungkinkan untuk mengekstrak set perubahan logis dari WAL.

Level WAL adalah pengaturan konfigurasi yang disebut wal_level. Untuk kebutuhan kita, kita perlu menyetelnya ke setidaknya archive. PostgreSQL akan menolak untuk memulai jika Anda meminta pengarsipan tetapi wal_levelkurang dari ini.

# The WAL level must be archive or higher.
wal_level = archive
BATAS WAKTU ARSIP HABIS

Jika server PostgreSQL Anda mengalami hari yang tenang dengan tingkat transaksi yang rendah, mungkin perlu beberapa saat untuk mengisi satu file WAL lengkap. Namun dari sudut pandang operasional, biasanya merupakan ide bagus untuk memiliki setidaknya satu file WAL yang dicadangkan setiap X menit (atau jam atau hari, sesuai dengan pengaturan Anda).

Pengaturan ini archive_timeoutdapat digunakan untuk memberitahu PostgreSQL untuk menghasilkan setidaknya satu file WAL setiap durasi “archive_timeout”, meskipun kosong.

# Ensure there is at least one WAL file for each "archive_timeout" duration.
archive_timeout = 1h
MENGONTROL FILE WAL

PostgreSQL menawarkan beberapa tuas untuk mengontrol jumlah file WAL yang ada di pg_xlogdirektori.

Pengaturan min_wal_sizedan max_wal_sizebatasan tempat pada ukuran total file WAL. Memiliki batas minimum memungkinkan daur ulang file lama (namanya diubah terlebih dahulu). Batas atas adalah batas lunak, karena server hanya dapat menghapus file yang berhasil diarsipkan dengan aman.

Dapat wal_keep_segmentsdigunakan untuk menetapkan batas minimum jumlah file WAL dalam format pg_xlog. Hal ini terutama untuk memungkinkan server siaga yang lambat atau terputus-putus.

# This is a soft upper limit on the total size of WAL files.
max_wal_size = 1GB

# Keep around at least these many WAL files (aka segments).
wal_keep_segments = 10
PENGATURAN ARSIP

Terakhir, ada archive_modepengaturan, yang tentunya harus diatur onagar pengarsipan dapat berfungsi. Berikut adalah pengaturan penting untuk pengarsipan, yang dirangkum:

# The WAL level must be archive or higher.
wal_level = archive

# This is a soft upper limit on the total size of WAL files.
max_wal_size = 1GB

# Keep around at least these many WAL files (aka segments).
wal_keep_segments = 10

# The archive_mode must be set to on for archiving to happen.
archive_mode = on

# This is the command to invoke for each WAL file to be archived.
archive_command = '/opt/scripts/archive_wal %p'

# Ensure there is at least one WAL file for each "archive_timeout" duration.
archive_timeout = 1h

MEMULIHKAN WAL

Memulihkan WAL biasanya dilakukan dalam konteks memulihkan dari cadangan, melakukan pemulihan point-in-time (PITR) atau replikasi streaming. Agak terlalu luas untuk dibahas dalam postingan blog yang sama ini, jadi kami hanya perlu melakukan ini sebagai postingan lainnya – pantau terus!

Anda dapat membaca tentang replikasi streaming di postingan blog kami yang lain yang berjudul “ Semua Tentang Replikasi Streaming PostgreSQL ”.

PEMANTAUAN PENGARSIPAN WAL

PostgreSQL menyediakan pengumpul statistik yang dapat ditanyakan untuk memeriksa status pengarsipan WAL. Secara khusus Anda dapat menggunakan pg_stat_archiveruntuk melihat jumlah keberhasilan dan kegagalan WAL.

Dengan OpsDash , Anda dapat dengan cepat mulai memantau server PostgreSQL Anda, dan mendapatkan wawasan instan tentang metrik kinerja dan kesehatan utama termasuk pengarsipan WAL.

Dasbor OpsDash PostgreSQL Menampilkan Statistik Pengarsipan WAL

Dasbor OpsDash PostgreSQL Menampilkan Statistik Pengarsipan WAL

Menambahkan peringatan berbasis ambang batas ke metrik jumlah kegagalan arsip adalah cara cepat dan mudah untuk mengetahui pekerjaan arsip yang gagal sebelum menjadi tidak terkendali dan file WAL menghabiskan ruang disk server Anda.

LEBIH LANJUT TENTANG POSTGRESQL

BARU DISINI?

OpsDash adalah solusi pemantauan server, pemantauan layanan, dan pemantauan basis data untuk memantau MySQL, PostgreSQL, MongoDB, memcache, Redis, Apache, Nginx, URL HTTP, Elasticsearch, dan banyak lagi. Ini menyediakan dasbor yang cerdas dan dapat disesuaikan serta peringatan bebas spam melalui email, HipChat, Slack, PagerDuty, dan PushBullet.

OpsDash tersedia sebagai solusi lokal yang dihosting sendiri dan sebagai solusi SaaS. Pilih yang tepat untuk Anda!

Tertarik untuk menghosting sendiri? Mulai Gratis hari ini!

Lebih suka SaaS? Daftar untuk versi beta!