33
Cassandra архитектура кластера и особенности использования @dmitry_desu @clslrns

SECON.Посиделки #16: Cassandra (презентация)

Embed Size (px)

Citation preview

Page 1: SECON.Посиделки #16: Cassandra (презентация)

Cassandra архитектура кластера и особенности использования

@dmitry_desu @clslrns

Page 2: SECON.Посиделки #16: Cassandra (презентация)
Page 3: SECON.Посиделки #16: Cassandra (презентация)
Page 4: SECON.Посиделки #16: Cassandra (презентация)

• За время добавления новой ноды данные

журнала частично перезаписываются. В итоге

новая нода так и не включается в работу

!

!

!

!

!

• Удаление данных не освобождает пространство (уже освобождает -

usePowerOf2Sizes) !

• Избыточность

Page 5: SECON.Посиделки #16: Cassandra (презентация)

Cassandra @ iFunny2 кластера

24 ноды x16 Cores

x30GB RAM x320GB SSD x1Gbit LAN

!

!

Write Latency 1.5мс Read Latency 3.5мс

Page 6: SECON.Посиделки #16: Cassandra (презентация)
Page 7: SECON.Посиделки #16: Cassandra (презентация)

HBase, Cassandra, Riak, Redis, DynamoDB, Voldemort

Page 8: SECON.Посиделки #16: Cassandra (презентация)

• Доступность

• Линейная масштабируемость

• Нет единой точки отказа

• Настраиваемая целостность данных

• Поддержка и большое сообщество

Cassandra is a massively scalable open source

NoSQL database.

Page 9: SECON.Посиделки #16: Cassandra (презентация)
Page 10: SECON.Посиделки #16: Cassandra (презентация)

Кластер cassandra

Page 11: SECON.Посиделки #16: Cassandra (презентация)

Если записать ключ ‘foo’ c RF=3

Node3

Node4

Node5

Node6

Node2: fooNode1

Node7Node8Node9:foo

Node15: foo

Node14

Node13

Node12

Node11

Node10

Page 12: SECON.Посиделки #16: Cassandra (презентация)

Хранение данныхSSTable (Sorted String Table) – простой формат для

эффективного хранения большого числа пар типа “key-

value”, оптимизирован для обеспечения высокой

пропускной способности при выполнении операций

последовательного чтения и записи данных.

Page 13: SECON.Посиделки #16: Cassandra (презентация)

• Объединеняет sstables для улучшения производительности !

• Очищает sstables от удаленных данных !

• Перестраивает индексы

Compaction - периодический фоновый

процесс обслуживания хранимых данных

Page 14: SECON.Посиделки #16: Cassandra (презентация)

Compaction:

Size-tiered vs leveled

Page 15: SECON.Посиделки #16: Cassandra (презентация)

Size-tiered Compaction

Объединение 4-х sstable’ов одинакового размера

Page 16: SECON.Посиделки #16: Cassandra (презентация)

Size-tiered Compaction

Как выглядят sstables при большом количестве инсертов

Page 17: SECON.Посиделки #16: Cassandra (презентация)

Size-tiered Compaction

Проблемы

Данные могут оказаться на любом количестве

sstables. В худшем случае чтение будет происходить из всех имеющихся

!

Требуется слишком много дискового пространства

при компактинге и большом количестве deletes

Page 18: SECON.Посиделки #16: Cassandra (презентация)

Leveled

Основан на Google LevelDB. Sstables создаются

фиксированного размера и группируются по уровням.

Каждый новый уровень в 10 раз больше чем

предыдущий.

Page 19: SECON.Посиделки #16: Cassandra (презентация)

Преимущества Leveled • Leveled компактинг гарантирует, что 90% всех

чтений будут из одной sstable. В худшем случае

это будет чтение из 7ми sstables, что

соответствует 10TB хранимых данных.

Leveled

Size-tiered

Page 20: SECON.Посиделки #16: Cassandra (презентация)

Преимущества Leveled!

!

• Для компактинга необходимо 10xSstable_size

свободного пространства

!

• Только 10% занятого пространства будут заняты

устаревшими строками

Page 21: SECON.Посиделки #16: Cassandra (презентация)

Когда лучше использовать Leveled

• Read Latency очень важен

• Чтений больше чем записей

• Частые апдейты строк

• Много удалений

