Postgres için çoklu ana kopya kullanılabilir mi?


16
  1. Postgres-XC'yi denedim ve henüz tam SQL uygulamıyor (SERIAL gibi)

  2. Postgres-R ilginç görünüyor ancak geliştiricilere göre "üretime hazır değil".

Bu yüzden pgpool-II 3.0.1 kullandım. Evet, güzel çalışıyor. Ama görebildiğim kadarıyla sadece 2 PG düğümü için.

Üretime hazır ve birden fazla PG düğümü ile çalışabilen herhangi bir şey var mı?


Birkaç yıl önce aynı sorunu yaşadık. Sonunda tüm eşyalarımızı Oracle'a taşıdık. Umarım bu günlerde kullanılabilir multimaster çoğaltma bulabilirsiniz, bakmadım ... İyi şanslar, hiçbiri daha az.
grufftech

2
PostgreSQL'in kendi dokümantasyonunda bir ara katman yazılımı uygulaması olduğu söyleniyor :) .. " Senkron Multimaster Çoğaltma .. PostgreSQL bu tür bir çoğaltma sunmaz, ancak PostgreSQL iki aşamalı kesinleştirme (HAZIR İŞLEM ve HAZIRLANMIŞ) bunu uygulamak için kullanılabilir uygulama kodu veya ara katman yazılımı "
warren

İki düğümle sınırlı değilsiniz.
foocorpluser

Yanıtlar:


6

Bucardo'yu düşündün mü ? Eşzamansız multimaster. Tamamen yakalanmadı ve genel bir çözüm değil, ama denemeye değer olabilir.


1
Görünüşe göre yeterince spesifik değildim: Eşzamanlı çoğaltmaya ihtiyacım var. Ayrıca, bunun SSS'de anlamı nedir? "Bucardo ikiden fazla usta arasında replike olabilir mi? Hayır. Şu anda, Bucardo sadece ustanın ustasını (elbette birçok kölede ustanın yanında) desteklemektedir." Peki çok usta mı yoksa değil mi?
mrkafk

4
Sadece "multi" tanımınız "2" ise!
hmallett

Bucardo 5'ten başlayarak sadece 2 usta sınırının kaldırıldığını lütfen unutmayın
Joril

3

Peter'ın değerlendirmesine katılmalıyım: Şu anda Postgres için çok iyi bir çok master çoğaltma yok. (Gerçek çok masterlı çoğaltma yapmak çok zor bir sorundur ve mevcut çözümlerin hiçbirine aşık değilim.)

Wikipedia'nın araştırmak isteyebileceğiniz potansiyel çözümler listesini beşikleme:

PostgreSQL, çok aşamalı çoğaltma için iki aşamalı işleme dayalı çözümler de dahil olmak üzere birden çok çözüm sunar. Bucardo, rubyrep, PgPool ve PgPool-II, PgCluster ve Sequoia ve bazı özel çözümler var. İstekli (eşzamanlı) replikasyon uygulamak için umut vaat eden bir başka yaklaşım Postgres-R'dir, ancak hala geliştirilme aşamasındadır. Eşzamanlı çoğaltma uygulayan bir başka proje ise Postgres-XC'dir. Postgres-XC hala geliştirilme aşamasındadır.


Vay be, sadece bu listeyi okumak benim için şok ve dehşete neden oluyor. :)
Peter Eisentraut

Benim için depresyon ve nefret :-)
voretaq7

Yapılandırma ve iletişim için etcd'ye benzer bir sistem kullanmanın, belki de iki fazlı taahhütte herhangi bir güncelleme ifadesinin çalıştırılmasının mümkün olacağını düşünürüm ... zor bir bölüm yakalanana ve diğer düğümlerle eşleşene kadar bir düğümü dışarıda tutacaktır. Bunun için
neredeyse otomajik bir

3

Bu yoğun Java yönelimlidir, ancak yerel veritabanı istemci API'leri JDBC veri kaynaklarına köprülenebilir. Tungsten Myosotis, JDBC köprülemesine özgü MySQL için bir örnektir.


  • Tungsten Enterpriese çok master asenkron için iyidir. MySQL, PostgreSQL ve Oracle için çalıştığını düşünüyorum. Tek başına çalışabilir veya bir Java uygulamasına gömülebilir. MySQL için çalıştığını gördüm, ancak PostgreSQL iddia ediyorlar. Replicator bileşenleri açık kaynaklıdır, ancak tam çözümün daha fazla parçası vardır ve lisanslama maliyetleri gerektirir. Continuent başlangıçta çok master senkron için Sequoia'ya sahipti, ancak onu terk ettiler ve çok master asenkron için Tungsten oluşturdular - senkron ACID tutarlılığından daha stratejik bir işi ölçeklendiriyorlar. Tungsten Java ile yazılmıştır, bu yüzden yerel veritabanı istemcilerini köprülemek için Myosotis sunarlar.

  • SymmetricDS, çok master asenkron için iyidir. Açık kaynak kodludur. Depo gözü günlüğü yerine güncellemeleri yakalamak için tetikleyicileri yükler / kaldırır. Tek başına çalışabilir veya bir Java uygulamasına gömülebilir.

  • HA-JDBC, çoklu ana senkron için iyidir. C-JDBC ve Sequoia gibi eski geçersiz yazılımların üstesinden gelir. Açık kaynak kodludur. İki aşamalı kesinleştirme kullanır ve PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase ve diğerleri için lehçelerle çalışır. Genellikle gömülüdür, bu nedenle PostgreSQL'e köprülemek için bir Java uygulamasına gömülür. Dağıtılmış kilitler, diziler, zaman, rand vb. Redhat / JBoss'tan jGroups tarafından işlenir. Güzel bir özellik, uygulamanız kilitlenme yaşadıysa ve geri alma işlemini desteklemiyorsa, "paralel" yerine "seri" işlem modudur. DB-küme farkında olmayan eski bir uygulamayı güçlendirmek için bu "seri" modu başarıyla kullandım, bu yüzden işlem yeniden deneme kodu eksikti. Seri mod günü kurtardı ve kötü bir tekrardan kaçındı.

  • H2, çoklu ana senkron için iyidir. Açık kaynak kodludur. HA-JDBC mimarisine benzer şekilde iki fazlı kesinleştirme kullanan bağımsız veritabanlarını veya kümeleri destekler, ancak iki fazlı kesinleştirme için fazladan bir bileşen gerektirmek yerine hepsi bir aradadır. Dağıtılmış olup olmadığını veya jGroups veya Hazelcast gibi üçüncü taraflara bağlı olup olmadığından emin değilim.

