2

Использование DSE 4.8.6 (C * 2.1.13.1218)Невозможно добавить новый Cassandra датацентр из-за ошибок потокового

При попытке добавления нового узла в новом центре обработки данных, bootstraping/узел перестроение всегда прерываются по потоковым ошибкам.

пример ошибки из 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 ГБ данных, которые будут передаваться на новый узел. Boostrap или rebuild работают с четырьмя различными узлами на другом (основном) DC.

При возникновении потоковой ошибки все синхронизированные данные стираются (и мне нужно начинать с нуля).

То, что я пытался до сих пор:

  • bootstraping узел
  • установки auto_boostrap: False в cassandra.yaml и вручную запустить nodetool rebuild
  • отключение streaming_socket_timeout_in_ms и настройка более агрессивный TCP Keep Alive значения в моем Linux конф (после рекомендации в кассе CASSANDRA-9440)
  • увеличение phi_convict_threshold (до максимального)
  • не загружайте узел и не используйте ремонт для потоковой передачи данных (остановка ремонта на почти полном диске и 80K 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] 

ответ

2

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

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

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

0

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

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

  • Нет связанных вопросов^_^