2012-07-22 2 views
4

Я стараюсь, чтобы я понял, что происходит, когда я добавляю новый Shard (Replica Set) в существующий кластер Shard. Когда я добавляю этих новых членов, и он видит, что есть новый член Shard, доступный Mongo, тогда начинает переупорядочивать куски, чтобы он мог правильно использовать новых членов? Какие последствия для вас возникают, когда это происходит? Как всегда, я предполагаю, что вы захотите попробовать добавить этих участников, как только начнете видеть неблагоприятные показатели производительности (если другие параметры настройки не помогают).MongoDB Добавить обломок в существующий кластер - Что происходит?

Просто хотел лучше понять, что происходит, когда вы добавляете Осколок, когда кластер уже существует.

Спасибо,

S

ответ

4

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

С точки зрения самих миграций вы уже видите их в своем нынешнем кластере, так что, как можно судить об их воздействии. Вы можете просмотреть последние миграции в журналах, или вы посмотрите на список изменений (в 10MB колпачком коллекцию, содержащую самые последние миграции перелетных/шпагат и т.д.) могут:

// connect to a mongos, switch to the config DB 
use config 
// look at the changelog 
db.changelog.find() 

В плане того, что произойдет операции, хорошо, чтобы переместить кусок:

  1. документов, которые составляют этот кусок должен быть прочитан в память на исходном осколке уже, если не существует (так довольно стандартное для чтения)
  2. Они затем направляются осколок назначения (довольно стандартная вставка/запись)
  3. Наконец, после того, как метаданные были обновлены, они удаляются из исходного осколка.

Шаг 3 - это удаление, которое требует блокировки записи на исходном осколке, но оно должно быть довольно быстрым - документы уже находятся в памяти из миграции.

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

Это означает, что вы увидите больше зарегистрированных сообщений о монго, которые нуждаются в обновлении своей конфигурации и обновлении ее версии осколков. Также может быть хорошей идеей запустить flushRouterConfig command, прежде чем начинать длительные операции, такие как Map/Reduce или findAndModify.

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

+0

Спасибо Адам Я ценю информацию – scarpacci

3

Как всегда я предполагаю, что вы хотите попробовать и добавить эти элементы, как только вы начинаете видеть неблагоприятные показатели производительности

Это был мой опыт, который вы хотите добавить осколок в ожидании роста трафик. Особенно, если количество осколков невелико (< 6 или около того). Перенос данных на новый узел увеличит IO на существующих узлах, а также увеличит сетевой трафик.

Итак, если вы уже испытываете проблемы с IO, добавление осколка просто ухудшит ситуацию. Вы можете завершить миграцию с помощью «ребенка» или воспользоваться опцией «Балансировка». Фактически, наличие опции балансировочного окна должно рассказать вам об интенсивности процесса балансировки.

Какие последствия для вас могут получить, когда это произойдет?

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

Опять же, это будет связано с IO и моими комментариями выше.

При добавлении этих новых членов, и он видит, что есть новый осколок член доступен Монго затем начинает перестраивать ломти ...

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

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

+0

Спасибо @GatesVP очень полезная информация! – scarpacci

Смежные вопросы