Dapatkan file WAL dari AWS RDS PostgreSQL instance

18

Kami memiliki instance Postgres RDS di Amazon Web Services. Kami memiliki cadangan otomatis yang diaktifkan, dan kami mengambil snapshot setiap hari. Kami ingin membuat cadangan lokal 'terkini' untuk instance RDS yang dapat kami kelola sendiri. Menjalankan pg_dump terhadap instance tidak cukup karena kami ingin dapat mengembalikan database ke titik waktu tertentu. Kami lebih suka memiliki cadangan lokal RDS dan semua file WAL sejak cadangan itu diambil. Pertanyaan:

  1. Apakah mungkin untuk mengakses file WAL dan cadangan yang RDS buat secara otomatis dalam rutinitas pencadangannya? Ini akan ideal. Saya ingin mengunduh salinan lokalnya. Setelah penyelidikan awal, saya merasa jawaban untuk pertanyaan ini adalah 'tidak'. Sepertinya RDS menyimpan file WAL dan cadangannya di S3, tetapi membuatnya tidak dapat diakses oleh kami. Saya ingin konfirmasi.

  2. Apakah ada cara lain untuk mengakses transaksi (file WAL) yang telah terjadi pada instance RDS? Saya membayangkan kita harus dapat membuat database Postgres pada EC2 dan transaksi 'umpan' dari instance RDS 'live' utama kita ke dalam instance EC2 ini. Setelah instance EC2 kami diperbarui, kami dapat menarik file WAL dari sana. Apa sakit kepala: / Apakah pengaturan ini mungkin? Apa keajaiban untuk 'memberi makan' dari instance RDS kami ke instance EC2 sehingga selalu terkini?

Terima kasih!

jason.zissman
sumber

Jawaban:

17

Pembaruan: Saya telah memposting tentang hal ini ke forum AWS - silakan berpadu dan memintanya di sana .


Pada saat penulisan, Amazon RDS tidak mendukung replikasi fisik di luar RDS. Anda bisa GRANTpengguna yang REPLICATIONtepat menggunakan rds_superuserlogin, tapi Anda tidak bisa mengkonfigurasi replicationentri untuk IP luar di pg_hba.conf.

Selanjutnya, ketika Anda membuat grup parameter DB di RDS, beberapa parameter kunci ditampilkan tetapi dikunci, misalnya archive_commandyang dikunci /etc/rds/dbbin/pgscripts/rds_wal_archive %p. AWS RDS untuk PostgreSQL tampaknya tidak mengekspos WAL ini untuk akses eksternal (katakanlah, melalui S3) karena perlu jika Anda menggunakan replikasi pengiriman pengiriman WAL untuk PITR eksternal.

Jadi pada titik ini, jika Anda ingin pengiriman, jangan gunakan RDS. Ini adalah basis data kalengan yang mudah digunakan, tetapi mudah digunakan sering berarti bahwa itu juga terbatas, dan memang demikian halnya di sini. Seperti yang ditunjukkan oleh Joe Love di komentar, itu memberikan pengiriman WAL dan PITR dalam RDS , tetapi Anda tidak bisa mendapatkan akses ke WAL itu dari luar RDS.

Jadi, Anda perlu menggunakan fasilitas cadangan RDS sendiri - dump, snapshots, dan PITR berbasis WAL sendiri.


Bahkan jika RDS membiarkan Anda membuat koneksi replikasi (untuk pg_basebackupatau streaming replikasi) dan memungkinkan Anda untuk mengakses WAL yang diarsipkan, Anda mungkin tidak dapat benar-benar mengkonsumsi WAL itu. RDS menjalankan PostgreSQL yang ditambal, meskipun tidak ada yang tahu seberapa berat ditambal atau apakah itu secara signifikan mengubah format di-disk. Ini juga berjalan pada arsitektur yang dipilih oleh Amazon, yang mungkin x64 Linux, tetapi tidak mudah ditentukan. Karena PostgreSQL pada format disk dan replikasi bergantung pada arsitektur, Anda hanya bisa mereplikasi ke host dengan arsitektur yang sama seperti yang digunakan oleh Amazon RDS, dan hanya jika postgreSQL build Anda kompatibel dengan milik mereka.

Antara lain ini berarti Anda tidak memiliki cara mudah untuk bermigrasi dari RDS. Anda harus menghentikan semua penulisan ke basis data cukup lama untuk mengambil pg_dump, mengembalikannya, dan menjalankan DB yang baru. Trik yang biasa dengan replikasi dan failover, dengan rsync, dll, tidak akan berhasil karena Anda tidak memiliki akses langsung ke host DB.

Bahkan jika RDS menjalankan PostgreSQL Amazon yang belum ditambal mungkin tidak akan mengizinkan Anda untuk melakukan streaming WAL ke RDS atau mengimpor ke RDS menggunakan pg_basebackupuntuk alasan keamanan. PostgreSQL memperlakukan direktori data sebagai konten tepercaya, dan jika Anda telah membuat fungsi 'BAHASA c' yang pintar yang mengaitkan fungsionalitas internal atau melakukan hal lain yang rumit, Anda mungkin dapat mengeksploitasi server untuk mendapatkan akses yang lebih besar daripada yang seharusnya Anda miliki. . Jadi Amazon tidak akan mengizinkan WAL masuk dalam waktu dekat.

Mereka dapat mendukung pengiriman WAL keluar, tetapi masalah di atas dengan kompatibilitas format, kebebasan untuk melakukan perubahan, dll masih berlaku.


Sebagai gantinya Anda harus menggunakan alat seperti Londiste atau Bucardo.

Craig Ringer
sumber
Jika RDS tidak mendukung PITR, untuk apa tombol yang mengatakan "Pulihkan ke titik waktu" bagus untuk?
Joe Love
1
RDS mendukung PITR dalam RDS . Anda tidak dapat mengirim WAL di luar RDS. Saya akan mengedit untuk membuat jawaban itu menjadi lebih jelas, karena saya dapat melihat bagaimana Anda bisa membacanya dengan mengatakan RDS tidak memiliki dukungan PITR sama sekali.
Craig Ringer
1

Replikasi menggunakan sistem berbasis pemicu seperti Londiste dan Bucardo masuk dan keluar dari RDS sekarang didukung pada 10 November 2014 , per balasan di utas forum itu.

Pengumuman di sini

michel-slm
sumber
1
Itu berguna - tetapi tidak sama dengan dibicarakan di sini. Mereka menambahkan dukungan untuk ues replikasi logis berbasis pemicu seperti Bucardo dan Londiste dengan RDS. Ini tidak menambahkan dukungan untuk streaming berbasis log "fisik" seperti yang digunakan oleh hot siaga pg_basebackup, dll. Mereka telah membuat pilihan terbaik yang mereka bisa, karena masalah keamanan mencegah mereka dari benar-benar mendukung replikasi fisik.
Craig Ringer
Aha, ya. Dan terima kasih untuk hasil editnya. Saya sampai pada pertanyaan ini dari yang lain yang lebih umum meminta opsi replikasi - seharusnya memperhatikan yang satu ini bertanya secara spesifik tentang file WAL.
michel-slm
Harap tambahkan tautan ke pertanyaan terkait juga. Itu akan berguna juga.
Craig Ringer
Di sini Anda - akan memposting jawaban saya di sana juga: stackoverflow.com/questions/20468230/…
michel-slm