Page 22: SECON.Посиделки #16: Cassandra (презентация)

Когда лучше НЕ использовать Leveled

• Если leveled слишком сильно

нагружает дисковую подсистему

• Много записей в cassandra

• Строки не обновляются или

обновляются очень редко

Page 23: SECON.Посиделки #16: Cassandra (презентация)

Базовая конфигурацияcluster_name: 'Cluster1’ !

num_tokens: 256 !

authenticator: {AllowAllAuthenticator, PasswordAuthenticator} !

permissions_validity_in_ms: 2000 !

data_file_directories: - /cassandra/hdd1/data !

commitlog_directory: /cassandra/hdd2/commitlog !

disk_failure_policy: stop | ignore | best_effort

Page 24: SECON.Посиделки #16: Cassandra (презентация)

key_cache_size_in_mb: 500 row_cache_size_in_mb: 0 - seeds: “10.0.1.100, 10.0.2.100, 10.0.3.100” concurrent_reads: 32 = (16 * number_of_drives) concurrent_writes: 128 = (8*cores) listen_address: <%= ipaddress %> in_memory_compaction_limit_in_mb: 256 concurrent_compactors: 4 multithreaded_compaction: false compaction_throughput_mb_per_sec: 128

Page 25: SECON.Посиделки #16: Cassandra (презентация)

Обслуживание и мониторинг: статус

кластера> nodetool status

Page 26: SECON.Посиделки #16: Cassandra (презентация)

> nodetool cfstats

Keyspace: KeySpace1 Read Count: 4450035318

Read Latency: 1.118505269366269 ms. Write Count: 3022969733

Write Latency: 0.02623819108644711 ms. Pending Tasks: 0 Table: user_content

SSTable count: 12 SSTables in each level: [1, 0, 11, 0, 0, 0, 0, 0, 0] Number of keys (estimate): 892032 Local read count: 323547

Local read latency: 1.248 ms Local write count: 20194660

Local write latency: 0.017 ms Bloom filter space used, bytes: 710616 Compacted partition minimum bytes: 61

Compacted partition maximum bytes: 2346799 !

Статистика по таблицам

Page 27: SECON.Посиделки #16: Cassandra (презентация)

> nodetool compactionstats

pending tasks: 7compaction type keyspace column family completed total unit progressCompaction Test Message 161257707087 2475323941809 bytes 6.51%

Статистика по компакшнам

Page 28: SECON.Посиделки #16: Cassandra (презентация)

> nodetool tpstatsPool Name Active Pending Completed Blocked All time blockedReadStage 0 1 3378502921 0 0RequestResponseStage 0 0 4917402340 0 0MutationStage 0 0 2367194409 0 0ReadRepairStage 0 0 164215492 0 0ReplicateOnWriteStage 0 0 0 0 0GossipStage 0 0 14227445 0 0AntiEntropyStage 0 0 0 0 0!Message type DroppedRANGE_SLICE 0READ_REPAIR 0PAGED_RANGE 0BINARY 0READ 289MUTATION 114_TRACE 2898REQUEST_RESPONSE 0COUNTER_MUTATION 0

Статистика по операциям

Page 29: SECON.Посиделки #16: Cassandra (презентация)

Datastax OpsCenter

Page 30: SECON.Посиделки #16: Cassandra (презентация)

Features

• съедает проц, а не диск — нужно больше ядер • ssd - better, но не критично • Java heap == 8 GB • разные диски для данных и commit log • стандартный GC

Page 31: SECON.Посиделки #16: Cassandra (презентация)

Проблемы, которые могут вас затронуть

• corrupted sstable! nodetool scrub

• high read latency and/or dropped messages!

мониторинг добавить ноды

пересмотреть модель данных • gc, gc, gc, gc!

Java heap == 8GB мониторинг

пересмотреть модель данных !

Page 32: SECON.Посиделки #16: Cassandra (презентация)

Проблемы, которые могут вас затронуть!

• host/cassandra/network down!!

hinted handoff - журнал, позволяющий восстановить данные при небольших

отказах nodetool rebuild - пересоздание ноды, актуальные данные запрашиваются из

кластера nodetool repair - ищет и устраняет

неконсистентность данных read repair - механизм, который

восстанавливает потерянные данные при чтениях с нескольких нод

!

Page 33: SECON.Посиделки #16: Cassandra (презентация)

Спасибо