Cassandra Частые Чтение Тайм-аутов записи

Я изменил целую базу кода от Thrift до CQL, используя datastax java driver 1.0.1 и cassandra 1.2.6..

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

С этим я смог вставить огромные данные, которые не работали с бережливостью... Но после этапа, папка с данными около 3,5 ГБ. Я получаю частые исключения таймаута записи. даже я делаю то же самое предыдущее рабочее прецедентом снова, которое также выдает исключение времени ожидания. СЛУЧАЙНАЯ РАБОТА СЛУЧАЙНАЯ РАБОТА НЕ РАБОТАЕТ, ДАЖЕ ПОСЛЕ СВЕЖЕЙ НАСТРОЙКИ.

ЛОГИСТИКА СЕРИИ СЕРИИ CASSADNRA

это частичный режим log-сервера cassandra в режиме DEBUG, после чего я получил ошибку:

http://pastebin.com/rW0B4MD0

Клиентское исключение:

Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
    at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
    at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
    at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
    at com.datastax.driver.core.Session.execute(Session.java:107)
    at com.datastax.driver.core.Session.execute(Session.java:76)

Инфраструктура: 16GB машина с 8-гигабайтной кучей, предоставленная cassandra, процессор i7. Я использую SINGLE node cassandra с этим yaml, настроенным на время ожидания, все остальное по умолчанию:

  • read_request_timeout_in_ms: 30000
  • range_request_timeout_in_ms: 30000
  • write_request_timeout_in_ms: 30000
  • truncate_request_timeout_in_ms: 60000
  • request_timeout_in_ms: 30000

ИСПОЛЬЗОВАНИЕ CASE: Я запускаю usecase, в котором хранятся комбинации (моя терминология проекта) в cassandra.... В настоящее время тестирование хранит 250 000 комбинаций с 100 параллельными потоками. Каждая нить хранит одну комбинацию... реальный случай мне нужно поддерживать десятки миллионов, но для чего потребуется другое аппаратное обеспечение и кластер node...

При сохранении ONE комбинация занимает около 2 секунд и включает в себя:

  • 527 Запросы INSERT INTO
  • 506 Запросы UPDATE
  • 954 SELECT-запросы

100 параллельных потоков параллельно хранят 100 комбинаций.

Я нашел поведение WRITE TIMEOUTS случайным, когда он работает до 200 000, затем перебрасывает таймауты и иногда не работает даже для 10k комбинаций. СЛУЧАЙНОЕ ПОВЕДЕНИЕ.

Ответ 1

Я обнаружил, что во время некоторых операций чтения стресса cassandra, если я устанавливаю слишком высокие скорости, я получаю эту ошибку CL. Подумайте, чтобы снизить во время теста количество потоков на что-то доступное для вашего пула, чтобы выдержать, чтобы победить

  • read_request_timeout_in_ms

По-моему, изменение в том, что в cassandra.yaml не всегда хорошая идея. Рассмотрим аппаратные ресурсы, с которыми работают ваши машины.

для яйца:

cassandra-stress read n=100000 cl=ONE -rate threads=200 -node N1

даст мне ошибку, а

cassandra-stress read n=100000 cl=ONE -rate threads=121 -node N1

сделает гладко работу.

Надеюсь, он поможет вам в ребятах.

P.S. когда вы читаете тесты, попробуйте распространить чтения даже на данные с помощью "-pop dist = UNIFORM (1..1000000)" или сколько вы хотите.

Ответ 2

Просто потратил некоторое время, чтобы прочитать мои узлы dev cassandra config yaml, потому что у меня была аналогичная проблема. Моя система застопорилась и выбрасывает тайм-аут, когда я попытался загрузить около 3 миллиардов хэшей sha2 моему dev node только с RAM объемом 600 МБ;)

Я исправил его, уменьшив размеры кеша и дождавшись флеша и так далее. Это сделало node медленнее при записи, но оно стабилизировалось. Затем я смог загрузить столько данных, сколько мне нужно.

Но, извините, я не мог понять, какие варианты были. Я помню, что я читаю документы о настройке производительности и как рассчитать правильные значения для вашей системы на основе ядер процессора, RAM и т.д.

Проблема заключалась в том, что кэши не были написаны достаточно быстро на диск, поэтому его начало блокировать все. После того, как вы сказали, напишите чаще и дайте новый запрос ждать, node стабилизировался, а мой импорт стал медленнее.

Это означает, что параметры по умолчанию для cassandra предназначены для тяжелых башен-машин с большим количеством ядер в кластере multi node, который может распространять нагрузку. Чтобы запустить его в локальной среде, завинтите его. Его dev env, а не система жизни, найдите время, чтобы получить кофе или два;)

Надеюсь, что это поможет правильно подумать.

Ответ 3

Из вашего фрагмента журнала всего 4 Гбайта кучи было дано Кассандре, и оно заполняется. Это, скорее всего, ваша проблема:

DEBUG [ScheduledTasks:1] 2013-08-07 15:08:09,434 GCInspector.java (line 121) GC for ParNew: 155 ms for 6 collections, 3230372760 used; max is 4277534720

max - 4277534720 == 4 ГБ кучи. Вы должны войти в свой cassandra-env.sh и явно установить максимальную кучу и новые размеры кучи. Для node, описанного вами, максимальная куча 8 ГБ и новая куча 800 МБ, вероятно, являются хорошей отправной точкой.

Ответ 4

Я также столкнулся с этой проблемой,   "Тайм-аут Cassandra во время записи запроса при согласованности LOCAL_ONE (0 реплик) подтвердил, что запись более 1 требуется"   "Тайм-аут Cassandra во время запроса читать при согласованности LOCAL_ONE (0 реплик) подтвердил, что запись более 1 требуется". Я справился с этим, изменив параметр в cassandra.yaml. Поиск "тайм-аута" в cassandra.yaml, вы найдете read_request_timeout_in_ms: 5000 write_request_timeout_in_ms: 2000 Увеличьте число и перезапустите "cassandra -f". Моя проблема была решена. Надеюсь, что это тоже поможет!