Replikacja nie powiodła się; jak zacząć od nowa?


10

Używam Postgres 9.1.6 na Ubuntu i mam konfigurację replikacji strumieniowej między urządzeniem głównym a urządzeniem podrzędnym. Wszystko działało sprawnie, dopóki baza danych nie uległa awarii i musieliśmy ponownie uruchomić oba pola.

Teraz replikacja została zatrzymana i podczas sprawdzania dzienników w obu polach widzę ten komunikat:

CDT FATAL: żądany segment WAL 0000000100000224000000FA został już usunięty

To ten sam segment w kółko. Z mojego Googlinga wydaje się, że serwer replikacji próbuje odzyskać ten segment z mastera, ale już go nie ma. Ok, ale jak sobie z tym poradzić? Czy muszę wykonać nową kopię zapasową i zsynchronizować ją z serwerem slave? Czy istnieje prosty sposób na zsynchronizowanie niewolnika?

Odpowiedzi:


7

Tak, będziesz musiał dać slave'owi nową podstawową kopię zapasową (do replikacji strumieniowej tylko kroki od 1 do 4) mastera.

Twój problem prawdopodobnie wystąpił, ponieważ wartość wal_keep_segments jest za niska. Wartość musi być na tyle wysoka, aby kiedy slave był wyłączony przez pewien czas, master nie zaczął ponownie przetwarzać segmentów, które slave jeszcze nie przetworzył.


1

Przed podłączeniem urządzenia podrzędnego do hosta głównego w trybie przesyłania strumieniowego sprawdź, czy wymagane WAL znajdują się w miejscu, z którego przywracasz dane w celu wstępnego przywrócenia.

Twój problem może się zdarzyć, gdy nie ma segmentu WAL segmentu w miejscu, z którego przywracasz do początkowego odzyskiwania.

Jeśli w tym przypadku wszystko jest w porządku, powinieneś sprawdzić komendę restore_ w recovery.conf.


0

innym rozwiązaniem jest wykonanie kopii zapasowej wal_push z podstawowego i natychmiastowe wykonanie backip_fetch z rezerwowego slave i uruchomienie standby.


2
Proszę
wyjaśnić,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.