Назад | Перейти на главную страницу

Подготовка к сбоям MongoDB на AWS

Мне нужен совет по передовой практике, касающийся аварийного восстановления MongoDB в среде, размещенной на AWS.

На данный момент наша установка довольно стандартна, набор реплик из 3 серверов (1 первичный, 1 вторичный и 1 арбитр), тома mongo на первичном и вторичном серверах поддерживаются EBS. Все в одном регионе и в нескольких зонах доступности. В конце концов нам нужно будет охватить регионы, но это обсуждение на другой день.

Совет по резервному копированию, который я видел в документации Mongo, говорит о снимках состояния EBS (которые достаточно легко автоматизировать). Однако, если случится катастрофа, они не вернут нас во времена неудач.

Я ищу наиболее надежную стратегию. До второй скорость защиты данных и восстановления системы после сбоя важнее цены. Позже мы сможем оптимизировать цену.

Заранее благодарим за все предложения ...

Во-первых, если вы сделаете снимок, он будет включать журнал операций - журнал операций - это просто ограниченная коллекция, находящаяся в локальной базе данных. Моментальные снимки вернутся к определенному моменту времени, и если у вас включено ведение журнала (оно включено по умолчанию), вам не нужно делать ничего особенного, чтобы моментальный снимок работал в качестве резервной копии.

Единственное абсолютное требование - снимок состояния EBS должен быть достаточно свежим, чтобы соответствовать вашим требованиям. oplog window - то есть последняя (самая последняя) операция, записанная в журнале операций резервного копирования моментального снимка, также должна быть в журнале операций текущего основного, чтобы они могли найти общую точку. Если это так, это будет работать примерно так:

  1. Вы восстанавливаете вторичный объект из резервной копии моментального снимка EBS.
  2. В mongod запускает, ищет (и применяет) все соответствующие файлы журнала
  3. Затем вторичный подключается к первичному и находит общую точку в двух oplogs.
  4. Любые последующие операции с основного применяются к ВОССТАНОВЛЕНИЕ вторичный
  5. Как только вторичный накопитель достигает достаточного уровня, он переходит в ВТОРИЧНОЕ состояние и резервное копирование завершается.

Если моментальный снимок недостаточно свежий, его можно отбросить - без общей точки в журнале операций вторичный снимок должен будет повторная синхронизация с нуля тем не мение.

Чтобы ответить на ваши конкретные вопросы:

Нужно ли мне записывать журналы операций и использовать их вместе для восстановления после сбоя?

Как объяснялось выше, если вы делаете снимок, вы уже создаете резервную копию журнала операций.

Должен ли я запускать другой экземпляр в наборе реплик специально для резервного копирования и снимка, а не делать снимки основного и дополнительного? Если да, то мы вернулись к проблеме oplog, не так ли?

Нет никаких проблем с oplog, кроме той общей точки / окна, о которой я упоминал выше. Некоторые люди предпочитают учиться в средней школе (обычно скрытый) с этой целью, чтобы избежать увеличения нагрузки на обычный узел. Примечание: даже скрытый член получает голос, поэтому, если вы добавили его в целях резервного копирования, вы можете удалить арбитра из своей конфигурации, и у вас все равно останется 3 голосующих члена.

Должен ли я сделать снимок каждого тома реплики и полностью полагаться на набор реплик, чтобы покрыть время между отказом и последним снимком?

Каждый член набора реплик должен быть идентичным - данные одинаковы, любой вторичный может стать первичным и т. Д. - это не ведомые устройства, каждый член набора реплик содержит полный журнал операций и все данные.

Таким образом, создание нескольких моментальных снимков (при условии, что вы доверяете процессу) будет избыточным (конечно, вам может потребоваться эта избыточность). И да, вся цель функциональности набора реплик состоит в том, чтобы гарантировать, что вам не нужно принимать чрезвычайные меры для использования вторичного устройства таким образом (конечно, с учетом приведенных выше предостережений).