Wie richtet man zwei identische Server für das automatische Failover in PostgreSQL 9.1 ein?
OS
Centos 5
PostgreSQL 9.1 aus dem Quellcode kompiliert
Das Benutzerkonto postgres ist auf beiden Computern vorhanden und verfügt über einen SSH-Schlüssel ohne Kennwort, 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 der Konfiguration 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 ich den Server von Standby auf Master umstellen kann.
Mit den folgenden Befehlen kann ich den neuen Slave mit dem neuen Master synchronisieren und dann die Replikationssicherung ausführen.
Auf dem neuen Master (10.0.66.2)
- su - postgres
- Berühren Sie trigger.txt in / opt / pgsql91 / data /.
- recovery.conf wird zu recovery.done
- psql -c "; SELECT pg_start_backup ('backup', true)";
- rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
- psql -c "; SELECT pg_stop_backup ()";
Auf den neuen Sklaven (10.0.66.1)
- Erstellen Sie die recovery.conf: cp recovery.done to recovery.conf
- vi recovery.conf IP-Adresse ändern: primary_conninfo = 'host = 10.0.66.2'
- starte postgresql
Also meine Fragen sind jetzt:
- Ist dies der richtige Weg, um die Rollen zu wechseln?
- Hat jemand diesen Prozess automatisiert, wenn ja, was haben Sie getan?
- Wenn die synchrone Replikation aktiviert ist, stellte ich fest, dass der neue Masterserver 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?
quelle
Antworten:
Check out repmrg :
Es macht zwei Dinge:
Bei einem automatischen 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 Fehler wieder zu starten.
Version 2.0 wird veröffentlicht, einschließlich RPMs.
quelle
In Ihrer Datei recovery.conf sollten Sie eine Zeile einfügen, die postgres anweist, ein Failover von Master zu Slave durchzuführen. Sie sollten hinzufügen
Wenn Sie diese Datei auf dem angegebenen Pfad erstellen. Knoten werden sich ändern. (Datei enthält nichts, es ist nur ein Auslöser)
Weitere Informationen zur Streaming-Replikation finden Sie hier
Auf der anderen Seite wird es möglich sein, es mit ein paar Tricks automatisch zu erstellen, aber die Verwendung von Überwachungstools und das Erstellen von Failover-Handbüchern sind besser.
quelle
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 die bereits in PostgreSQL 9.1 vorhandenen Replikationsfunktionen genutzt werden.
quelle