PostgreSQL çoğaltma üretimi hazır mı?


16

PostgreSQL yerel çoğaltması MySQL ile nasıl karşılaştırılır?

Eşzamansız çoğaltma, yakın zamanda eşitleme daha uzun süredir desteklenmektedir biliyorum. Senkronize gerçek projelerde kullanmak güvenilir midir?

Yanıtlar:


31

Üretime hazır mısınız?

Evet, üretime hazır ve yaygın olarak kullanılıyor. Heroku takipçileri, örneğin AWS RDS standbys ve okuma kopyaları gibi PostgreSQL'in yerleşik asenkron çoğaltmasını temel alır. Akış çoğaltma PostgreSQL ile neredeyse evrensel olarak kullanılır.

Çoğaltma kurulumu tam olarak hoş değildir, ancak repmgr gibi araçlar buna biraz yardımcı olur ve her büyük sürümle yavaş yavaş gelişir. Pg_basebackup'ın akış çoğaltmasını kullanarak sistemin bir kopyasını alma (ve bunu başka bir bekleme modundan alma) yeteneği büyük bir yardımcıdır.

Genel olarak, bir özellik üretime hazır olana kadar PostgreSQL'de yayınlanmayacaktır. Hatalar, herhangi bir yazılımdaki gibi olur, ancak genellikle tanımlandıktan kısa bir süre sonra düzeltilir. Gerçekten büyük yeni özellikler bazen .0 sürümünden sonra keşfedilen hatalara ve sorunlara sahip olabilir, ancak öyleyse bunları düzeltmek yüksek bir önceliktir; böcek sadece etrafında kalmaz.

Akış çoğaltmasıyla ilgili herhangi bir ciddi sorunun farkında değilim - senkronizasyon veya asenkron - ne de bir süredir rapor aldım. Piyasaya sürüldükleri ana sürümlerin .0 sürümlerinde Pg'nin normal standardından daha az kararlıydılar, ancak her ikisi de hızla olgunlaştı ve üretime hazırdı.

(Güncelleme: 9.3.4 sürümünden önce yeni 9.3 sürümünde bazı durumlarda çoğaltma sorunlarına neden olan belirli bir hata vardı; 9.3 kullanıcıları hemen 9.3.4 sürümüne güncellenmelidir. Daha eski sürümler etkilenmez.)

Bahsetmek istediğim tek uyarı, eşzamanlı çoğaltma ile küçük bir ayrıntıdır: Master'ı taahhüt ederseniz, çoğaltmanın onaylanmasını beklerken sorguyu tamamladıktan sonra iptal edin, çoğaltılmadan önce master üzerinde taahhütlü olarak kabul edilir. Çoğaltmanın yanıt vermesini beklerken master'ı yeniden başlatarak da aynı etkiyi elde edersiniz. Pratikte bu bir ilgisizlik, ama düşünebildiğim tek sorunla ilgili.

MySQL ile karşılaştır?

Pg'nin yerel replikasyonu MySQL'lerden oldukça farklıdır.

MySQL, tablo verilerine, tablo yapısına vb. Yapılan mantıksal değişiklikleri gönderdiği mantıksal çoğaltmayı kullanır ve çoğaltma bu değişiklikleri uygular.

PostgreSQL'in replikasyonu daha düşük seviyededir (9.5 ve altı; gelecekteki versiyonlar da mantıksal replikasyon ekleyebilir). Tablolarda değişen blokları gönderir. Daha basit, doğru şekilde daha kolay ve çoğaltma sunucusuna daha düşük yük bindirir, ancak daha fazla ağ bant genişliği tüketir ve henüz çoğaltılmamış değişiklikleri tutmak için ana bilgisayarda daha fazla depolama alanı gerektirir. WAL arşivleme yedeklemesi ile akış çoğaltmasını kullanmak için en iyi yapılandırılmış olması, yapılandırmayı MySQL'lerden daha karmaşık hale getirir. Çoğaltmanın diskteki durumunu master'la aynı tutarak yalnızca değişiklikleri değil, VACUUM etkinliği gibi düşük düzeyli değişiklikleri çoğaltır. Yalnızca bir veritabanını çoğaltma yetkisi yoktur; tüm sistem çoğaltılmalıdır; büyük, yüksek karmaşalı ve önemsiz bir veritabanınız ve küçük, düşük karmaşalı ve hayati bir veritabanınız varsa sinir bozucu olabilir.

