MongoDB осушает осколок, но балансировщик не работает?(removeShard занимает слишком много времени) - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь уменьшить кластер с 4 осколками, который в настоящее время имеет 8 осколков.

Я начал с восьмого шарда и попытался сначала удалить его.

db.adminCommand( { removeShard : "rs8" } );
----
{
    "msg" : "draining ongoing",
    "state" : "ongoing",
    "remaining" : {
        "chunks" : NumberLong(1575),
        "dbs" : NumberLong(0)
    },
    "note" : "you need to drop or movePrimary these databases",
    "dbsToMove" : [ ],
    "ok" : 1
}

Итак, 1575 чанков нужно перенести на остальную часть кластера.

Но при работе sh.isBalancerRunning() я получаю значение false, а также вывод sh.status() выглядит следующим образом:

  ...
  ...

  active mongoses:
        "3.4.10" : 16
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
NaN
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                59 : Success
                1 : Failed with error 'aborted', from rs8 to rs1
                1 : Failed with error 'aborted', from rs2 to rs6
                1 : Failed with error 'aborted', from rs8 to rs5
                4929 : Failed with error 'aborted', from rs2 to rs7
                1 : Failed with error 'aborted', from rs8 to rs2
                506 : Failed with error 'aborted', from rs8 to rs7
                1 : Failed with error 'aborted', from rs2 to rs3
...

Таким образом, балансировщик включен , но не работает .Но есть осушающий осколок (rs8), который удаляется, поэтому я думаю, что балансировщик должен постоянно работать, верно?Это не так, как видно из журналов, которые я предоставил выше.

Кроме того, процесс занимает невероятно много времени: за прошедший почти день количество оставшихся кусков уменьшилось только на 10 кусков, с 1575 до 1565 !Таким образом, мне понадобятся месяцы, чтобы уменьшить кластер из 8 экземпляров в кластер из 4 экземпляров!

Также кажется, что MongoDB сама не прекращает запись в осушающий фрагмент, так что яЯ испытываю, что количество кусков увеличивается, может быть, почти сводит на нет их уменьшение?

Любая помощь с благодарностью!
Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

РЕДАКТИРОВАТЬ

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


Хорошо, поэтому отвечаю на мой вопрос здесь,

Я не мог заставить работать автоматическую балансировку так быстро, как хотел, каждый день я наблюдал, что от 5 до 7 кусков были бы перенесены (то есть весь процесс занял бы годы!)

Что я сделал, чтобы вроде преодолеть эту проблему, так это вручную использовал команду moveChunk .

В общем, я сделал следующее:

while 'can still sample':
    // Sample the 8th shard for 100 documents
    db.col.aggreagte([{$sample: {size: 100}}])

    For every document:
        db.moveChunk(namespace, {shardKey: value}, `rs${NUM}`);

Таким образом, я вручную перемещаю куски из 8-го шарда в первые 4 шарда (один минус, так как нам нужен балансировщик, и только один шард может сливаться в каждый момент , некоторые из этих перенесенных фрагментов будут снова автоматически перенесены в осколки 5-7, которые я позже тоже хочу удалить, это приводит к тому, что процесс занимает больше времени, какие-либо решения?).

Поскольку восьмой осколок истощает , он не будет снова заполнен балансировщиком, и теперь весь процесс намного быстрее, около 350-400 кусков в день .Так что, надеюсь, каждый осколок займет максимум 5 дней, а затем весь размер займет около 20 дней!

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

...