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?

Mark Hoffman
źródło

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ł.

Eelke
źródło
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.

Kishor Hargude
źródło
0

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

Nathn
źródło
2
Proszę
wyjaśnić,