Определение степени заполнения кластера Кассандра - PullRequest
8 голосов
/ 24 декабря 2011

Я только что импортировал много данных в кластер Cassandra с 9 узлами, и прежде чем создать новую семью ColumnFamily с еще большим количеством данных, я бы хотел определить, насколько заполнен мой кластер (с точки зрения использования памяти).,Я не слишком уверен, что мне нужно смотреть.Я не хочу импортировать еще 20-30 ГБ данных и понимаю, что мне нужно было добавить еще 5-6 узлов.

Короче говоря, я понятия не имею, если у меня сейчас слишком мало / много узлов для того, что находится в кластере.

Любая помощь будет принята с благодарностью:)

$ nodetool -h 192.168.1.87 ring
Address         DC          Rack        Status State   Load            Owns    Token                                       
                                                                               151236607520417094872610936636341427313     
192.168.1.87    datacenter1 rack1       Up     Normal  7.19 GB         11.11%  0                                           
192.168.1.86    datacenter1 rack1       Up     Normal  7.18 GB         11.11%  18904575940052136859076367079542678414      
192.168.1.88    datacenter1 rack1       Up     Normal  7.23 GB         11.11%  37809151880104273718152734159085356828      
192.168.1.84    datacenter1 rack1       Up     Normal  4.2 GB          11.11%  56713727820156410577229101238628035242      
192.168.1.85    datacenter1 rack1       Up     Normal  4.25 GB         11.11%  75618303760208547436305468318170713656      
192.168.1.82    datacenter1 rack1       Up     Normal  4.1 GB          11.11%  94522879700260684295381835397713392071      
192.168.1.89    datacenter1 rack1       Up     Normal  4.83 GB         11.11%  113427455640312821154458202477256070485     
192.168.1.51    datacenter1 rack1       Up     Normal  2.24 GB         11.11%  132332031580364958013534569556798748899     
192.168.1.25    datacenter1 rack1       Up     Normal  3.06 GB         11.11%  151236607520417094872610936636341427313

-

# nodetool -h 192.168.1.87 cfstats
  Keyspace: stats
  Read Count: 232
  Read Latency: 39.191931034482764 ms.
  Write Count: 160678758
  Write Latency: 0.0492021849459404 ms.
  Pending Tasks: 0
    Column Family: DailyStats
    SSTable count: 5267
    Space used (live): 7710048931
    Space used (total): 7710048931
    Number of Keys (estimate): 10701952
    Memtable Columns Count: 4401
    Memtable Data Size: 23384563
    Memtable Switch Count: 14368
    Read Count: 232
    Read Latency: 29.047 ms.
    Write Count: 160678813
    Write Latency: 0.053 ms.
    Pending Tasks: 0
    Bloom Filter False Postives: 0
    Bloom Filter False Ratio: 0.00000
    Bloom Filter Space Used: 115533264
    Key cache capacity: 200000
    Key cache size: 1894
    Key cache hit rate: 0.627906976744186
    Row cache: disabled
    Compacted row minimum size: 216
    Compacted row maximum size: 42510
    Compacted row mean size: 3453

-

[default@stats] describe;
Keyspace: stats:
  Replication Strategy: org.apache.cassandra.locator.SimpleStrategy
  Durable Writes: true
    Options: [replication_factor:3]
  Column Families:
    ColumnFamily: DailyStats (Super)
      Key Validation Class: org.apache.cassandra.db.marshal.BytesType
      Default column value validator: org.apache.cassandra.db.marshal.UTF8Type
      Columns sorted by: org.apache.cassandra.db.marshal.UTF8Type/org.apache.cassandra.db.marshal.UTF8Type
      Row cache size / save period in seconds / keys to save : 0.0/0/all
      Row Cache Provider: org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider
      Key cache size / save period in seconds: 200000.0/14400
      GC grace seconds: 864000
      Compaction min/max thresholds: 4/32
      Read repair chance: 1.0
      Replicate on write: true
      Built indexes: []
      Column Metadata:
       (removed)
      Compaction Strategy: org.apache.cassandra.db.compaction.LeveledCompactionStrategy
      Compression Options:
        sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor

1 Ответ

12 голосов
/ 29 марта 2012

Очевидно, что есть два типа памяти - диск и оперативная память.Я предполагаю, что вы говорите о дисковом пространстве.

Во-первых, вы должны выяснить, сколько места вы в настоящее время используете на узел.Проверьте использование на диске диска cassandra data dir (по умолчанию /var/lib/cassandra/data) с помощью этой команды: du -ch /var/lib/cassandra/data Затем вы должны сравнить это с размером вашего диска, который можно найти с помощью df -h.Учитывайте только запись для результатов df для диска, на котором находятся данные вашей кассандры, проверив столбец Монтировано на.

Используя эту статистику, вы сможете рассчитать, насколько полно в% раздел данных кассандры.,Обычно вы не хотите приближаться к 100%, потому что обычные процессы уплотнения cassandra временно используют больше дискового пространства.Если вам не хватает, то узел может быть пойман с полным диском, который может быть болезненным для решения (как я отмечаю, я иногда сохраняю «балластный» файл нескольких гигабайт, который я могу удалить на всякий случай, если янужно открыть дополнительное пространство).Как правило, я обнаружил, что безопасное использование диска в диапазоне 0,8 не более 70%.

Если вы используете более новую версию cassandra, то я бы рекомендовал использовать стратегию Leveled Compactionвыстрел, чтобы уменьшить временное использование диска.Вместо того, чтобы потенциально использовать вдвое больше дискового пространства, новая стратегия будет максимально использовать 10x небольшого фиксированного размера (5 МБ по умолчанию).

Вы можете прочитать больше о том, как сжатие временно увеличивает использование диска на этом превосходномсообщение в блоге от Datastax: http://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra В нем также объясняются стратегии уплотнения.

Итак, для небольшого планирования емкости вы можете определить, сколько еще места вам понадобится.С коэффициентом репликации 3 (что вы используете выше) добавление 20-30 ГБ необработанных данных добавит 60-90 ГБ после репликации.Разделите между своими 9 узлами, это может быть 3GB больше на узел.Прибавляет ли добавление такого вида использования диска на узел слишком близко к наличию полных дисков?Если это так, вы можете рассмотреть возможность добавления большего количества узлов в кластер.

Еще одно замечание: загрузка ваших узлов не очень равномерная - от 2 ГБ до 7 ГБ.Если вы используете ByteOrderPartitioner поверх случайного, это может вызвать неравномерную загрузку и «горячие точки» в вашем кольце.Вы должны рассмотреть возможность использования случайных, если это возможно.Другая возможность может заключаться в том, что у вас есть дополнительные данные, о которых нужно позаботиться (на ум приходят хинты и снимки).Попробуйте очистить его, запустив nodetool repair и nodetool cleanup на каждом узле по одному (обязательно прочитайте, что они делают в первую очередь!).

Надеюсь, это поможет.

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