Ich habe Postgres-XC ausprobiert und es implementiert noch kein vollständiges SQL (wie SERIAL)
Postgres-R sieht interessant aus, ist aber laut Entwicklern "nicht produktionsbereit".
Also habe ich pgpool-II 3.0.1 benutzt. Ja, es funktioniert gut. Aber soweit ich das sehe, ist es nur für 2 PG-Knoten.
Gibt es irgendetwas, das tatsächlich produktionsbereit und in der Lage ist, mit mehreren PG-Knoten zu arbeiten?
replication
postgresql
mrkafk
quelle
quelle
Antworten:
Haben Sie über Bucardo nachgedacht ? Es ist asynchroner Multimaster. Es hat sich nicht ganz durchgesetzt und ist keine generelle Lösung, aber es könnte einen Versuch wert sein.
quelle
Ich muss Peters Einschätzung zustimmen: Derzeit gibt es keine wirklich gute Multi-Master-Replikation für Postgres. (Eine echte Multi-Master-Replikation durchzuführen ist ein sehr schwieriges Problem, und ich bin mit keiner der verfügbaren Lösungen verliebt.)
Cribbing Wikipedia Liste der möglichen Lösungen, die Sie untersuchen möchten:
quelle
Dies ist stark Java-orientiert, aber native Datenbank-Client-APIs können mit JDBC-Datenquellen überbrückt werden. Tungsten Myosotis ist ein Beispiel für das native JDBC-Bridging von MySQL.
Wolfram Enterpriese ist gut für asynchrone Multi-Master. Ich denke, es funktioniert für MySQL, PostgreSQL und Oracle. Es kann eigenständig oder eingebettet in eine Java-Anwendung ausgeführt werden. Ich habe gesehen, dass es für MySQL funktioniert, aber sie behaupten, PostgreSQL. Ihre Replikator-Komponente ist Open Source, aber die vollständige Lösung umfasst mehr Teile und erfordert Lizenzkosten. Ursprünglich hatte Continuent Sequoia für Multi-Master-Synchronous, aber sie haben es aufgegeben und stattdessen Tungsten für Multi-Master-Asynchronous erstellt. Wolfram ist in Java geschrieben, daher bieten sie Myosotis zur Überbrückung nativer Datenbankclients an.
SymmetricDS eignet sich für asynchrone Multi-Master-Anwendungen. Es ist Open Source. Es installiert / deinstalliert Trigger, um Aktualisierungen zu erfassen, anstatt die Bin-Protokollierung durchzuführen. Es kann eigenständig oder eingebettet in eine Java-Anwendung ausgeführt werden.
HA-JDBC eignet sich für Multi-Master-Synchron. Es ersetzt ältere nicht mehr verfügbare Software wie C-JDBC und Sequoia. Es ist Open Source. Es verwendet ein zweiphasiges Festschreiben und funktioniert für PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase und viele andere über Dialekte. Es ist hauptsächlich für eingebettete Anwendungen gedacht, die in eine Java-Anwendung eingebettet sind, um diese mit PostgreSQL zu verbinden. Verteilte Sperren, Sequenzen, Zeit, Rand usw. werden von jGroups von Redhat / JBoss verwaltet. Eine nette Funktion ist der Transaktionsmodus "Seriell" anstelle von "Parallel", wenn Ihre App Deadlocks aufweist und kein Rollback unterstützt. Ich habe diesen "seriellen" Modus erfolgreich verwendet, um eine Legacy-App nachzurüsten, die nicht DB-Cluster-fähig war. Daher fehlte der Code für den Transaktionswiederholungsversuch. Der serielle Modus hat den Tag gerettet und ein böses Umschreiben vermieden.
H2 ist gut für Multi-Master-Synchron. Es ist Open Source. Es unterstützt eigenständige Datenbanken oder Cluster mit zweiphasigem Festschreiben, ähnlich der HA-JDBC-Architektur, erfordert jedoch keine zusätzliche Komponente für zweiphasiges Festschreiben. Nicht sicher, ob es selbst verteilte Sperren gibt oder von Drittanbietern wie jGroups oder Hazelcast abhängt.
Jede JDBC-basierte Replikation für PostgreSQL und andere Datenbanken benötigt eine native JDBC-Bridge, es sei denn, Ihre Anwendung ist bereits in Java geschrieben. Für MySQL bietet Tungsten Enterprise eine optionale Komponente namens Myosotis an. Ich habe dies erfolgreich verwendet, um PHP / Perl / C / mysqlclient mit JDBC zu verbinden, wobei es sich bei der JDBC-Datenquelle zufällig um eine HA-JDBC-Proxy-Datenquelle handelt, die auf einen MySQL / InnoDB-Cluster mit 4 Knoten verweist.
Tungsten unterstützt PostgreSQL in seinen Replikator- und Routerkomponenten, ist sich jedoch in Bezug auf die Myosotis-Komponente nicht sicher. Könnte sein. Wolfram-Replikator- / Router-Komponenten sind für asynchrone Multi-Master-Verbindungen vorgesehen. Myosotis kann Sie jedoch mit einem alternativen JDBC-Backend wie HA-JDBC oder H2 für synchrone Verbindungen verbinden.
Wenn es eine PostgreSQL-native JDBC-Bridge gibt, würde ich gerne davon erfahren. Theoretisch kann jede Datenbank mit einem JDBC-Treiber vom Typ 4 überbrückt werden. JDBC vom Typ 4 spricht das native Datenbankprotokoll genau wie die native Client-Schnittstelle für diese Datenbank. Daher sollte eine Eins-zu-Eins-Zuordnung von nativen Aufrufen zu JDBC-Aufrufen erfolgen.
quelle
Die Antwort darauf ist ein klares Nein.
quelle
Ich benutze seit 2 Jahren londiste für die Multi-Master-Replikation in postgresql.
Sie stellen Ihre Tabellen mit pg_queue in Warteschlangen und können so viele andere Datenbanken abonnieren, wie Sie möchten. Die Replikation erfolgt atomar nach Warteschlangen und ist sehr widerstandsfähig.
Sie können hier ( http://pgfoundry.org/projects/skytools/ ) über londiste lesen. Dies ist das, was die Skype-Leute für ihren Cluster verwenden. Sie haben es auch erstellt, es ist also doppelt so cool :)
quelle
Wenn Sie immer noch interessiert sind, versuchen Sie Folgendes: http://www.symmetricds.org/ (nur Java)
quelle
Ich habe ein brauchbares "Multi-Master" -Replikationssystem gefunden:
Holen Sie sich RabbitMQ Sie http://www.rabbitmq.com/ - es ist eine Message Middleware.
Konfigurieren Sie einen Rabbit MQ-Cluster in Rabbit.
Erstellen Sie eine Warteschlange für jeden Knoten in einem Cluster und binden Sie sie an den Austausch vom Typ "Fanout".
Auf diese Weise wird eine an einen beliebigen Knoten und eine beliebige Warteschlange gesendete Nachricht an alle anderen Knoten repliziert. Ich habe einen Arbeitscode dafür!
quelle