EC2 - PostgreSQL verilerini nasıl doğru şekilde yedekleyebilirim?


9

Kurulum şöyledir: 3 ek birime sahip 1 küçük Amazon Linux (EBS destekli) EC2 örneği. Bu hem bir web sunucusu hem de veritabanı sunucusudur. Kod için bir birim, PostgreSQL (8.4) veri dizini için bir birim ve PostgreSQL'den WAL dosyalarını saklamak için bir birim.

(1) WAL dosyalarına sahip birimde, pg_start_backup () işlemi yapıldıktan sonra kopyalanan veri dizininin temel bir yedeği de bulunur. Ardından PostgreSQL'den (WAL dosyaları) gelen sürekli arşiv çıktısını depolar. Bu birimin anlık görüntüsünü almak için, bir senkronizasyon yayınlamanın ve dosya sistemini dondurmanın herhangi bir anlamı var mı (XFS ise xfs_freeze veya EXT4 ise dmsetup kullanarak)? Yoksa canlı bir fotoğraf çekebilir miyim? WAL dosyaları dakikada bir oranında gönderilir. Tek bir WAL dosyası kopyalanırken ve bozuk verilere neden olurken anlık görüntü başlatılabilir mi?

(2) Canlı PostgreSQL veri dizinini içeren birim de iyi bir ölçüm için yedeklenecektir (günlük). Bu birimin anlık görüntüsünü yapmadan önce bir pg_dump yayınladım ve sonuçta ortaya çıkan SQL dosyası veri dizininde tutuldu. Gerçek veritabanı verilerinin tutarlı olmasını sağlamak için önlem almanın bir anlamı var mı? Canlı bir anlık görüntü almanın (a) yapılandırma dosyalarını (postgresql.conf, pg_hba.conf, pg_ident.conf) ve (b) SQL döküm dosyasını yedekleyeceğini varsaymak doğru olur mu? Bu iki şeyi yedeklemek, sql döküm dosyası ve yapılandırma dosyaları, bu birimin anlık görüntüsünün ana noktası olacaktır. DB çok büyük değil, bu yüzden veri dosyaları bu anlık görüntü şişirecek sakıncası yok. Ve bu durumda, canlı bir anlık görüntü yapabilirim - doğru mu?

(2a) Veri dizinini kök biriminde tutmak ve sql dökümü dosyasını ve yapılandırma dosyalarını başka bir birime kopyalayan bir yedek komut dosyasına sahip olmak ve kopya tamamlandıktan sonra bu birimin anlık görüntüsünü almak daha iyi olur mu?

(3) Üzerinde kod bulunan birime gelince, yine dosya sistemini senkronize etmenin ve dondurmanın bir anlamı var mı? Yoksa sadece canlı bir fotoğraf çekilebilir mi? Bu veriler oldukça "statik" olmalıdır.

(4) Bu sağlam bir yedekleme şeması mı? Bir makine görüntüsünü kurulduktan ve yapılandırıldıktan sonra tutacağımdan, kök birimi düzenli olarak yedeklenmez.

Teşekkürler

Yanıtlar:


13

