2015-11-09 2 views
2

У меня есть кластер cassandra 2.1.8 с 16 узлами (Centos 6.6, 1x4core xeon, 32Gb RAM, 3x3Tb HDD, java 1.8.0_65) и пытается добавить Еще 16, один за другим, но застрял с первым.cassandra 2.1.8, добавление новых узлов (ов), из памяти

После запуска процесса CASSANDRA на новом узле, 16 потоков из ранее существующих узлов для вновь добавленного узла начинают:

nodetool netstats |grep Already 
Receiving 131 files, 241797656689 bytes total. Already received 100 files, 30419228367 bytes total 
Receiving 150 files, 227954962242 bytes total. Already received 116 files, 29078363255 bytes total 
Receiving 127 files, 239902942980 bytes total. Already received 103 files, 29680298986 bytes total 
    ... 

новый узел находится в «присоединение» состояния (последней строки):

UN ...70 669.64 GB 256 ? a9c8adae-e54e-4e8e-a333-eb9b2b52bfed R0  
UN ...71 638.09 GB 256 ? 6aa8cf0c-069a-4049-824a-8359d1c58e59 R0  
UN ...80 667.07 GB 256 ? 7abb5609-7dca-465a-a68c-972e54469ad6 R1 
UJ ...81 102.99 GB 256 ? c20e431e-7113-489f-b2c3-559bbd9916e2 R2 

в течение нескольких часов процесса присоединения выглядит нормально, но после того, что процесс Cassandra на новом узле умирает с ОЫМ исключением:

ERROR 09:07:37 Exception in thread Thread[Thread-1822,5,main] 
java.lang.OutOfMemoryError: Java heap space 
     at org.apache.cassandra.streaming.compress.CompressedInputStream$Reader.runMayThrow(CompressedInputStream.java:167) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_65] 
java.lang.OutOfMemoryError: Java heap space 
     at org.apache.cassandra.streaming.compress.CompressedInputStream$Reader.runMayThrow(CompressedInputStream.java:167) 
     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
     at java.lang.Thread.run(Thread.java:745) 
java.lang.OutOfMemoryError: Java heap space 
     at org.apache.cassandra.streaming.compress.CompressedInputStream$Reader.runMayThrow(CompressedInputStream.java:167) 
     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
     at java.lang.Thread.run(Thread.java:745) 
java.lang.OutOfMemoryError: Java heap space 
     at org.apache.cassandra.streaming.compress.CompressedInputStream$Reader.runMayThrow(CompressedInputStream.java:167) 
     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
     at java.lang.Thread.run(Thread.java:745) 

Я сделал 6 или 7 попыток с CMS и G1 GC, MAX_HEAP_SIZE от 8G (по умолчанию) до 16G, без везения. Кажется, Cassandra поймать OOM из-за отказ в куче в defferent местах:

RROR [CompactionExecutor:6] 2015-11-08 04:42:24,277 CassandraDaemon.java:223 - Exception in thread Thread[CompactionExecutor:6,1,main] 
java.lang.OutOfMemoryError: Java heap space 
     at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:75) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:70) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:48) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.io.util.CompressedPoolingSegmentedFile.createPooledReader(CompressedPoolingSegmentedFile.java:95) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.io.util.PoolingSegmentedFile.getSegment(PoolingSegmentedFile.java:62) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput(SSTableReader.java:1822) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart(IndexedSliceReader.java:107) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.columniterator.IndexedSliceReader.<init>(IndexedSliceReader.java:83) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader(SSTableSliceIterator.java:65) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.columniterator.SSTableSliceIterator.<init>(SSTableSliceIterator.java:42) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:246) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:270) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:62) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1967) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1810) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:357) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:85) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.service.pager.SliceQueryPager.queryNextPage(SliceQueryPager.java:90) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.service.pager.AbstractQueryPager.fetchPage(AbstractQueryPager.java:85) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.service.pager.SliceQueryPager.fetchPage(SliceQueryPager.java:38) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.service.pager.QueryPagers$1.next(QueryPagers.java:155) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.service.pager.QueryPagers$1.next(QueryPagers.java:144) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.Keyspace.indexRow(Keyspace.java:427) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.index.SecondaryIndexBuilder.build(SecondaryIndexBuilder.java:62) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at org.apache.cassandra.db.compaction.CompactionManager$10.run(CompactionManager.java:1144) ~[apache-cassandra-2.1.8.jar:2.1.8] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_65] 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_65] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_65] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65] 

Futher расширения MAX_HEAP_SIZE приводит к смертям Кассандры из системы ОЫХ-убийц.

Любые идеи?

+0

Используете ли вы какую-то форму кеша строк на новом узле? –

+0

нет, он выключен –

ответ

0

Я столкнулся с точно такой же проблемой (см. my JIRA ticket), и, похоже, это связано с таблицей, в которой было много надгробных камней (многоуровневое уплотнение часто не очень хорошо очищает их). Одна потенциальная мера сортировки состоит в том, чтобы просто перезапустить узел с auto_bootstrap, установленным на false, а затем запустите nodetool rebuild, чтобы завершить процесс. Это приведет к сохранению существующих данных, позволяя новому узлу обслуживать трафик.

Но у вас, вероятно, все еще есть основная проблема, вызывающая OOM. Что-то очень большое в настоящее время материализуется в память во время сеанса потоковой передачи (очевидно), и это, скорее всего, либо:

  1. Очень большой раздел, который может произойти неожиданно. Проверьте cfstats и посмотрите на байты максимального раздела. Если это так, вам нужно решить проблему с корневой моделью данных и очистить эти данные.

  2. Много надгробных памятников. Вы должны увидеть предупреждение об этом в журнале.

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

+0

Спасибо за очень полезный ответ, думаю, что я нашел причину, есть вторичный индекс с «Максимальный байт: максимальный байт: 6gb», выглядит как кандидат. Я попытаюсь сбросить его и повторить попытку. –

+0

Кажется, это были сетевые проблемы, я обновил драйвер ядра и eth (igb) на новом узле и oom, были заменены другими [проблемами] (http://stackoverflow.com/questions/33869558/cassandra-secondary-indexes -построение-во добавляющие-оф-нового-узла-продолжается-навсегда) –

Смежные вопросы