Hier ist das Szenario:
Es gibt zwei Maschinen, auf denen CentOS 6.2 ausgeführt wird - Maschine0 und Maschine1
In beiden ist PostgreSQL 9.1 installiert.
Einer von ihnen sollte als Mastersystem aktiv sein und durch asynchrone Streaming-Replikation auf dem anderen Computer sollte der Standby-Modus Änderungen vom Mastersystem in die Datenbank kopieren.
Angenommen, Maschine0 ist der Master und Maschine1 ist der Standby am Anfang.
Wenn der Master (z. B. machine0) ausfällt (ein Fehler bedeutet hier, dass der Postgresql-Server abstürzt), sollte der Standby vom Master übernommen werden und der neue Master werden.
Bei Maschine1 übernimmt der neue Master alle Datenbankoperationen. Wenn der Postgresql-Server in Maschine0 wieder online ist, sollte er in den Standby-Modus versetzt werden. Beginnen Sie mit der Synchronisierung ab dem Punkt, an dem er den Kontakt zu Maschine1 verloren hat, und kopieren Sie alle Änderungen in die Datenbank. Bleiben Sie im Standby-Modus.
Wenn Maschine1 ausfällt, wiederholt sich der gesamte Zyklus.
Wenn der Standby-Modus fehlschlägt und wieder online ist, sollte er vom Master lesen und Daten synchronisieren.
Ich bin verwirrt darüber, welche Tools ich zum Einrichten verwenden muss, da ich verstehe, dass PostgreSQL standardmäßig nicht mit einem Failover geliefert wird.
Wenn mich jemand mit Threads / Seiten verknüpfen kann, die beschreiben, wie ich das mache, was ich versuche, bin ich wirklich dankbar.
quelle
Antworten:
Wenn Sie an synchroner DB-Replikation und Failover interessiert sind, habe ich einen Vorschlag. Sie können zwei Tools verwenden:
DRBD (Disk Replicated Block Device) bietet eine Replikation auf Festplattenebene (synchron) zwischen Festplatten auf zwei verschiedenen Servern. Die Festplattenänderungen werden über das Netzwerk repliziert. Es ist am besten, ein Crossover-Kabel an eth2 für die Netzwerkkarten mit dem Netzblock 192.168.xx zu verwenden.
ucarp ermöglicht die DBVIP-Verwaltung und das Failover zwischen zwei verschiedenen Servern.
Sie können sie in Verbindung wie folgt verwenden:
Richten Sie ucarp auf zwei verschiedenen Servern so ein, dass jede ucarp-Instanz über eine virtuelle Router-ID mit der anderen kommuniziert
DBServer1 wird haben
DBServer2 wird haben
Was ist der Grund, warum -b (Broadcasts) 3 auf einem Server und 4 auf dem anderen ist? Wenn beide Server neu gestartet werden, bringt der Server mit dem niedrigsten -b zuerst ucarp. Was -r betrifft, ist dies das Totverhältnis. Somit wird DBServer1 in 15 Sekunden (3X5) und DBServer2 in 20 Sekunden (4X5) gestartet.
Angenommen, DBServer1 stürzt ab. ucarp auf DBServer2 sucht 20 Sekunden lang nach einem Handshake von ucarp auf DBServer1. Wenn nichts erkannt wird, übernimmt das Skript vip-up.sh auf DBServer2 die Kontrolle über DBVIP.
OK, all dies ist nur für das Failover und die DBVIP-Verwaltung vorgesehen. Was ist mit der PostgreSQL-Datenbank? Überraschenderweise läuft PostgreSQL jeweils nur auf einem Server. Wer DBVIP hat, sollte DRBD im Primärzustand haben. Dies knüpft wieder an das Vip-Up-Skript an. Wie schreibt man es?
Hier ist das Skript /usr/local/sbin/vip-down.sh (konzeptionell)
Hier ist das Skript /usr/local/sbin/vip-down.sh (konzeptionell)
Sie müssen lediglich pg_hba.conf einrichten, um sicherzustellen, dass alle Benutzer über 10.1.2.70 kommen
Im Wesentlichen führt vip-up diese Sequenz durch
Im Gegensatz dazu führt vip-down diese Sequenz durch
Was ist mit vipmon.sh? Sie können ein Skript erstellen, um in einer unbestimmten Schleife den Status von postgres (es wird ausgeführt) zu überprüfen und das DRBD-Gerät zu überprüfen (können Sie trotzdem in den Ordner mit den Postdaten schreiben).
Mit diesem Setup haben Sie Postgres auf der DRBD-Primärdatenbank und eine Kopie des Postgres-Datenordners auf Festplattenebene auf dem anderen DBServer (der DRBD-Sekundärseite). postgres läuft nicht auf dem DRBD Secondary.
Wenn ein Failover auftritt, benötigen Sie nur Zeit, damit ucarp erkennt, dass es sicher ist, die Postgres-Daten bereitzustellen, Postgres zu starten und das Vipmon-Skript zu aktivieren.
Das Besondere an diesem Setup ist, dass der DBServer, der zu DRBD Primary wird, im Falle eines Failovers eine Kopie des Servers auf 100% Festplattenebene haben sollte, von dem aus Sie einen Fehler gemacht haben. Das Starten von Postgres sollte Sie daher auf einen konsistenten Zustand bringen. Die Transaktionsprotokolle (in pg_xlog) sollten aktuell sein (abzüglich der Unterbrechung aufgrund eines Failovers).
Ich hoffe diese Vorschläge helfen. Obwohl ich ein MySQL-DBA bin, verwende ich MySQL und DRBD regelmäßig beim Webhosting-Unternehmen meines Arbeitgebers. Ich habe MySQL / DRBD auf die oben beschriebene Weise installiert. Ich habe dies einmal für einen Client mit PostgreSQL / DRBD gemacht. Es funktioniert großartig. Es ist Open Source. Sie müssen nur die erforderliche Sorgfalt beim Erlernen von DRBD und ucarp anwenden. Dies würde das erneute Verbinden von DRBD nach einem Failover, das Behandeln eines Split-Brain-Szenarios, bei dem beide DB-Server primär werden, und ähnliche Dinge umfassen.
quelle