Czy to ważna strategia tworzenia kopii zapasowych dla MongoDB?


11

Mam jeden dedykowany serwer z bazą danych MongoDB o wielkości około 10 GB. Muszę robić codzienne kopie zapasowe, ale nie mogę mieć przestojów w bazie danych. Czy można użyć zestawu replik na jednym dysku (z 2 instancjami mongod działającymi na różnych portach) i po prostu przełączyć drugi z nich w tryb offline i wykonać kopię zapasową plików danych w pamięci zewnętrznej, takiej jak S3 (kronikowanie jest włączone)? A może użycie master / slave byłoby lepsze niż zestaw replik?

Czy to jest wykonalne, a jeśli tak, jakie potencjalne problemy mogę mieć? Jeśli nie, to jak mam to pojąć?

Odpowiedzi:


6

ReplicaSet będzie działać w tym scenariuszu. Nie mogę jednak stwierdzić, czy posiadanie dwóch instancji MongoDB na tym samym serwerze jest dobrym pomysłem - zależy to od sprzętu / oprogramowania serwera i obciążenia.

Aby upewnić się, że twój backupwęzeł MongoDB nie zostanie master, ustaw jego priorityparametr na 0np

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

UWAGA : jeśli nie możesz mieć przestojów, POWINNYŚ mieć co najmniej 2 podstawowe węzły MongoDB w ReplicaSet, zobacz artykuł


2

Jedną strategią do rozważenia jest użycie opcji „ukrytej” w węźle zapasowym w replice. Z bloga MongoDB:

Ukryte serwery nie pojawią się w wynikach isMaster (). Oznacza to również, że nie będą one używane, jeśli sterownik automatycznie rozdzieli odczyty do urządzeń slave. Ukryty serwer musi mieć priorytet 0 (nie możesz mieć ukrytego podstawowego). Aby dodać ukrytego członka, uruchom:

rs.add ({"_ id": num, "host": nazwa hosta, "priorytet": 0, "ukryty": prawda})


1

Zestawy replik są ogólnie preferowane, ale także w tym przypadku po prostu ze względu na ich funkcję automatycznego odzyskiwania i automatycznej resynchronizacji. Opisana przez ciebie metoda tworzenia kopii zapasowych brzmi całkowicie rozsądnie i była wcześniej stosowana również w innych bazach danych.

Jedyny potencjalny problem, jaki widzę, to to, że w pewnych okolicznościach twoja pomocnicza może zostać awansowana na podstawową i albo albo) będziesz musiał wziąć kopię zapasową z nowej pomocniczej, albo b) sprawić, by twój skrypt zapasowy był wystarczająco inteligentny, aby poinformować to wystąpienie MongoDB, aby ustąpić.

Dobra wiadomość jest taka, że ​​powinno to być dość trywialne

  1. Zapytaj źródło kopii zapasowej, aby dowiedzieć się, która instancja jest podstawowa, a która dodatkowa ( db.isMaster())
  2. Przekonaj wystąpienie kopii zapasowej, aby zrezygnować za pomocą poleceń rs.freeze()i lub ponownie połącz się z pomocniczymrs.stepDown()

Czy nie jest możliwe ustawienie priorytetu na 0, jak sugeruje Alexander, aby wtórny nigdy nie stał się pierwotny?
— James Simpson

Będziesz musiał przeprowadzić testy, ale nie jestem pewien, czy system wtórny przejdzie w tryb gotowości, jeśli z jakiegoś powodu podstawowy proces ulegnie awarii. Zawsze chciałem, aby moje drugorzędne przejęły;)
— Charles Hooper

1
>> Twoje drugie miejsce może zostać awansowane na pierwsze - jak wspomniano, ustawienie drugiego na priorytet 0 zapobiegnie kiedykolwiek przełączeniu na główny.
— Jonesome przywraca Monikę

Możesz połączyć się z dowolnym węzłem równorzędnym z listy węzłów równorzędnych (może to być dowolny węzeł główny, pomocniczy, arbiter lub ukryty), zapytać tego równorzędnego, kto jest drugim węzłem ( rs.status()i przejść przez niego result["members"]), i połączyć się z jednym z pomocnicze do wykonania kopii zapasowej.
— yfeldblum
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.