У нас есть довольно большая база данных Mongo, работающая в AWS. В настоящее время мы работаем с набором реплик с 3 экземплярами. Каждый экземпляр имеет 5 ТБ подключенного хранилища EBS. Это составляет более 1000 долларов в месяц за экземпляр. Помимо этого, у нас есть как рабочая, так и промежуточная среда (скоро появится третья среда «dev»). Кроме того, эти расходы могут резко возрасти в будущем, когда/если мы перейдем на шардированную среду.
Вопрос в том, насколько необходимы 3 реплики в среде AWS?
Ладно, ладно, ладно, я уже знаю ответ: "зависит от обстоятельств". Я ищу совет о том, как лучше всего взвесить компромиссы. Например...
Учитывая, что каждый том EBS уже имеет встроенную тройную избыточность и что восстановление из резервной копии довольно просто, как мне измерить дополнительную отказоустойчивость 2 по сравнению с 3 репликами?
Существуют ли дополнительные соображения, помимо избыточности, при рассмотрении компромиссов?
Есть ли у кого-нибудь опыт (положительный или отрицательный) работы только с 2 репликами + арбитром?
решение1
- Учитывая, что каждый том EBS уже имеет встроенную тройную избыточность и что восстановление из резервной копии довольно просто, как мне измерить дополнительную отказоустойчивость 2 по сравнению с 3 репликами?
Что касается MongoDB, то при наличии только двух элементов, несущих данные, в наборе реплик из трех узлов следует учитывать, что если один из этих элементов, несущих данные, по какой-либо причине недоступен (плановое обслуживание или незапланированный сбой):
- у вас больше нет активной репликации (остался только один член, несущий данные)
- ваше развертывание больше не может распознавать проблемы записи выше, чем
w:1
(например:w:majority
илиw:2
)
Эта конфигурация имеет высокую доступность с точки зрения поддержания/выбора основного в случае отказа одного участника, но арбитр ставит под угрозу избыточность данных, если один из ваших участников, несущих данные, недоступен. Если у вас есть разумное время для восстановления из резервных копий EBS (и вы доверяете избыточности EBS), это может быть приемлемым компромиссом для вашего варианта использования.
- Существуют ли дополнительные соображения, помимо избыточности, при рассмотрении компромиссов?
Если ваш код использует MongoDBнаписать опасениявыше, чем значение по умолчанию ( w:1
), вам нужно будет добавитьwtimeout
значение. Если вы не укажете wtimeout
опцию и уровень беспокойства о записи будет недостижимым, операции записи будут блокироваться на неопределенный срок.
Гарантии AWS по избыточной инфраструктуре обычно распространяются только на сбои в нескольких зонах доступности, поэтому для обеспечения максимальной доступности вам следует также развернуть элементы набора реплик в разных зонах доступности.
- Есть ли у кого-нибудь опыт (хороший или плохой) работы только с 2 репликами + арбитр?
Я определенно видел плохие результаты, когда пользователи не учитывали вышеуказанные пункты (особенно с учетом проблем записи и тайм-аутов). Если вы планируете (и тестируете) с учетом этих оговорок, вы должны быть в состоянии приземлиться на стороне хорошего опыта.
Помимо этого, у нас есть как производственная, так и промежуточная среда (скоро появится третья среда «dev»).
Определенно есть аргумент в пользу наличия промежуточных и dev-сред, подобных prod, но типичной экономией средств будет развертывание сред с более низкими спецификациями для разработки с меньшим количеством отказов, чем в production. Для промежуточных сред вы можете захотеть развернуть среды с более низкими спецификациями, но иметь похожую конфигурацию, чтобы вы могли тестировать реалистичные сценарии отказов. Если вы проводите тестирование производительности или нагрузки в промежуточных средах, они должны быть подготовлены с теми же спецификациями, что и production.