Для понимания я установил кластер из 4 узлов, используя последнюю / лучшую (выпущенную) версию Cassandra. Четыре узла были запущены последовательно с использованием почти полностью стандартных настроек и, похоже, обмениваются данными правильно.
Затем я создал следующую схему:
CREATE KEYSPACE first WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '1'
};
Создайте простую таблицу с 5 столбцами и добавьте ~ 100 тыс. Строк данных. Все хорошо. Данные доступны от каждого клиента, поэтому я думаю, что они распределены равномерно.
Итак, я изучаю стратегию резервного копирования и начинаю возиться со снимками и так далее. После запуска nodetool snapshot
на каждой машине я хочу знать, что она создала. Я подхожу к первой машине и смотрю / var / lib / cassandra / data / первый и увидите, что там пусто. Хм .. вторая машина .. то же самое .. третья .. наконец, на 4-й машине я вижу файлы в папке данных и каталог моментальных снимков.
Бег nodetool ring
показывает, что каждая система владеет примерно 25%, но грузить сильно предвзято относится к одной системе, которая (кажется) получила все данные.
Все ли данные действительно на этой машине? Какой шаг я пропустил в настройке?
Кассандра назначает диапазон токенов каждому узлу в кластере.
Поскольку в вашей конфигурации 4 узла, каждому узлу назначается 25% токенов.
Каждые вставить запрос будет сгенерирован хэш для данных этой строки. Хеш всегда будет принадлежать один и только один диапазонов токенов, поэтому данные этой строки хранятся в этом конкретном физическом узле.
В вашем случае в большинстве случаев запросы вставки имеют одинаковый или аналогичный ключ раздела, ведущий к одному и тому же физическому узлу, то есть узлу 4.
Подробнее смотрите веб-сайт datastax, объясняющий разделение.