yopp
16.02.2018
16:50:37
И включал балансировщик
Max
16.02.2018
16:50:54
то есть останавливаем балансер и пилим.
понял.
yopp
16.02.2018
16:51:28
Балансировщик лучше всегда выключать, когда вы какие-то изменения вносите в правила или настройки шарда
Max
16.02.2018
16:51:39
а те чанки, что уехали в Азию, можно оставить там же и там же распилить по splitAt, чтобы не гонять уже перегнанное
так?
Google
yopp
16.02.2018
16:52:06
Можете из распилить и добавить ренджи по тому, что там должно остаться, да
Max
16.02.2018
16:54:37
спасибо
я вот прям практически бесконечно признателен за ликбез.
тесты в пятницу вечером ставить не буду, уже дождусь программеров в начале рабочей недели.
Dmitrii
17.02.2018
14:45:03
блин вот монго разрабы красавчики, недавно changefeed добавили, теперь еще и мультидокументные транзакции обещают
Sergey
17.02.2018
20:54:08
Всем привет, был rs с тремя нодами, primary прилег, осталось два secondary и ни один не хочет становится primary, как то можно принудительно сказать одной из нод: ты теперь primary?
yopp
17.02.2018
21:01:11
Заведите арбитра
Sergey
17.02.2018
22:20:08
2018-02-17T22:05:40.374+0000 I COMMAND [ftdc] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after dur: 0, after extra_info: 1600, after globalLock: 1600, after locks: 1600, after network: 1600, after opLatencies: 1600, after opcounters: 1600, after opcountersRepl: 1600, after repl: 1600, after security: 1600, after storageEngine: 1600, after tcmalloc: 1600, after wiredTiger: 1600, at end: 1600 }
можно понять что происходит по этому отрывку лога?
меняются только цифры, похоже на репликацию или восстановление из оплога
yopp
17.02.2018
22:35:20
Тормозит команда serverStatus, судя по всему
Праймари то выбрался?
Sergey
18.02.2018
07:40:19
Я на живой ноде из клатсера выбросил две дрвух ноды и он стал primary, потом поднял их и они тупили в логах в командой выше, ждать надело, утром эти ноды стали доступны и я их добавил обратно в кластер (ну и они подянлись со статусом OTHER до добавления) похоже на то что нужно все таки арбиторов добавить
Yura
18.02.2018
10:03:20
Хмм, кластер из трех нод? Я бы не стал больше одной ноды выбрасывать за раз. И это безотносительно MongoDB. Просто кворум должен быть всегда живым.
Alex
18.02.2018
10:10:16
Привет, нубский вопрос: как монга ведет себя в продакшине в качестве основного хранилища, на что стоит обратить особое внимание? Заранее спасибо
Google
Alex
18.02.2018
10:15:03
Или хотя бы подскажите куда писать менее технические вопросы по монге
yopp
18.02.2018
10:18:06
Sergey
18.02.2018
10:19:07
Alex
18.02.2018
10:20:35
yopp
18.02.2018
10:21:15
У нас тут всё принято
Alex
18.02.2018
10:23:58
Есть какие либо best practice при проектировании структур данных в монго?
yopp
18.02.2018
10:25:42
От кейса зависит. Но общий смысл: пишите так, ка будете читать.
Alex
18.02.2018
10:30:25
Есть такая штука как $ref, насколько я понял можно сослаться на документ в другой коллекции, что очень похоже на реляционку. Они быстрые, либо сразу отмести их в сторону?
yopp
18.02.2018
10:30:45
Это просто формат хранения ссылок
Их скорость будет равна скорости поиска по указанному в ссылке ключу в указанной в ссылке коллекции.
Alex
18.02.2018
10:36:05
В общем монга просто будет делать подзапросы, а это синтаксический сахар, и рассчитывать что оно это делает быстрее обычных запросов - не стоит?
yopp
18.02.2018
10:36:46
Она ничего не будет делать
Это будет делать драйвер, если он умеет автоматически разрешать ссылки
Может и не уметь, причём намеренно.
Alex
18.02.2018
10:40:45
То бишь чем больше нормализации тем медленней оно будет?
yopp
18.02.2018
10:43:25
Ну можно с натяжкой и так сказать
Как и с полной денормализацией
Но абстрактные проблемы имеют абстрактное решение. Какую задачу вы решить хотите?
Alex
18.02.2018
10:54:21
Пока я пытаюсь понять: подходит ли мне монга. Небольшой проект, можно сказать стартап. Предполагаю чтение из бд запросом по юзерам, и если мыслить в рамках реляционки, + нескольких зависимых таблиц. Плюс попутно раз в минуту/пол - 100+ записей в таблицу юзеров (апдейт).
Google
Alex
18.02.2018
10:55:06
Точнее апдейт 100 записей
И с потенциалом на увеличение количества апдейтов и их интенсивность
В любом случае спасибо за ответы, наверное стоит погонять сначала на соответствующей структуре данных...
yopp
18.02.2018
11:11:01
Да
Про удаленные сообщения. Подобный уровень аргументаций тут не приветствуется. Если вы считаете что монга н подходит для чьего-то кейса, подробно объясните чем другое решение лучше.
Max
18.02.2018
15:02:10
@dd_bb я опять тут со своими чанками :)
подскажи, плиз, а как их проверять можно?
суть в чем:
я вроде сделал так, как вы сказали:
- потушил балансер
- удалил все TagRange , кроме местных.
- сделал splitAt()
- добавил addTagRange зону (точнее сразу все)
- включил балансер
оно чтото делает, изменилось кол-во чанков, но в config.chunks все равно лежат странные чанки.
не добралось? не распилилось?
как понять, что наступило счастье? или только выборку по коллекции, чтобы проверить, что там нет ненужных стран?
yopp
18.02.2018
15:03:29
Странные чанки в каком смысле странные?
Max
18.02.2018
15:06:30
В том, что там ip разбросаны
mongos> db.chunks.find()
{ "_id" : "DBNAME.COLLNAME-country_\"ae\"ip_\"109.177.115.222\"", "ns" : "dev_0.COLLNAME", "min" : { "country" : "ae", "ip" : "109.177.115.222" }, "max" : { "country" : "ae", "ip" : "109.177.161.138" }, "shard" : "DSPRSv01", "lastmod" : Timestamp(1, 39), "lastmodEpoch" : ObjectId("5a86a96c8fb2d1890910fb94") }
я же так понимаю, что чанки после указания splitAt должны пересоздаться и быть непосредственно к стране привязаны (country)
yopp
18.02.2018
15:09:38
Нееет
Чанки не «слепляются» :)
Max
18.02.2018
15:10:25
тогда пошёл читать дальше
мне непонятно, как отследить состояние
то есть вот splitAt вернул мне ок - и дальше что? :)
где посмотреть, над чем думает балансер?
yopp
18.02.2018
15:11:06
Вы через splitAt порезали чанки по нужным вам для зонирования границам
splitAt только делит чанки
Балансировка и разделение чанков — разные механизмы
Устроить чтоли мастеркласс по шардингу
Max
18.02.2018
15:13:43
splitAt должен порезать существующие чанки на 2 части по той query, что я задал.
то есть чанков должно стать больше
блин, пойду дальше опыты ставить
не хватает знаний, чтобы правильно вопрос задать
спасибо!
yopp
18.02.2018
15:13:59
Google
yopp
18.02.2018
15:15:10
Так как у вас были ренжи для балансировки которые требуют чтоб чанки не включали в себя больше одной страны, но такие чанки существовали — балансировщик скорее всего не мог удовлетворить условие
Сейчас по идее ситуация должна выправиться
Admin
Max
18.02.2018
15:15:40
yopp
18.02.2018
15:15:43
И чанки по вашим правилам только со страной должны начать ехать туда, куда вам надо
Max
18.02.2018
15:16:03
как понять, завершился ли процесс разделения чанков? в db.currentOp() ничего интересного не заметил.
yopp
18.02.2018
15:16:19
Он сразу завершается
Когда splitAt возвращает ответ
Max
18.02.2018
15:17:34
тогда странно
он вернулся практически моментально, хотя там 23кк документов на данный момент.
хотяяя
пойду поковыряюсь внутри шарда, гляну, что там за данные
yopp
18.02.2018
15:18:04
Это запись в db.chunks
Удалить один чанк и добавить два других это операция требующая миллесекунды
Когда вы делите чанк с вашим документами вообще ничего не происходит
Каждый шард это просто коллекция содержащая часть документов. Эта совершенным обычная коллекция
Max
18.02.2018
15:22:06
понял, спасибо
а как тогда правильно посмотреть-проверить, чтобы внутри одного чанка не было различных стран?
Получается, что надо изучить config.chunks, ну или sh.status(true) ?
Вот чанк, к примеру:
{ "country" : "ae", "ip" : "86.96.73.99" } —» { "country" : "ae", "ip" : "86.97.11.106" } on : DSPRSv01 Timestamp(1, 142)
я же правильно понимаю, что в данном чанке только одна страна?
yopp
18.02.2018
15:22:13
Чанк это виртуальная сущность которая необходима для того чтоб определить какая часть документов в какой коллекции находится
Max
18.02.2018
15:23:26
Тогда, судя по всему, у меня, с вашей помощью, все получилось
время откупоривать :)
yopp
18.02.2018
15:23:48
Продолжая: Единственная операция условно взаимодействующая с документам — балансировка
Google
yopp
18.02.2018
15:24:08
Балансировщик копирует документы из одной коллекция в другую
Max
18.02.2018
15:24:10
А может быть и нет
{ "country" : "es", "ip" : "999.999.999.999" } —» { "country" : "et", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 173)
{ "country" : "et", "ip" : "000.000.000.000" } —» { "country" : "et", "ip" : "999.999.999.999" } on : DSPRSv01 Timestamp(1989, 174)
{ "country" : "et", "ip" : "999.999.999.999" } —» { "country" : "fi", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 175)
yopp
18.02.2018
15:25:18
Max
18.02.2018
15:32:06
Тогда не понимаю, откуда берутся чанки вида
{ "country" : "in", "ip" : "999.999.999.999" } —» { "country" : "io", "ip" : "000.000.000.000" } on : DSP-SG-shard01 Timestamp(1989, 263)
попробую на тесте повторить.
yopp
18.02.2018
15:35:52
Max
18.02.2018
15:37:13
sh.splitAt("DBNAME.COLLNAME", {country: 1, ip: 1})
yopp
18.02.2018
15:38:46
Так вам надо составить список стран и по каждой выполнить запрос, чтоб подлить по началу. Типа country: io, ip: MinKey
Я могу ошибаться, возможно надо по MaxKey делить, проверьте локально
(Есть mlaunch в mtools для быстрого разворачивания тестового стола для шардинга)
Max
18.02.2018
15:41:04
Ага, спасибо
пойду почитаю, потому что... гдет пазлл в голове не досложился
А замена Зоны через removeTagRange + addTagRange должно заставить чанки переезжать?
я тут взял для теста одну из зон и поменял ей зону с USA на ASIA, то есть ей в другой шард надо ехать.
по зонам там явно есть куски без посторонних стран:
{ "country" : "za", "ip" : "000.000.000.000" } —» { "country" : "za", "ip" : "41.114.147.104" } on : DSPRSv01 Timestamp(1989, 612)
{ "country" : "za", "ip" : "41.114.147.104" } —» { "country" : "za", "ip" : "999.999.999.999" } on : DSPRSv01 Timestamp(1989, 613)
{ "country" : "za", "ip" : "999.999.999.999" } —» { "country" : "zm", "ip" : "000.000.000.000" } on : DSPRSv01 Timestamp(1989, 614)
однако у них DSPRSv01 остаётся (это штаты).
mongos> sh.getBalancerState()
true