Виртуальные узлы Кассандры - PullRequest
1 голос
/ 21 января 2020

Хотя об этом спрашивают много раз и отвечают много раз, я все равно не нашел хорошего ответа. Ни в форумах, ни в документах Cassandra.

Как работают виртуальные узлы?

Предположим, что узел имеет 256 виртуальных узлов. И документы говорят, что они распределены случайным образом. (уберите, как это «случайно» сделано ... У меня есть еще один, более срочный вопрос):

  1. Это верно, что каждый узел Кассандры («физический») на самом деле ответственен за несколько различных места на ринге? (на 256 мест)? Означает ли это, что «физический» узел как бы «распространяется» по всему кругу?

  2. Как в этом случае работает перебалансировка? Если я добавлю новый узел? Кольцо получит дополнительные 256 узлов. Как эти дополнительные узлы будут делить данные со старыми узлами? Появятся ли они в основном как дополнительные «велосипедные спицы», случайно распределенные по всему кольцу?

Много информации о inte rnet, но никто не дает четкого объяснения .. .

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Vnodes разбивают доступный диапазон токенов на меньшие диапазоны, определяемые настройкой num_tokens в файле cassandra.yaml. Диапазоны vnode случайным образом распределены по кластеру и, как правило, не являются смежными. Если мы используем большое число для num_tokens, чтобы разбить диапазоны токенов, случайное распределение означает, что менее вероятно, что у нас будут горячие точки. Используя статистические вычисления, точка, где все кластеры любого размера всегда имели хороший баланс диапазона токенов, была когда было использовано 256 узлов. Следовательно, значение по умолчанию num_tokens 256 было рекомендовано сообществом для предотвращения горячих точек в кластере.

Ответ 1: - Это диапазон токенов, основанный на num_tokens. если вы установили 256, вы получите 256 диапазонов токенов, что по умолчанию.

Ответ 2: - Да, когда вы добавляете или удаляете узлы, токены снова будут распределяться в кластере. на основе конфигураций vnodes.

Более подробную информацию вы можете найти здесь https://docs.datastax.com/en/ddac/doc/datastax_enterprise/dbArch/archDataDistributeVnodesUsing.html

2 голосов
/ 21 января 2020

Позволяет Нет SQL ответ правильный. Смотрите также { ссылка }. Я только добавлю еще несколько комментариев:

  1. Да, «физический» узел распределен по диапазону токенов.
  2. Как объяснено в ссылке, любой новый узел займет 256 новых диапазонов токенов, разделяя некоторые из существующих. Никакой другой перебалансировки нет, она зависит от случайности для достижения некоторой перебалансировки, поэтому она использует относительно большое (256) число токенов на узел.

Стоит отметить, что есть и другой вариант. Вы можете запустить vnode с меньшим количеством токенов на узел (4-8) с помощью алгоритма распределения токенов. Любые новые токены не будут распределяться случайным образом, будет использоваться жадный алгоритм, чтобы новые токены создавали распределение, оптимизирующее нагрузку на данное пространство ключей. Он просто разделит пополам диапазоны токенов, содержащие большую часть данных. Так как это не случайно, он может работать с меньшим количеством токенов (4-8). Это не очень актуально для небольших кластеров, но для 100+ узлов это может быть.

См. https://www.datastax.com/blog/2016/01/new-token-allocation-algorithm-cassandra-30 и https://thelastpickle.com/blog/2019/02/21/set-up-a-cluster-with-even-token-distribution.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...