Wie überwache ich den PostgreSQL WAL-Versand, wenn ich keine Streaming-Replikation verwende?

7

Wir haben ein ziemlich einfaches Setup, um von unserer lokalen PostgreSQL-Masterdatenbank auf unsere Präsentationsebene in AWS zu replizieren. Wir verwenden den WAL-Versand mit dieser archive_commandEinstellung. Grundsätzlich sieht das Setup so aus:

    +-------------+
    |   Master    |
    +-------------+
     WAL  |     
segments  |              
         \|/                     +--------------+
    +-------------+   WAL      +-+------------+ |      
    |             |----------->| Hot Standby  | |
    |      S3     |  segments  |   Slaves     | |
    |             |            |              |-+
    +-------------+            +--------------+

Dieses Setup scheint im Allgemeinen ziemlich robust zu sein, aber ich habe keine gute Möglichkeit gefunden, Fehler zu erkennen, entweder der Master kann keine Archive hochschieben oder ein Slave oder Slaves können die Protokolldateien nicht abrufen. Was ist ein guter Weg, um festzustellen, ob ein Slave in Bezug auf den Master auf dem neuesten Stand ist? Wie kann festgestellt werden, ob der Master eine WAL-Datei nicht versendet hat?

Um dies zu verdeutlichen, verwenden wir die Slaves ausschließlich als Lesereplikate. Wir werden niemals ein Failover auf sie durchführen.

Gregsymons
quelle

Antworten:

5

Hier sind einige Möglichkeiten:

  • Vergleichen Sie pg_current_xlog_location()auf der primären mit pg_last_xlog_replay_location()im Standby. Dadurch erhalten Sie die Verzögerung in Bytes, die für Warnungen möglicherweise nicht sehr nützlich ist, aber es kann nützlich sein, sie grafisch darzustellen.
  • Überwachen Sie pg_last_xact_replay_timestamp()im Standby-Modus die aktuelle Uhrzeit.
  • Lassen Sie einen Cron-Job auf dem primären regelmäßig einen Wert ändern und überprüfen Sie dann, wie lange es dauert, bis Sie in den Standby-Modus gelangen. So wurde es früher gemacht, bevor es pg_last_xact_replay_timestamp()verfügbar wurde.
Peter Eisentraut
quelle