İnce el kitabına bakın . Tavsiyem onunla herhangi bir şekilde çelişiyorsa, doğru.

  1. Kopyalama aracınız fsync () 'in yazdığı her WAL dosyasını ve bir sonrakini kopyalamadan önce içinde bulunduğu dizini içermediği sürece senkronizasyon kötü bir fikir değildir. Tamamlanmamış bir son WAL dosyasının önemi yoktur; en kötüsü, sadece silmek. Hiçbir checksumming yapılır orada olsa bu kadar, - Pg genellikle tamamlanmamış bir WAL boğulmayı olabilirgerçekten şanssız olun ve gerçek WAL kayıtları gibi görünmek için gerçek bir şans şansı olan çöp verilerini uygulamaya çalışmasını sağlayın. Konumunuzda, RAM'deki yazılmamış kirli arabelleklerin diskteki dosya sistemi görüntüsüne çarptığından emin olmak için bir anlık görüntüden önce birimi senkronize edeceğim. Donma, dağınık ancak ölümcül olmayan kısmen yazılmış WAL'lerden kaçınmaya yardımcı olacaktır, bu yüzden korkunç bir fikir değil, hayati değildir. Hayati olan, iyileşme noktasına kadar hasarsız bir zaman çizelgesine sahip olmaktır. Şahsen, WAL'larımı geçici bir dosya adına yazıyorum ve tamamen kopyalandıktan sonra son isimlerine yeniden adlandırıyorum; bunu yaparsanız, dondurmanıza gerek yoktur.

  2. Kulağa doğru geliyor. Canlı bir anlık görüntü, yazma önbelleği ile canlı bir sistemde bir fiş çekme testi yapmak gibidir. Veritabanınız, canlı bir anlık görüntüden geri yüklendiğinde, fiş çekme işleminden sonra olduğu gibi iyi bir şekilde kurtarılmalıdır. Anlık görüntülerden geri yükleme testlerini otomatikleştirmenizi tavsiye ederim. (Not: Bir test yeniden bir resim olduğu değil mümkün disk, baskın kontrol vb yazma önbelleğe alma için hesap, çünkü fiş çekme testi için tam bir yerine). Sadece yapılandırma dosyaları ve dökümü değil, veritabanının anlık görüntünüzden sonra iyi olması gerekir. Tüm döküm verilerinin vb. Gerçekten diske çarptığından emin olmak için ses düzeyini anlık görüntüden önce senkronize etmeyi düşünün.

    2a. Biraz disk alanı kazanabilir. Aksi takdirde küçük fark. Anlık görüntüleri, üzerlerinde canlı veritabanının tüm karmaşası olmadan çok daha uzun tutabilirsiniz.

  3. Neden kod hacminizi anlık olarak görüntüleyesiniz? Düz bir dosya düzeyinde kopya iyi olabilir. Kesinlikle canlı bir anlık görüntü olmalıdır.

  4. Bu sağlam bir yedekleme şeması değildir. Kritik bir alanda başarısız olur: Geri yükleme testi ve doğrulama yapılmaz. Gerçekten geri yükleyebildiğinizden emin olmak için yedeklerinizi her zaman düzenli olarak test etmelisiniz .

    Şahsen, WAL sevkıyatını kullanmanızı veya veritabanı dökümlerini , tercihen Amazon EC2'de olmayan veya en azından farklı bir bölgede olmayan bir ana bilgisayara göndermenizi öneririm . Bu ana makine otomatik geri yükleme testleri yapmalı, sonuçları size rapor olarak göndermeli ve manuel olarak da kontrol edilmelidir.

    Anlık görüntüleriniz (dökümleri içeren) S3'te olacak ve orada güvenli olacak olsa da, bu onlara acilen ihtiyacınız olduğunda erişilebilecekleri anlamına gelmez. Amazon'un dayanıklılık iddiaları güven vericidir, ancak S3 hizmetinin kötü zamanlanmış kesintisi sırasında verileriniz yine de sizin için güvenli ve tamamen erişilemez olabilir.


2
+1, özellikle Amazon EC2'de olmayan başka bir makineye veri yedeklemek için. Mümkün olduğu kadar tek hata noktasını ortadan kaldırın.
Mike Sherrill 'Cat Recall'

1
Yararlı bilgi, teşekkürler. Elimde olmayan tek şey neden "tüm yedeklenen veriler hala aynı makinede" diyorsunuz. EBS anlık görüntüleri% 99.999999999 dayanıklılık iddia eden S3'te saklanır (10.000 nesneyi saklayın ve 10 milyon yılda bir hata bekliyoruz). Anladığım kadarıyla, aynı bölgedeki birden fazla veri merkezine kopyalandığı; manuel olarak diğer bölgelere de kopyalayabilirsiniz. Tabii ki sağlayıcı bağımsızlığını korumak için AWS dışında bir kopya almakta yanlış bir şey yok.
Mark Berry

2
@MarkBerry Çok haklısın - Sanırım bunu yazarken açıklamanın bir kısmını yanlış anladım. Cevabı değiştireceğim.
Craig Ringer

Yeni bir soru olarak göndermeye karar verdiğim oldukça ayrıntılı bir takip sorum vardı: dba.stackexchange.com/q/68461/41155 .
Mark Berry
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.