Anfängerfragen zur Replikation

Hallo.

Seit einigen Tagen spiele ich mich mit der Replikation unter Linux und brauchte auch nicht lange, dass eine Streaming Replication funktionierte :slight_smile:

Aber leider gibt es eine Menge Fragen rund um das Thema bzw. bin ich mir auch nicht so sicher was wir genau brauchen (Art der Replikation usw)
Zur Zeit läuft ein Standalone Postgres-Server, welcher von einem selbst programmierten Dienst gestartet und gestoppt wird (es werden auch Infos über verwendeten Port usw. per Multicast im Netzwerk verschickt, damit andere Dienste automatisch wissen ob eine DB läuft und wie man sich zu der DB verbinden kann)
Nun möchten wir auch eine Lösung mit einer Replikation, auf der einen Seite um die Last auf zwei (oder ev. sogar mehrere Server) verteilen zu können und auf der anderen Seite auch wegen der Ausfallsicherheit.
Zur Zeit gibt es vermehrt lesende Zugriffe auf die Datenkank und sehr wenige schreibende Zugriffe und eine sofortige Synchronisation ist nicht zwingend notwendig, aber es wäre doch auch wieder “schön”, wenn es möglich wäre.
Das Handling einer Replikation muss bei uns automatisch sein und sollte eher keinen Usereingriff benötigen, deshalb muss ein Slave nicht unbedingt automatisch zum Master werden, wenn anschließend eine Rücksetzung zum Slave usw. zu Problemen führt, welche keine automatischen Vorgänge zulassen.

Am Besten ist es wohl ich fange mit ein paar Fragen an:

  1. Kann man Parameter wie wal_keep_segments, wal_sender, primary_conninfo, etc. on-the-fly, also ohne Neustart übernehmen? Die Überlegung ist folgende, wenn man mehrere Slaves hat und der Master stirbt und ein Slave wird zum Master, dass man zum einen die anderen Slaves zum neuen Master irgendwie automatisch verbinden lassen kann.
  2. Welche Wege gibt es, damit ich von außen erkennen kann ob der Server als Master oder Slave läuft (SQL-Abfrage, ein bestimmter Prozess läuft, etc?)
  3. Wenn man einen Slave startet und dieser kann sich nicht mehr mit dem Master synchronisieren, wie kann man das von außen feststellen/überprüfen?
  4. Wie kann ich von außen überprüfen ob der Slave noch mit dem Master syncronsiert?
  5. Kann ein Listen immer nur auf einem Master gemacht werden oder ist das vom Synchronisierung-Typ abhängig?
  6. Kann man bei Streaming Replication auch in einer Transaktion “set synchronous_commit to on” verwenden und werden die weiteren Requests dann statt asynchron eben synchron abgearbeitet?

Ich wäre sehr froh, wenn mir einige helfen könnten :slight_smile:
DANKE!

lg Johannes

Schau Dir mal http://repmgr.org/ an - das beantwortet sicher einen Großteil Deiner Fragen. Und natürlich die Doku.