Раздражение MongoDB, как он восстанавливает баланс при добавлении новых узлов? - PullRequest
6 голосов
/ 05 июля 2011

Я пытаюсь понять MongoDB и концепцию шардинга. Если мы начнем с 2 узлов и раздела, скажем, данные клиента, основанные на фамилии, где данные от A до M хранятся на узле 1, а данные от N до Z хранятся на узле 2. Что происходит, когда мы хотим уменьшить масштаб и добавить больше узлов ? Я просто не понимаю, как это будет работать.

Ответы [ 2 ]

7 голосов
/ 05 июля 2011

Если у вас 2 узла, это не значит, что данные разбиты на 2 блока.Можно разделить, скажем, 10 блоков, и 6 из них находятся на сервере 1, а остальные находятся на сервере 2.

При добавлении другого сервера MongoDB может перераспределить эти блоки между узлами новой конфигурации

Вы можете прочитать больше в официальных документах:

5 голосов
/ 23 октября 2012

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

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

Когда вы добавляете новый узел в кластер, MongoDB перераспределяет эти чанки среди узлов новой конфигурации.Это небольшой отрывок, чтобы получить полное представление о том, как он восстанавливает баланс при добавлении нового узла, прочитайте главу 2 «Понимание шардинга» книги Кристины Чодров «Scaling MongoDB»

...