Как восстановить баланс и освободить место на диске после добавления узла Cassandra

#cassandra

Вопрос:

У меня есть 12-узловой кластер cassandra, который имеет высокую нагрузку на данные, а дисковое пространство почти приближается к полной емкости. Я расширил кластер, добавив 1 узел и планируя добавить еще пару. Я мог бы обнаружить, что нагрузка на данные уменьшилась после добавления нового узла. Однако пространство на диске не уменьшилось. Я боюсь запускать ремонт nodetool, так как для этого может потребоваться дополнительное место на диске, а доступного места может оказаться недостаточно. Есть предложения использовать очистку nodetool, похоже, это также приведет к временному увеличению дискового пространства. https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/tools/toolsCleanup.html

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

Ответ №1:

К сожалению, nodetool cleanup это единственный способ, которым вы можете удалить данные, которые больше не принадлежат узлу после добавления узлов в кластер, чтобы освободить место на диске.

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

Вы можете обойти эту проблему для больших SSTable, которые настроены SizeTieredCompactionStrategy , разделив их на файлы меньшего размера на другом сервере с помощью этого sstablesplit инструмента. Я задокументировал инструкции в https://community.datastax.com/questions/6415/. Ура!

Комментарии:

1. Я получаю приведенную ниже ошибку при попытке выполнить команду sstablesplit. Я запускаю это из контейнера docker — «ПРЕДУПРЕЖДАЮ 06:13:26 Только 33,570 гигабайт бесплатно на всех томах данных. Подумайте о том, чтобы увеличить пропускную способность вашего кластера или удалить устаревшие моментальные снимки, Пропустив файл, не являющийся стабильным /opt/cassandra» Нет допустимых sstables для разделения

2. Версия Кассандры-3.9

3. Это ошибка. Это предупреждение ( WARN ). Вам нужно место на диске для повторного сжатия файлов. Например, если вы разделяете файл объемом 100 ГБ, вам потребуется минимум 100 ГБ (предпочтительно 110 ГБ), потому что для записи новых файлов требуется пространство. Ура!

4. После увеличения дискового пространства предупреждение исчезает. Но он по-прежнему не распознает sstable

5. /usr/bin/sstablesplit —отладка —без снимка /opt/кассандра Пропускает файл без sstable /opt/кассандра Нет допустимых sstables для разделения /usr/bin/sstablesplit —отладка —без снимка /opt/кассандра/mc-3264-Исключение с большим индексом.db в потоке «основной» java.lang. Ошибка утверждения: Неизвестное пространство ключей выбирается в org.apache.cassandra.db.Пространство ключей. <инициализация>(Пространство ключей. java:309) в org.apache.cassandra.db.Пространство ключей.открыто(Пространство ключей.java:127) в org.apache.cassandra.db.Пространство ключей.Открытые таблицы(Пространство ключей.java:110) в org.apache.cassandra.инструменты. StandaloneSplitter.main(StandaloneSplitter.java:114)