PostgreSQL ve diğer veritabanları için herhangi bir JDBC tabanlı çoğaltmanın, uygulamanız zaten Java'da yazılmış olmadıkça, JDBC köprüsünde yerel olması gerekir. MySQL için Tungsten Enterprise, Myosotis adlı isteğe bağlı bir bileşen sunar. Başarıyla bu JDBC veri kaynağı 4 düğümlü bir MySQL / InnoDB kümesine işaret eden bir HA-JDBC proxy veri kaynağı oldu JDBC PHP / Perl / C / mysqlclient köprü için kullanılır.

Tungsten, Repgretor ve Router bileşenlerinde PostgreSQL'i destekler, ancak Myosotis bileşeninden emin değildir. Olabilir. Tungsten Replicator / Router bileşenleri çok master asenkron içindir, ancak Myosotis sizi senkron için HA-JDBC veya H2 gibi alternatif bir JDBC arka ucuna köprüleyebilir.

JDBC köprüsüne özgü bir PostgreSQL varsa, bunu duymak isterim. Teorik olarak, JDBC Tip 4 sürücüsü olan herhangi bir veritabanı köprülenebilir. Type 4 JDBC, aynı veritabanı için yerel istemci arabirimi gibi yerel veritabanı protokolünü konuşur, bu nedenle yerel çağrıların JDBC çağrılarıyla bire bir eşleştirilmesi gerekir.


2

Bunun cevabı kocaman bir hayır.


araştırma yaptığımdan bu yana birkaç yıl geçti, ama denediğimizde şirketim bu sonuca vardı.
grufftech

1

Ben son 2 yıldır postgresql çoklu master çoğaltma için londiste kullanıyorum.

Tablolarınızı pg_queue kullanarak sıraya koyarsınız ve her sıraya istediğiniz kadar çok veritabanına abone olabilirsiniz, çoğaltma sıraya göre atomiktir ve çok dirençlidir.

Londiste hakkında burada okuyabilirsiniz ( http://pgfoundry.org/projects/skytools/ ), Skype adamlarının kümeleri için kullandıkları budur, ayrıca yarattılar, bu yüzden iki kat daha serin :)


Hmm bu ilginç, ama burada gördüklerime göre: wiki.postgresql.org/wiki/… , Londiste Master-Slave ve Asynchronous mu? Peki bu nasıl çok usta olabilir? Ayrıca, gerçekten eşzamanlı çoğaltma gerekir: (etkin) küme düğümlerinden herhangi biri başarısız olursa işlem başarısız olmalıdır.
24ka11

Bu çoğaltma işlem
sonrasıdır,

Ben eşek acı gibi gelmek istemiyorum (nitpicking), ama ... 1. pgpool-II kullandım ve işlemleri (hızlı bir şekilde ölçüt yapmadım rağmen) oldukça hızlı geçti ve 2. rağmen Bireysel işlem daha yavaş olabilir, işlemlerin toplam iş hacminin düşük olması için iyi bir neden göremiyorum. Her neyse, belki de daha önemli olan nokta Londiste multi-master'ın nasıl olduğudur? Pg sunucu 1'e yazabilir ve 2'ye çoğaltabilir ve pg sunucu 2'ye yazıp sunucu 1'e çoğaltabilir miyim?
24ka11


-2

Kullanılabilir "çok master" çoğaltma sistemi buldum:

  1. RabbitMQ http://www.rabbitmq.com/ olsun - bu bir mesaj ara katman yazılımıdır.

  2. Tavşan'da bir Tavşan MQ kümesi yapılandırın.

  3. bir kümedeki her düğüm için kuyruk oluşturun ve bunları 'fanout' tür değişimine bağlayın.

Bu şekilde, herhangi bir düğüme ve herhangi bir kuyruğa gönderilen bir mesaj diğer tüm düğümlere çoğaltılır. Bunun için bir çalışma kodum var!


2
@mrafk - sahip olduğunuz "çalışma kodunu" gönderip bağlar mısınız?
warren

2
Bunun postgres ile çoğaltma ile ne ilgisi var? Bu, mesajları dağıtır, ancak veri iletilerini / güncelleştirmelerini DB'den nereden alıyorsunuz ve ileti kuyruğundaki iletileri alan düğümleri nasıl güncelleştiriyor?
monksy

3
Bu, karşılaştığınız temel soruna bir çözüm olabilir, ancak bu sorunun cevabı değildir .
Tom Anderson
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.