it-swarm.com.de

Automatisieren des Failovers in PostgreSQL 9.1

Wie richtet man zwei identische Server für das automatische Failover in PostgreSQL 9.1 ein?.

OS

Centos 5
PostgreSQL 9.1 aus der Quelle kompiliert
Das Postgres-Benutzerkonto ist auf beiden Computern vorhanden und verfügt über einen ssh-Passwortlosen Schlüssel, um eine Verbindung zu beiden Computern herzustellen.

Mein aktuelles Setup:

Master Server Konfiguration :

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 Host  replication   all   10.0.66.1/32      trust
 Host  replication   all   10.0.66.2/32      trust

Standby-Server

postgresql.conf und pg_hba.conf sind identisch mit den Konfigurationen auf dem Master-Server.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'Host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Dank hzRoot verstehe ich jetzt, wie man den Server vom Standby auf Master umschaltet.

Mit den folgenden Befehlen kann ich den neuen Slave mit dem neuen Master synchronisieren und dann die Replikationssicherung erhalten und ausführen.

Auf dem neuen Master (10.0.66.2)

  1. su - postgres
  2. berühren Sie trigger.txt in/opt/pgsql91/data /
  3. recovery.conf wird recovery.done
  4. psql -c "; SELECT pg_start_backup ('backup', true)";
  5. rsync -a -v -e ssh/opt/pgsql91/data/10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; SELECT pg_stop_backup ()";

Auf dem neuen Slave (10.0.66.1)

  1. erstellen Sie die Datei recovery.conf: cp recovery.done to recovery.conf
  2. vi recovery.conf IP-Adresse ändern: primary_conninfo = 'Host = 10.0.66.2'
  3. postgresql starten

Meine Fragen sind jetzt:

  1. Ist dies der richtige Weg, um die Rollen zu wechseln?
  2. Hat jemand diesen Prozess automatisiert, wenn ja, was haben Sie getan?
  3. Wenn die synchrone Replikation aktiviert ist, habe ich festgestellt, dass der neue Master-Server keine Transaktionen festschreibt, da er auf die Antwort des Slaves wartet. Es gibt jedoch keinen Slave, da der andere Server, der alte Master, ausgefallen ist. Ist dies korrekt oder muss ich die synchrone Replikation vorübergehend deaktivieren, während der neue Slave inaktiv ist?
18
Craig Efrein

Check out repmrg :

repmgr ist eine Reihe von Open Source-Tools, mit denen DBAs und Systemadministratoren einen Cluster von PostgreSQL-Datenbanken verwalten können.

Durch die Nutzung der in PostgreSQL 9 eingeführten Hot Standby-Funktion vereinfacht repmgr das Einrichten und Verwalten von Datenbanken mit hohen Verfügbarkeits- und Skalierbarkeitsanforderungen erheblich.

repmgr vereinfacht die Verwaltung und das tägliche Management, erhöht die Produktivität und senkt die Gesamtkosten eines PostgreSQL-Clusters durch:

  • überwachen des Replikationsprozesses; DBAs können hohe Ausgaben verursachen
  • verfügbarkeitsvorgänge wie Umschaltungen und Failover.

Es macht zwei Dinge:

  1. repmgr: Befehlsprogramm, das Aufgaben in Ihrem Cluster ausführt und dann beendet
  2. repmgrd: Verwaltungs- und Überwachungsdämon, der den Cluster überwacht und Remoteaktionen automatisieren kann.

Für das automatische Failover erledigt repmgrd den Trick und ist kein SPOF in Ihrem Netzwerk, wie pgPool. Es ist jedoch weiterhin wichtig, alle Deamons zu überwachen und nach einem Ausfall wieder hochzufahren.

Version 2.0 wird in Kürze veröffentlicht, einschließlich RPMs.

8
Frank Heikens

in Ihrer Datei recovery.conf sollten Sie eine Zeile hinzufügen, die postgres anweist, ein Failover vom Master zum Slave durchzuführen. Sie sollten hinzufügen

trigger_file = '/any/file/to/trigger'

wenn Sie diese Datei auf einem bestimmten Pfad erstellen. Knoten werden sich ändern. (Datei enthält nichts, es ist nur ein Auslöser)

weitere Informationen finden Sie unter Streaming-Replikation

auf der anderen Seite ist es möglicherweise möglich, es mit einigen Tricks automatisch zu erstellen, aber die Verwendung von Überwachungstools und das Erstellen eines Failover-Handbuchs sind besser.

4
sftsz

Hat jemand darüber nachgedacht, pgpool-II dafür zu verwenden?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

Ich richte die Replikation für PostgreSQL ein. Es scheint, dass der schwierige Teil passiert, wenn der alte Meister zurückkommt.

Nach dem, was ich gelesen habe, scheint pgpool das meiste davon automatisieren zu können. Ich bin mir jedoch nicht sicher, ob ich die bereits in PostgreSQL 9.1 vorhandenen Replikationsfunktionen nutzen kann.

0
Paulo SantAnna