Если vminsert настроен для записи в два vmstorage. И у

нас две ситуации:
1. vmstorage - не доступен. Рероутинг всё равно произойдет, независимо от настроек disableRerouting, на живой vmstorage и есть шанс его сложить доп дублирующей нагрузкой.
2. vmsorage - очень медленно обрабатывает запросы,
disableRerouting=true -> vminsert будет писать медленно или не сможет по лимитам в оба vmstorage и мы получаем не рабочую всю систему.
disableRerouting=false -> данные полетят с медленного на другой vmsotrage и есть шанс сложить его дублирующей нагрузкой.

Правильно я понимаю?
Если да, то получается есть шанс получить отказоустойчивую систему лишь при схеме что один vminsert пишет лишь в один vmstorage.

12 ответов

44 просмотра

Да, все рассуждения верны, кроме последнкго про отказоустойчивую систему. Если каждый vminsert будет писать в собственный vmstorage, то это приведет к следующим проблемам: - кластер будет плохо масштабироваться с добавлением новых vmstorage нод, т.к. на каждую vmstorage ноду будут записываться данные для всех рядов, если перед vminsert-нодами стоит обычный лоад-балансер. Т.е. на каждой vmstorage ноде будет часть данных со всех рядов. Это значит, что при увеличении количества активных рядов нужно будет увеличивать оперативную память в каждой vmstorage ноде, не зависимо от количества vmstorage нод в кластере. Этой проблемы нет, если vminsert пишет во все vmstorage ноды, т.к. при добавлении новых vmstorage нод активные ряды равномерно распределяются по всем vmstorage нодам. - если лоад-балансер отправляет запрос на vminsert, который пишет данные на недоступную vmstorage ноду, то возможны следущие варианты: 1) эти данные не попадут в vmstorage и, соответственно, не будут видны в результатах запросов до тех пор, пока vmstorage не станет доступной. 2) запрос "залипнет" на vminsert'e в ожидании возврата в строй связанного vmstorage; 3) запрос завершится с ошибкой и записываемы даннык могут быть утеряны, если клиент, отправляющий данные в кластер, не попытается переотправить их снова. Правильное решение для отказоустойчивого кластера - увеличить количество vmstorage нод и оставить на них достаточно свободных ресурсов, чтобы они могли справиться с врзросшей нагрузкой, когда заранее оговоренная часть vmstorage нод недоступна (например, одна vmstorage нода при rolling upgrade или пповедении профилактических работ). При этом желательно обеспечить задержку между возвратом в строй одной vmstorage ноды и остановкой следующей vmstorage нодой, чтобы кластер мог прийти в равновесное состояние. Пр этом, чем больше vmstorage нод в кластере, тем выше его отказоустойчивость при недоступности одной vmstorage ноды. Пара десятков vmstorage нод в кластере - самое оно :)

shazo- Автор вопроса

да, забыл момент что удобнее иметь полную копию данных на каждом vmstorage. И тогда получается что каждый vminsert пишет в каждый sotrage весь набор данных.

shazo
да, забыл момент что удобнее иметь полную копию да...

Такое решение не масштабируется с увеличением объема данных и активных рядов. Если для вас это норм, то, вероятно, лучше использовать несколько копий single-node вм. Это булет более эфыективно по потребляемым ресурсам cpu и ram

shazo- Автор вопроса
Aliaksandr Valialkin
Такое решение не масштабируется с увеличением объе...

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

shazo- Автор вопроса

для таких кейсов, есть ли возможность, что если vminsert не может записать в какой-то storage, не афектить запись в другой?

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

shazo
для таких кейсов, есть ли возможность, что если vm...

сейчас так и должно работать - если vminsert не может записать данные в какой-то vmstorage, то возможны два варианта: * если этот vmstorage вообще недоступен со стороны vminsert, то запись в остальные vmstorage ноды не прекращается. Просто в них начинает записываться больше данных, которые предназначались для недоступного vmstorage. Это справедливо как для включенного, так и для выключенного рероутинга (-disableRerouting={false|true}) * если vmstorage медленно принимает данные по сравнению с другими vmstorage-нодами, то это может привести к замедлению записи в остальные vmstorage ноды, если реруотинг отключен (-disableRerouting=true), т.к. vminsert будет ждать, пока не получится отправить данные в самую медленную vmstorage ноду, перед отправкой данных в остальные ноды. Если же рероутинг включен (-disableRerouting=false), то vminsert будет перенаправлять данные, которые не успевает принять самый медленный vmstorage, на другие ноды. Таким образом, общая скорость записи в кластер не пострадает

shazo- Автор вопроса
Aliaksandr Valialkin
сейчас так и должно работать - если vminsert не мо...

получается что в любом случае недоступный сторадж афектит либо замедлением, либо нагрузкой. Хочется что если не доступен, то дропать данные, а не перенаправлять на другие стораджи.

shazo- Автор вопроса
Aliaksandr Valialkin
если делать шардинг данных по рядам до записи их в...

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

shazo
получается что в любом случае недоступный сторадж ...

интересный режим работы. Думаю, можно добавить опцию для включения его в vminsert, чтобы при недоступности и/или снижении скорости работы одной из vmstorage нод данные, предназначенные для нее, просто дропались вместо рероутинга на другие ноды. Можете создать фичереквест на https://github.com/VictoriaMetrics/VictoriaMetrics/issues , чтобы увеличить шансы на добавление этой фичи? Вроде выглядит несложной в реализации

shazo- Автор вопроса
shazo
я не вижу как они решатся и в вашей схеме, конечно...

Вам не нужно вручную отслеживать копии данных - про это заботится vminsert, если указать ему -replicationFactor больше единицы - см. https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#replication-and-data-safety

Похожие вопросы

Обсуждают сегодня

Всем привет) Я попробовал турбо роутер октябрьский. Вроде доволен, но возникла проблемка) Бутстраповские модалки плодят .modal-backdrop элементы Если модалка открыта, должне...
Виталий
3
Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Как удалить health check в Consul? Казалось бы, это должно быть не сложно, но я не могу найти в документации ничего про это, только про добавление service с health check "в н...
Roman
2
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Хотя вроде админка показывает удаленные модели, да? @dblackCat
Виталий
2
Privet! Mozhet jesti ideji - nemogu sdelatj upload backup s filestore cerez WEB. Fail okolo 450mb, eto mozhet bitj prichinoi? Nemogu ponjatj..kak zagruzitj backup... Poluchaju...
Matiss 🤘 Black Oak IT 🌳 Batumi 🌴 Latvija
5
Нужно магазин с тильды на опен кат перенести Есть кто умеет? В лс
Magic
8
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
А кто знает в тейлоре до сих пор есть конфликты слагов или поправили уже?
Black Cat
5
Карта сайта