Zestaw repliki Mongo DB utknął w stanie ODZYSKIWANIA
14
Stworzyliśmy zestaw replik, a teraz problem polega na tym, że 2 członków zestawu replik [zestaw 3 członków] jest w trybie odzyskiwania od 48 godzin. Początkowo rozmiar odzyskiwania węzłów wzrastał, a teraz nawet to się zatrzymało. Odzyskiwanie węzłów utknęło więc po 90 GB danych przy ponad 60 GB danych lokalnych.
Jest to trochę niepewne, ponieważ nie wiadomo, dlaczego pomocnicze urządzenia weszły w stan odzyskiwania.
Bardziej bezpieczny, ale i bardziej nachalny sposób
Jak wyżej, ale zatrzymaj aplikację podczas procesu. Zapobiega to możliwości wstawienia przez aplikację większej ilości danych niż są w stanie się replikować. Problem może jednak wystąpić podczas produkcji.
Najbezpieczniejszy, ale także najbardziej inwazyjny sposób
Zamknij cały zestaw replik
Usuń zawartość dbpathna obu wtórnych
Skopiuj zawartość dbpathdo obu pomocniczych ”dbpath
Uruchom starą podstawową.
Uruchom jeden ze starych pomocników.
Poczekaj, aż zostanie wybrany nowy podstawowy.
Rozpocznij pozostałe dodatkowe.
Niektóre uwagi:
Użyj MMS . Jest bezpłatny, łatwy w konfiguracji i daje dobre informacje na temat zestawu replik. Staraj się, aby wartość „opóźnienia replikacji” wynosiła około 0, i weź wszelkie niezbędne środki, aby opóźnienie replikacji nigdy nie było większe niż „okno oplogowania replikacji”.
Zawsze upewnij się, że masz sieć 1 Gb i (przepraszam) gówno pamięci RAM. Im więcej tym lepiej. Dodatkowa zasada: raczej połowa pamięci RAM i dysków SSD niż podwójna pamięć RAM i brak dysków SSD (przy zachowaniu rozsądnych limitów pamięci RAM).
Oświadczenie: Zawsze wykonuj kopię zapasową danych produkcyjnych, zanim zaczniesz nimi manipulować.
Na razie nie mamy drugiego węzła w zestawie replik. Jeden jest w trybie PODSTAWOWYM, a pozostałe dwa są w trybie ODZYSKIWANIA.
Avinash Sahu
1
Logiczne pomocnicze zatem. Proces jest taki sam.
Markus W Mahlberg
Wielokrotnie próbowałem uruchomić instancję Mongo i ponownie zsynchronizować, za każdym razem, gdy zaczyna kopiować dane do innego węzła, aż do ustalonego rozmiaru (~ 96 gb), a następnie blokuje się. Czy rozmiar oplog ma coś z tym wspólnego?
Avinash Sahu
1
Nie bardzo, z wyjątkiem faktu, że resynchronizacja może się zatrzymać, gdy wstawisz więcej danych, niż oplog może pomieścić podczas pierwszej synchronizacji. W takim przypadku wybierz opcję 2 lub 3.
Markus W Mahlberg,
1
Czy możesz wyjaśnić to nieco dalej? „raczej połowa pamięci RAM i dysków SSD niż podwójna pamięć RAM i brak dysków SSD (przy zachowaniu rozsądnych limitów pamięci RAM)”.
Stephen Nguyen
1
Proces replikacji kończy się niepowodzeniem, nawet jeśli zaczniesz rysować od nowej ścieżki dbp na dodatkowej, więc chodzi o wprowadzenie pewnych zmian w oplogu . Rozmiar oplogu musi być ustawiony na optymalną wartość, aby mógł obsługiwać wszystkie zapisy aplikacji.
Zwiększanie rozmiaru oplogu:
Zamknij główny serwer
use admin
db.shutdownServer()
Zacznij od podstaw jako samodzielny i uruchom na innym porcie, powiedz 37017
Zaloguj się do Mongo w porcie 37017
mongo --port 37017
Usuń starą zawartość z lokalnej bazy danych
Dla bezpieczeństwa miej zapasowe stare oplogowanie przed upuszczeniem
mongodump --db local --collection 'oplog.rs' --port 37017
Upuść starą zawartość w lokalnej bazie danych
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
Nie można usunąć kolekcji zastępczej, więc usuń ją z wymaganym identyfikatorem:
Proces replikacji kończy się niepowodzeniem, nawet jeśli zaczniesz rysować od nowej ścieżki dbp na dodatkowej, więc chodzi o wprowadzenie pewnych zmian w oplogu . Rozmiar oplogu musi być ustawiony na optymalną wartość, aby mógł obsługiwać wszystkie zapisy aplikacji.
Zwiększanie rozmiaru oplogu:
Zamknij główny serwer
Zacznij od podstaw jako samodzielny i uruchom na innym porcie, powiedz 37017
Zaloguj się do Mongo w porcie 37017
Usuń starą zawartość z lokalnej bazy danych
Dla bezpieczeństwa miej zapasowe stare oplogowanie przed upuszczeniem
Upuść starą zawartość w lokalnej bazie danych
Nie można usunąć kolekcji zastępczej, więc usuń ją z wymaganym identyfikatorem:
Utwórz nowy oplog o wymaganym rozmiarze, powiedzmy 50 GB
Możesz także określić rozmiar oplogu w MB w pliku mongod.conf, powiedzmy, że dla 50 GB to 429496 MB
Mam nadzieję że to pomoże !!!
Edytować:
Jak wspomniał Nicholas Tolley Cottrell w komentarzach. W wersji 3.6 MongoDB możemy zmienić rozmiar oplogu w czasie wykonywania bez restartu.
Sprawdź aktualny rozmiar oplogu
Aby zmienić rozmiar oplogu na 10 GB
źródło