Wielozadaniowa replikacja USABLE dla Postgres?


16
  1. Próbowałem Postgres-XC i jeszcze nie implementuje pełnego SQL (jak SERIAL)

  2. Postgres-R wygląda interesująco, ale według twórców „nie jest gotowy do produkcji”.

Więc użyłem pgpool-II 3.0.1. Tak, działa ładnie. Ale o ile widzę, dotyczy to tylko 2 węzłów PG.

Czy jest coś, co jest rzeczywiście gotowe do produkcji ORAZ zdolne do pracy z wieloma węzłami PG?


Kilka lat temu znaleźliśmy się z tym samym problemem. Ostatecznie przenieśliśmy wszystkie nasze rzeczy do Oracle. Mam nadzieję, że w dzisiejszych czasach można znaleźć użyteczną replikację z wieloma wzorcami, ale nie szukałem ... Powodzenia.
grufftech,

2
Własna dokumentacja PostgreSQL mówi o używaniu aplikacji pośredniej :) .. „ Synchroniczna replikacja Multimastera .. PostgreSQL nie oferuje tego rodzaju replikacji, chociaż dwufazowe zatwierdzenie PostgreSQL (PREPARE TRANSACTION i COMMIT PREPARED) może być użyte do zaimplementowania tego w kod aplikacji lub oprogramowanie pośrednie ”
warren,

Nie jesteś ograniczony do dwóch węzłów.
foocorpluser

Odpowiedzi:


6

Czy rozważałeś Bucardo ? To asynchroniczny multimaster. Nie do końca się przyjął i nie jest ogólnym rozwiązaniem, ale warto spróbować.


1
Najwyraźniej nie byłem dość szczegółowy: potrzebuję synchronicznej replikacji. Poza tym, co to oznacza w FAQ? „Czy Bucardo może powielać więcej niż dwóch panów? Nie. Obecnie Bucardo obsługuje tylko jednego mistrza (jak również wielu masterów niewolników)”. Czy to jest multi-master, czy nie?
mrkafk

4
Tylko jeśli twoja definicja „wielu” to „2”!
hmallett 13.01.11

Należy pamiętać, że począwszy od Bucardo 5 zniesiono ograniczenie tylko 2 mistrzów
Joril

3

Muszę się zgodzić z oceną Petera: W tej chwili nie ma naprawdę dobrej replikacji wielu wzorców dla Postgres. (Wykonywanie prawdziwej replikacji wieloskładnikowej jest bardzo trudnym problemem i nie jestem zakochany w żadnym z dostępnych rozwiązań.)

Cribbing listę Wikipedii potencjalnych rozwiązań, które możesz chcieć zbadać:

PostgreSQL oferuje wiele rozwiązań do replikacji z wieloma wzorcami, w tym rozwiązania oparte na zatwierdzaniu dwufazowym. Istnieją Bucardo, Rubyrep, PgPool i PgPool-II, PgCluster i Sequoia, a także kilka zastrzeżonych rozwiązań. Innym obiecującym podejściem, wdrażającym chętną (synchroniczną) replikację, jest Postgres-R, jednak wciąż jest ona w fazie rozwoju. Jeszcze innym projektem implementującym synchroniczną replikację jest Postgres-XC. Postgres-XC również jest wciąż w fazie rozwoju.


Wow, samo czytanie tej listy wywołuje u mnie szok i przerażenie. :)
Peter Eisentraut,

Dla mnie to depresja i wstręt :-)
voretaq7

Pomyślałbym, że użycie systemu podobnego do etcd do konfiguracji i komunikacji byłoby możliwe, być może uruchomienie dowolnej instrukcji aktualizacji w ramach zatwierdzania dwufazowego ... trudną częścią byłoby utrzymanie węzła na zewnątrz, dopóki nie zostanie złapany i dopasowany do innych węzłów. Naprawdę podoba mi się prawie automatyczne rozwiązanie tego
problemu

3

Jest to silnie zorientowane na Javę, ale natywne interfejsy API klienta bazy danych można łączyć ze źródłami danych JDBC. Tungsten Myosotis jest przykładem MySQL pochodzącym z mostkowania JDBC.


  • Wolfram Enterpriese jest dobry dla asynchronicznego multi-master. Myślę, że to działa na MySQL, PostgreSQL i Oracle. Może działać jako samodzielny lub osadzony w aplikacji Java. Widziałem, jak działa dla MySQL, ale twierdzą, że PostgreSQL. Ich komponent Replicator jest oprogramowaniem typu open source, ale pełne rozwiązanie ma więcej części i wymaga kosztów licencji. Firma Continuent pierwotnie miała sekwencję synchroniczną dla wielu masterów, ale porzuciła ją i zamiast tego stworzyła Tungsten dla asynchronicznej multi-master - uważają skalowanie za bardziej strategiczne przedsiębiorstwo niż synchroniczna spójność ACID. Tungsten jest napisany w Javie, dlatego oferują Myosotis do łączenia natywnych klientów baz danych.

  • SymmetricDS jest dobry dla asynchronicznego z wieloma masterami. Jest to oprogramowanie typu open source. Instaluje / odinstalowuje wyzwalacze do przechwytywania aktualizacji, zamiast rejestrowania bin. Może działać jako samodzielny lub osadzony w aplikacji Java.

  • HA-JDBC jest dobry dla synchronizacji z wieloma masterami. Zastępuje starsze niedziałające oprogramowanie, takie jak C-JDBC i Sequoia. Jest to oprogramowanie typu open source. Wykorzystuje zatwierdzanie dwufazowe i działa w PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase i wielu innych za pośrednictwem dialektów. Jest przeznaczony głównie do osadzania, więc osadzony w aplikacji Java w celu połączenia go z PostgreSQL. Rozproszone blokady, sekwencje, czas, rand itd. Są obsługiwane przez jGroups z Redhat / JBoss. Jedną z fajnych funkcji jest tryb szeregowy zamiast transakcji równoległej, jeśli aplikacja napotkała zakleszczenia i nie obsługuje wycofywania. Z powodzeniem użyłem tego trybu „szeregowego”, aby ponownie zainstalować starszą aplikację, która nie obsługiwała klastra DB, więc brakowało kodu ponownej próby transakcji. Tryb szeregowy uratował dzień i uniknął nieprzyjemnego przepisywania.

  • H2 jest dobry dla synchronizacji z wieloma masterami. Jest to oprogramowanie typu open source. Obsługuje autonomiczne bazy danych lub klastry korzystające z zatwierdzania dwufazowego, podobnego do architektury HA-JDBC, ale wszystko jest w jednym, zamiast wymagać dodatkowego komponentu do zatwierdzania dwufazowego. Nie jestem pewien, czy sam dystrybuuje blokady, czy zależy od innych firm, takich jak jGroups lub Hazelcast.

