Czy replikacja strumieniowa PostgreSQL 9.1 nadrabia zaległości po opóźnieniu bez archiwizacji WAL?

16

Kontekst:

Powiedzmy, że podczas używania replikacji strumieniowej / trybu gotowości w trybie gotowości w klastrze Postgres 9.1 węzeł rezerwowy ulega awarii. Pozostaje wyłączony przez jeden dzień, w którym to czasie w masteru pojawia się dużo DML. Odzyskiwanie.conf w trybie gotowości nie zawiera wpisu „restore_command” (do przywracania z plików dziennika WAL), ale zawiera ciąg „primary_conninfo” (do replikacji strumieniowej).

Pytanie:

Jeśli ponownie uruchomię tryb gotowości po dniu zmian w urządzeniu głównym. Czy „dogoni” (ostatecznie przejdzie w stan, który odzwierciedla wzorzec) przy użyciu tylko replikacji strumieniowej? Czy też muszę włączyć archiwizację plików WAL i zezwolić na stosowanie plików zarchiwizowanych podczas awarii, aby zapewnić walutę?

Sprawdziłem tutaj dokument dotyczący archiwizacji / replikacji strumieniowej WAL i mówi, że nie musisz włączać zarówno archiwizacji WAL, jak i replikacji strumieniowej, ale nie jest jasne, czy nastąpi nadrabianie zaległości bez włączonej archiwizacji plików WAL.

Dzięki!

Zac B
źródło

Odpowiedzi:

9

Tak, nadrabia zaległości, używając tylko przesyłania strumieniowego, jeśli (i tylko wtedy) liczba segmentów WAL wygenerowanych od ostatniej aktualizacji w trybie gotowości jest mniejsza niż wartość wal_keep_segments w postgresql.conf. Jest to omówione w tej części dokumentacji: Replikacja

Matthew Wood
źródło
2
Ta odpowiedź jest poprawna, ale podkreśla problem. Jeśli kiedykolwiek zdasz wal_keep_segments, Twoja replikacja nie będzie działać. Konfigurowanie replikacji opartej na plikach nie jest opcjonalne, jeśli chcesz, aby system przetrwał długie odłączenie od systemu nadrzędnego i nadrobił zaległości.
Greg Smith
0

w węźle rezerwowym możesz ustawić restore_command na recovery.conf, a następnie skopiować pliki wzorcowe pg_xlog (których brakuje w trybie gotowości) do folderu, który wskazuje punkty restore_command. Możesz łatwo znaleźć brakujące pliki xlog, uruchamiając węzeł uruchamiania i wpisując

ps aux | grep postgres

zobaczysz tam „czekający na 000000020000005200000025” lub coś w tym rodzaju, co powie ci, który pg_xlog powinieneś zacząć kopiować z master na ścieżkę restore_command w trybie gotowości.

jeśli włączysz wal_archiving, rozpocznie się archiwizacja od momentu konfiguracji.

sftsz
źródło
Rozumiem, że korzystając z archiwizacji WAL opartej na plikach i przekazując do trybu gotowości polecenie przywracania_do ładowania plików WAL, mogę się upewnić, że się dogoni. Ale to nie moje pytanie; Chcę wiedzieć, czy tryb gotowości nadejdzie, jeśli użyję tylko replikacji strumieniowej (brak wysyłania pliku WAL, tylko strumień replikacji, jak określono w „primary_conninfo”).
Zac B
Nie. postgres tego nie robi. w przypadku opóźnienia replikacji należy skopiować pliki dziennika.
sftsz
0

Nie, skonfigurowałem instancję replikacji przesyłania strumieniowego i jakoś się nie zsynchronizowałem, nie byłem w stanie jej ponownie uruchomić, dopóki nie zrobiłem instrukcji obsługi rsyncarchiwów WAL.

ksenoterracid
źródło