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?