Це дійсна стратегія резервного копіювання для MongoDB?


11

У мене є єдиний виділений сервер із базою даних MongoDB близько 10 Гб. Мені потрібно робити щоденні резервні копії, але я не можу простоювати з базою даних. Чи можливо використовувати репліку, встановлену на одному диску (з двома екземплярами mongod, що працює на різних портах), а також просто взяти вторинний автономний режим і створити резервну копію файлів даних у сторонній сховище, наприклад S3 (журнал увімкнено)? Або використання майстра / підлеглого краще, ніж набір реплік?

Чи це життєздатно, і якщо так, то які потенційні проблеми я міг би мати? Якщо ні, то як я концептуалізую це для роботи?

Відповіді:


6

ReplicaSet буде працювати в цьому сценарії. Однак я не можу сказати, чи є два екземпляри MongoDB на одному сервері - це гарна ідея - це залежить від апаратного забезпечення / програмного забезпечення сервера та завантаження.

Для того, щоб переконатися , що ваш backupвузол MongoDB не стане майстром, встановіть його priorityпараметр в 0, наприклад ,

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

ПРИМІТКА : якщо у вас не може бути простоїв, ВІДПОВІДИТЬ принаймні 2 первинних MongoDB-вузла в ReplicaSet, див. Статтю


2

Однією з стратегій, яку слід врахувати, є використання параметра «прихований» на вузлі резервного копіювання реплікату. З блогу MongoDB:

Приховані сервери не відображатимуться в результатах isMaster (). Це також означає, що вони не будуть використовуватися, якщо драйвер автоматично поширює зчитування на раби. Прихований сервер повинен мати пріоритет 0 (прихований основний не може бути). Щоб додати прихований член, запустіть:

rs.add ({"_ id": num, "host": ім'я хоста, "пріоритет": 0, "приховано": true})


1

Набори репліку віддають перевагу загалом, але також і в цьому випадку просто через їх функцію автоматичного відновлення та автоматичного відновлення. Спосіб резервного копіювання, який ви описуєте, здається цілком розумним і раніше його застосовували і в інших базах даних.

Єдиною потенційною проблемою, яку я бачу, є те, що за певних обставин ваш вторинний може бути переведений на ваш основний, і вам потрібно буде: а) потрібно взяти резервну копію з нового вторинного, або b) зробити ваш скрипт резервного копіювання досить розумним, щоб повідомити про цей примірник MongoDB відступив.

Хороша новина полягає в тому, що це має бути досить тривіально

  1. Запитайте джерело резервного копіювання, щоб дізнатися, який примірник є первинним, а який вторинним ( db.isMaster())
  2. Переконайте копію резервного копіювання відступити за допомогою команд rs.freeze()та rs.stepDown()команд або знову підключитися до вторинного

Хіба це не варіант встановити пріоритет на 0, як пропонує Олександр, щоб вторинний ніколи не став первинним?
Джеймс Сімпсон

Вам доведеться зробити тестування, але я не впевнений, чи буде вторинний просто очікувати, якщо з якихось причин первинний процес вийде з ладу. Я завжди хотів, щоб мої другорядники перейшли
Чарльз Хупер

1
>> ваш вторинний може бути переведений у ваш основний - Як зазначалося, встановлення вторинного на пріоритет 0 не дозволить йому коли-небудь перейти до головного.
Jonesome Reinstate Моніка,

Ви можете підключитися до будь-якого з однолітків зі свого списку рівних вузлів (це може бути будь-який первинний, вторинний, арбітр чи прихований вузол), запитати у однолітка, хто є вторинними ( rs.status()і result["members"]провести цикл ), і підключитися до одного з вторинники для виконання резервного копіювання.
yfeldblum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.