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

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

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

12 ответов

106 просмотров

Да, все рассуждения верны, кроме последнкго про отказоустойчивую систему. Если каждый 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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта