Читает ли mongodb из вторичного члена набора реплик при использовании «movechunk» для балансировки кластера осколков?

При использовании команды «movechunk» (и, следовательно, при работающем балансировщике) операции чтения и блокировки происходят на первичном или вторичном элементе набора реплик?

Наше приложение в настоящее время не читает из вторичных элементов, поэтому было бы неплохо, если бы команда shard balancer/movechunk считывала и блокировала только вторичный элемент, не влияя на производительность основного.


person Tim Trinidad    schedule 19.09.2013    source источник


Ответы (1)


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

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

person sfritter    schedule 19.09.2013
comment
В этом есть смысл. Я даже не приступил к тестированию производительности кластера осколков - прямо сейчас миграции/балансы используются для переноса нашего гигантского/монолитного единого сервера монго на другие осколки, после чего я сливаю и удаляю одиночный монго. сервер из кластера. Это первоначальная балансировка, которая требует времени, но этот сервер уже испытывает сильную нагрузку, поэтому мне было интересно, поможет ли преобразование его в набор реплик производительности. Остальные осколки уже являются наборами реплик. - person Tim Trinidad; 20.09.2013
comment
Какую версию MongoDB вы используете? Одна вещь, которую вы могли бы попытаться уменьшить влияние этой гигантской миграции, — это потребовать, чтобы записи, связанные с миграцией, распространялись на вторичные серверы в новых сегментах, прежде чем балансировщик сможет продолжить работу (см. _secondaryThrottle) Это замедлит миграцию и уменьшит нагрузку на ваш сервер. Если вы используете MongoDB версии 2.4 или новее, этот параметр включен по умолчанию, поэтому вы, возможно, уже используете его. - person sfritter; 20.09.2013
comment
Блокировки на самом деле разные, MongoDB будет использовать распределенную блокировку транзакций между двумя сегментами, чтобы обеспечить изоляцию, согласованность и надежность миграции фрагментов. - person Sammaye; 20.09.2013