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

MongoDB на AWS (EBS): 3 реплики против 2 реплик + Arbiter

У нас есть довольно большая база данных Mongo, работающая в AWS. В настоящее время мы работаем с набором реплик с 3 экземплярами. Каждый экземпляр имеет 5 ТБ подключенного хранилища EBS. Это составляет более 1000 долларов в месяц за экземпляр. Вдобавок к этому у нас есть как производственная, так и промежуточная среда (скоро появится третья среда разработки). Кроме того, эти затраты могут резко возрасти в будущем, когда / если мы перейдем к сегментированной среде.

Вопрос в том, насколько необходимы 3 реплики в среде AWS?

Хорошо, хорошо, хорошо, я уже знаю, что ответ - это зависит от обстоятельств. Я ищу несколько советов о том, как лучше всего взвесить компромиссы. Например...

  1. Учитывая, что каждый том EBS уже имеет встроенную тройную избыточность и что довольно просто восстановить из резервной копии, как мне измерить добавленную отказоустойчивость 2 или 3 реплик.

  2. Есть ли дополнительные соображения помимо избыточности при рассмотрении компромиссов?

  3. У кого-нибудь есть опыт (хороший или плохой) запуска всего 2 реплики + Арбитр?

  1. Учитывая, что каждый том EBS уже имеет встроенную тройную избыточность и что довольно просто восстановить из резервной копии, как мне измерить добавленную отказоустойчивость 2 или 3 реплик.

Что касается MongoDB, то ключевые соображения только с двумя участниками, несущими данные в наборе реплик из трех узлов, заключаются в том, что если один из этих элементов, несущих данные, недоступен по какой-либо причине (плановое обслуживание или незапланированный отказ):

  • у вас больше нет активной репликации (остался только один элемент, несущий данные)
  • ваше развертывание больше не может подтверждать проблемы записи выше, чем w:1 (например: w:majority или w:2)

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

  1. Есть ли дополнительные соображения помимо избыточности при рассмотрении компромиссов?

Если ваш код использует MongoDB писать проблемы выше значения по умолчанию (w:1) вы захотите добавить wtimeout стоимость. Если вы не укажете wtimeout и уровень беспокойства по поводу записи недостижим, операции записи будут блокироваться на неопределенный срок.

Гарантии AWS для избыточной инфраструктуры обычно распространяются только на отказы в нескольких зонах доступности, поэтому для максимальной доступности также следует развернуть элементы набора реплик в разных зонах доступности.

  1. Есть ли у кого-нибудь опыт (хороший или плохой) запуска всего 2 реплики + Арбитр

Я определенно видел плохие результаты, когда пользователи не учли вышеуказанные моменты (особенно с учетом проблем с записью и тайм-аутов). Если вы планируете (и тестируете) с учетом этих предостережений, вы сможете получить хороший опыт.

Вдобавок к этому у нас есть как производственная, так и промежуточная среда (скоро появится третья среда разработки)

Определенно есть аргумент в пользу наличия промежуточных сред и сред разработки, подобных продуктам, но типичная экономия затрат будет заключаться в развертывании сред с более низкими спецификациями для разработчиков с меньшим отказом, чем в производственной среде. Для постановки вы можете развернуть среды с более низкими характеристиками, но с аналогичной конфигурацией, чтобы вы могли протестировать реалистичные сценарии переключения при отказе. Если вы проводите тестирование производительности или нагрузочного тестирования в промежуточных средах, они должны иметь те же спецификации, что и производственные.