Sonuçta, onunla ne yapmak istediğinize bağlı.

PostgreSQL'in çoğaltmasını yedekleme, yüksek kullanılabilirlik ve olağanüstü durum kurtarma için kullanılan kopyalar için oldukça iyi görüyorum. Özellikle zaman geri kazanımı (PITR) ile birleştirildiğinde .

Öte yandan, salt okunur raporlama kopyaları için iyi değildir, çünkü uzun işlemler çalıştırırken çoğaltılmış verilerin uygulanmasını geciktirme ihtiyacı, çok uzun süre çalışan sorguları iptal etmesine izin vermeniz veya ana verilerin çok gerisinde kalmanız anlamına gelir. master üzerinde daha fazla disk alanı ve kalmasını sağlamak için daha fazla çalışmaya zorlar.

Tablo yapısında, tablo içeriklerinde vb. Mantıksal değişikliklerin disk üstü durumlarından ziyade çoğaltıldığı PostgreSQL'de mantıksal çoğaltmayı etkinleştirmek için devam eden çalışmalar vardır . Pg'nin katalog tasarımı ve kullanıcı tanımlı her şey için destek, bunu oldukça karmaşık bir görev haline getirir. Bazı temel çalışmalar 9.4 için uygulamaya konulmuştur, ancak tam mantıksal çoğaltmanın 9.6 veya daha önce kullanılmayacağı muhtemeldir.


Ben de bir soruya büyük cevap. Teşekkürler Craig.
swasheck

6
Senkronizasyon temsilcisi hakkında bazı kullanıcıları şaşırtan bir şey vardır, ancak bunu düşünürseniz gerçekten mantıklıdır: senkron çoğaltmaya tabi olan bir işlemin taahhüdü, işlem ana öğenin yanında en az bir kümede devam edene kadar geri dönmeyecektir . Başka bazı sistemlerden gelen insanlar , çoğaltma girişimi çok uzun sürmediği takdirde olması gerektiğini düşünür , bu da PostgreSQL topluluğunun kabul edilebilir bir garantisi olmadığı anlamına gelen "olmadıkça senkronize" anlamına gelir. Çoğaltma başarısız olursa duraklamayı önlemek için birden çok eşitleme hedefi kullanın veya zaman uyumsuz kullanın.
kgrittn

1
@kgrittn İyi hedef birden çok hedef. İşlem senkronize çoğaltma işleminde çoğaltılmadan önce herkesin geri dönmesini isteyeceğini / beklediğini hafifçe dehşete düşürüyorum ; gerçekten takipçileri yeterince yakalayana kadar master üzerine yazar duraklatma maksimum takipçisi boşluk sınırı ile zaman uyumsuz çoğaltma istiyor gibi görünüyor? İstediğiniz mükemmel makul bir şey, ancak temsilcisi senkronize değil.
Craig Ringer

1
@CraigRinger: İnsanların istediğini gördüğüm şey tam olarak belirttiğiniz şey değil, bazen "Senkronizasyon temsilcisini kullan, ancak senkronizasyon çok uzun sürüyorsa otomatik olarak zaman uyumsuz temsilcisine geri dönüyor." Bu yüzden , çoğaltmanın çok gerisinde kaldığında ustayı duraklatmak istemezler - bu , başka bir siteye yazmadan hızlı bir şekilde taahhütlerini onaylamasını istedikleri durumdur . Bana öyle geliyor ki, teslim edilenden daha fazlasını vaat eden bir dava gibi. Ön tarafta "Evet, senkronizasyon temsilciniz var; güvendesiniz" istiyorlar. ve bir çarpışmadan sonra "Taahhüt edilen veriler kayboldu; başka hiçbir yere yazılmadı."
kgrittn

@CraigRinger belki pg10 / logical ile güncelleyebilir mi?
Evan Carroll
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.