WAL dosyalarını AWS RDS PostgreSQL örneğinden alma


18

Amazon Web Services üzerinde bir Postgres RDS örneğimiz var. Otomatik yedekleri etkinleştirdik ve günlük olarak anlık görüntüler alıyoruz. Kendimizi yönetebileceğimiz RDS örneğinin yerel bir 'güncel' yedeğini oluşturmak istiyoruz. Veritabanını herhangi bir noktaya geri yükleyebilmek istediğimiz için pg_dump'ı örneğe karşı çalıştırmak yeterli değildir. Bu yedek alındığından beri yerel bir RDS yedeğine ve tüm WAL dosyalarına sahip olmayı tercih ederiz. Sorular:

  1. RDS'nin otomatik olarak oluşturduğu WAL dosyalarına ve yedeklemelerine yedekleme rutininde erişmek mümkün müdür? Bu ideal olurdu. Bunların yerel bir kopyasını indirmek istiyorum. İlk araştırmanın ardından bu sorunun cevabının 'hayır' olduğunu hissediyorum. RDS'nin WAL dosyalarını ve yedeklerini S3'te sakladığı anlaşılıyor, ancak onları bizim için erişilemez hale getiriyor. Onay isterim.

  2. RDS örneğinde gerçekleşen işlemlere (WAL dosyaları) erişmenin başka bir yolu var mı? Bir EC2'de Postgres veritabanı oluşturabilmemiz ve birincil 'canlı' RDS örneğimizden bu EC2 örneğine 'feed' işlemlerini yapabileceğimizi düşünüyorum. EC2 örneğimiz güncellendikten sonra, WAL dosyalarını oradan alabiliriz. Ne baş ağrısı, ama: / Bu kurulum mümkün mü? Her zaman güncel olması için RDS örneğimizden EC2 örneğine 'besleme' büyüsü nedir?

Teşekkürler!

Yanıtlar:


17

Güncelleme: Bu konuyu AWS forumlarına gönderdim - lütfen buraya girin ve orada isteyin .


Yazma sırasında, Amazon RDS, RDS dışında fiziksel çoğaltmayı desteklemez. Bir oturum açma kullanarak GRANTkullanıcıları REPLICATIONdoğru yapabilirsiniz rds_superuser, ancak replicationiçindeki dış IP'ler için girişleri yapılandıramazsınız pg_hba.conf.

Eğer RDS bir DB parametre grubu oluşturduğunuzda Dahası, bazı temel parametreler, örneğin gösterildiği ancak kilitli archive_command, kilitli olan /etc/rds/dbbin/pgscripts/rds_wal_archive %p. PostgreSQL için AWS RDS bu WAL'leri harici PITR için WAL sevkiyatı çoğaltması kullanmanız gerekeceğinden harici erişim için (örneğin, S3 aracılığıyla) göstermiyor gibi görünüyor.

Bu noktada, eğer wal-shipping istiyorsanız, RDS kullanmayın. Bu, kullanımı kolay bir veritabanıdır, ancak kullanımı kolay, genellikle sınırlı olduğu anlamına gelir ve burada da durum böyledir. Joe Love yorumlarda belirtildiği gibi, RDS içinde WAL nakliye ve PITR sağlar , ancak WDS'ye RDS dışından erişemezsiniz .

Bu nedenle, RDS'nin kendi yedekleme olanaklarını kullanmanız gerekir - dökümler, anlık görüntüler ve kendi WAL tabanlı PITR.


RDS, çoğaltma bağlantıları yapmanıza (çoğaltma için pg_basebackupveya çoğaltma için) izin vermiş ve arşivlenmiş WAL'a erişmenize izin verse bile , bu WAL'yi gerçekten kullanamayabilirsiniz. RDS yamalanmış bir PostgreSQL çalıştırır, ancak hiç kimse ne kadar çok yama uyguladığını veya disk üzerindeki formatı önemli ölçüde değiştirip değiştirmediğini bilmez. Ayrıca, muhtemelen x64 Linux olan ama kolayca belirlenemeyen Amazon tarafından seçilen mimaride de çalışır. PostgreSQL'in disk formatı ve çoğaltması mimariye bağımlı olduğundan, yalnızca Amazon RDS tarafından kullanılan mimariyle aynı ana bilgisayarlara ve yalnızca PostgreSQL derlemeniz onlarınkiyle uyumluysa çoğaltabilirsiniz.

Diğer şeylerin yanı sıra bu, RDS'den uzaklaşmanın kolay bir yolunun olmadığı anlamına gelir. Veritabanındaki tüm yazmaları, alacak pg_dump, geri yükleyecek ve yeni DB'yi çalıştıracak kadar uzun süre durdurmanız gerekir . DB ana bilgisayarına doğrudan erişiminiz olmadığı için çoğaltma ve yük devretme, rsync vb. İle olağan hileler çalışmaz.

RDS, işlenmemiş bir PostgreSQL çalıştırsa bile, Amazon pg_basebackup, güvenlik nedenleriyle RAL'a WAL akışı yapmanıza veya RDS'ye aktarmanıza izin vermek istemeyebilir . PostgreSQL, veri dizinini güvenilir içerik olarak görür ve dahili işlevselliği bağlayan veya zor bir şey yapan akıllı bir 'LANGUAGE c' işlevi hazırladıysanız, olması gerekenden daha fazla erişim elde etmek için sunucudan yararlanabilirsiniz. . Dolayısıyla Amazon yakında WAL'a izin vermeyecek.

Giden WAL göndermeyi destekleyebilirler, ancak biçim uyumluluğu, değişiklik yapma özgürlüğü vb. İle ilgili yukarıdaki sorunlar hala geçerlidir.


Bunun yerine Londiste veya Bucardo gibi bir araç kullanmalısınız.


RDS PITR'yi desteklemiyorsa, "Zaman içindeki bir noktaya geri yükle" yazan düğme ne işe yarar?
Joe Love

1
RDS, RDS içindeki PITR'yi destekler . WAL'ı RDS dışında gönderemezsiniz . Bunu daha net hale getirmek için düzenleyeceğim, çünkü RDS'nin hiç PITR desteği olmadığını söyleyerek nasıl okuyabileceğinizi görebiliyorum.
Craig Ringer


1

Londiste ve Bucardo gibi tetikleyici tabanlı sistemleri RDS içine ve dışına kullanarak çoğaltma, artık 10 Kasım 2014 itibariyle , bu forum iş parçacığındaki yanıt başına desteklenmektedir .

Duyuru burada


1
Bu kullanışlı - ama burada konuşmakla aynı şey değil. RDS ile Bucardo ve Londiste gibi tetik tabanlı mantıksal çoğaltma kullanımları için destek ekliyorlar. Bu mu değil "fiziksel" log bazlı sıcak bekleme tarafından kullanılan Akış için destek eklemek, pg_basebackupgüvenlik kaygıları gerçekten fiziksel replikasyonu destekleyen engel olarak, vb The've, onlar için en iyi seçim yaptı.
Craig Ringer

Aha, evet. Ve düzenleme için teşekkürler. Ben daha genel olarak çoğaltma seçenekleri istedi başka bir soru var - bu özellikle WAL dosyaları hakkında soruyor fark ettim.
michel-slm

Lütfen ilgili soruya da bir bağlantı ekleyin. Zaten faydalı olur.
Craig Ringer

İşte buradayım - cevabımı da orada paylaşacaksınız: stackoverflow.com/questions/20468230/…
michel-slm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.