Każda replikacja oparta na JDBC dla PostgreSQL i innych baz danych wymaga macierzystego mostu JDBC, chyba że aplikacja jest już napisana w Javie. W przypadku MySQL Tungsten Enterprise oferuje opcjonalny komponent o nazwie Myosotis. Z powodzeniem wykorzystałem to do połączenia PHP / Perl / C / mysqlclient z JDBC, gdzie źródłem danych JDBC było źródło danych proxy HA-JDBC wskazujące na 4-węzłowy klaster MySQL / InnoDB.

Tungsten obsługuje PostgreSQL w komponentach Replicator i Router, ale nie ma pewności co do komponentu Myosotis. Może. Komponenty replikatora / routera wolframu są przeznaczone do pracy asynchronicznej z wieloma masterami, ale Myosotis może połączyć cię z alternatywnym back-endem JDBC, takim jak HA-JDBC lub H2.

Jeśli istnieje mostek PostgreSQL natywny dla mostu JDBC, chciałbym o nim usłyszeć. Teoretycznie można łączyć dowolną bazę danych ze sterownikiem JDBC typu 4. JDBC typu 4 mówi natywny protokół bazy danych, podobnie jak natywny interfejs klienta dla tej bazy danych, dlatego powinno istnieć odwzorowanie natywnych wywołań typu jeden do jednego na wywołania JDBC.



1

Używam londiste przez ostatnie 2 lata do replikacji wielostanowiskowej w postgresql.

Umieszczasz tabele w kolejkach za pomocą pg_queue i możesz subskrybować tyle baz danych, ile chcesz w każdej kolejce, replikacja jest atomowa według kolejki i bardzo elastyczna.

Możesz przeczytać o londiste tutaj ( http://pgfoundry.org/projects/skytools/ ), to jest to, czego używają Skype dla swojego klastra, również go stworzyli, więc jest podwójnie fajnie :)


Hmm, to interesujące, ale zgodnie z tym, co tu widziałem: wiki.postgresql.org/wiki/… , Londiste jest Master-Slave i asynchroniczny? Jak więc może być multi-master? Ponadto naprawdę potrzebuję replikacji synchronicznej: transakcja powinna zakończyć się niepowodzeniem, jeśli jeden z (aktywnych) węzłów klastra ulegnie awarii.
mrkafk

Ta replikacja jest przeprowadzana po transakcji, w przeciwnym razie byłaby dość wolna
lynxman

Nie chcę brzmieć jak ból w dupie (nitpicking), ale ... 1. Użyłem pgpool-II i transakcje przebiegły dość szybko (chociaż nie zrobiłem testów porównawczych) i 2. mimo że pojedyncza transakcja może być wolniejsza, nie widzę dobrego powodu, aby ogólna przepustowość transakcji była niska. W każdym razie, być może ważniejsze jest to, jak Londiste jest multi-master? Czy mogę pisać na serwerze PG 1 i powielić go na 2, a także napisać na serwerze PG 2 i powielić na serwerze 1?
mrkafk 24.01.11


-2

Znalazłem użyteczny system replikacji „multi-master”:

  1. zdobądź RabbitMQ http://www.rabbitmq.com/ - to oprogramowanie pośredniczące w wiadomościach.

  2. skonfiguruj klaster Rabbit MQ w Rabbit.

  3. utwórz kolejkę dla każdego węzła w klastrze i powiąż je z wymianą typu „fanout”.

W ten sposób wiadomość wysyłana do dowolnego węzła i dowolnej kolejki jest replikowana do wszystkich innych węzłów. Mam do tego działający kod!


2
@mrafk - czy opublikowałbyś / link posiadany „działający kod”?
warren

2
Co to ma wspólnego z replikacją postgres? Spowoduje to dystrybucję wiadomości, ale skąd bierzesz wiadomości / aktualizacje danych z bazy danych i jak aktualizuje węzły odbierające wiadomości w kolejce komunikatów?
mnich

3
Może to być rozwiązanie podstawowego problemu pan stoi, ale to nie jest odpowiedź na to pytanie.
Tom Anderson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.