Не удается добавить новый центр обработки данных Cassandra из-за ошибок потоковой передачи

Использование DSE 4.8.6 (C * 2.1.13.1218)

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

Пример ошибки из system.log:

ERROR [STREAM-IN-/172.31.47.213] 2016-04-19 12:30:28,531  StreamSession.java:621 - [Stream #743d44e0-060e-11e6-985c-c1820b05e9ae] Remote peer 172.31.47.213 failed stream session.
INFO  [STREAM-IN-/172.31.47.213] 2016-04-19 12:30:30,665  StreamResultFuture.java:180 - [Stream #743d44e0-060e-11e6-985c-c1820b05e9ae] Session with /172.31.47.213 is complete

На новый узел необходимо передать около 500 ГБ данных. Ускорьте или перестройте поток операций с 4 разных узлов на другом (основном) DC.

Когда возникает ошибка потоковой передачи, все синхронизированные данные стираются (и мне приходится начинать заново).

Что я пробовал до сих пор:

  • загрузка узла
  • настройте auto_boostrap: False в cassandra.yaml и запустите вручную nodetool rebuild
  • отключение streaming_socket_timeout_in_ms и установка более агрессивных значений TCP Keep Alive в моей Linux conf (следуя совету в CASSANDRA -9440 билет)
  • увеличение phi_convict_threshold (до максимума)
  • не загружайте узел и не используйте восстановление для потоковой передачи данных (остановка восстановления при почти полном диске и 80 КБ SSTables. После 3 дней попыток их сжатия я сдался)

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

На узле вывода потока это сообщения об ошибках:

ERROR [STREAM-IN-/172.31.45.28] 2016-05-11 13:10:43,842  StreamSession.java:505 - [Stream #ecfe0390-1763-11e6-b6c8-c1820b05e9ae] Streaming error occurred
java.net.SocketTimeoutException: null
        at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:229) ~[na:1.7.0_80]
        at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103) ~[na:1.7.0_80]
        at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385) ~[na:1.7.0_80]
        at org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:51) ~[cassandra-all-2.1.14.1272.jar:2.1.14.1272]
        at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:257) ~[cassandra-all-2.1.14.1272.jar:2.1.14.1272]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80]

а потом:

INFO  [STREAM-IN-/172.31.45.28] 2016-05-10 07:59:14,023  StreamResultFuture.java:180 - [Stream #ea1271b0-1679-11e6-917a-c1820b05e9ae] Session with /172.31.45.28 is complete
WARN  [STREAM-IN-/172.31.45.28] 2016-05-10 07:59:14,023  StreamResultFuture.java:207 - [Stream #ea1271b0-1679-11e6-917a-c1820b05e9ae] Stream failed
ERROR [STREAM-OUT-/172.31.45.28] 2016-05-10 07:59:14,024  StreamSession.java:505 - [Stream #ea1271b0-1679-11e6-917a-c1820b05e9ae] Streaming error occurred
java.lang.AssertionError: Memory was freed
        at org.apache.cassandra.io.util.SafeMemory.checkBounds(SafeMemory.java:97) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.io.util.Memory.getLong(Memory.java:249) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.io.compress.CompressionMetadata.getTotalSizeForSections(CompressionMetadata.java:247) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.messages.FileMessageHeader.size(FileMessageHeader.java:112) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamSession.fileSent(StreamSession.java:546) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:50) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:41) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.messages.StreamMessage.serialize(StreamMessage.java:45) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.sendMessage(ConnectionHandler.java:358) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.run(ConnectionHandler.java:338) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]

person Vincent de Lagabbe    schedule 19.04.2016    source источник


Ответы (2)


Как указано в заявке Cassandra CASSANDRA-11345, эта проблема возникла из-за большого Передается файл SSTable (40 ГБ).

Передача указанного файла занимает более 1 часа, и по умолчанию операции потоковой передачи прекращаются, если исходящая передача занимает более 1 часа.

Чтобы изменить это поведение по умолчанию, вы можете установить / a> в файле конфигурации cassandra.yaml на большое значение (например: 72000000 мс или 20 часов)

person Vincent de Lagabbe    schedule 10.05.2016

Не забудьте также изменить это значение на существующих узлах, а не только на новых! (не то чтобы я что-то здесь признаю ...)

person The Tomahawk    schedule 03.05.2017