Проблемы согласованности и тайм-аута в Cassandra 2.2

Я использую Cassandra 2.2, и у меня есть приложение, которое требует высокого уровня согласованности.

Я настроил один кластер центра обработки данных с 3 узлами. Мое пространство ключей создано с replication_factor из 2. В каждом файле configuration.yaml я установил 2 seed_provider (например, NODE_1 и NODE_3).

Важно то, что мое приложение должно быть полнофункциональным, даже если один из узлов не работает.

В настоящее время у меня есть некоторые проблемы с согласованностью и тайм-аутом, когда мое приложение связывается с кластером.

Я прочитал всю документацию по Cassandra 2.2 и пришел к выводу, что лучшим CONSISTENCY LEVEL для моих операций записи должно быть QUORUM и для моих операций чтения ONE, но у меня все еще есть некоторые проблемы с согласованностью.

Прежде всего, правильный ли выбор - иметь высокий уровень согласованности? Кроме того, рассматриваются ли операции UPDATE и DELETE как операции записи или чтения, поскольку, например, операция обновления с предложением WHERE все еще должна «читать» данные? Я не уверен, пространственно в контексте рабочего процесса записи кассандры.

Моя вторая проблема - это тайм-аут во время операций записи. Простой и легкий INSERT иногда получает "Cassandra timeout during write query at consistency QUORUM (2 replicas were required but only 1 acknowledged the write)" или иногда даже "... 0 подтверждено", даже если все мои 3 узла работают.

Есть ли другие параметры, которые я должен проверить, например, write_request_timeout_in_ms, со значением по умолчанию 2000 мс (что уже является высоким значением)?


person The Wingman    schedule 19.11.2016    source источник


Ответы (1)


У вас будет строгая согласованность с Replication Factor = 2 и Consistency Level = QUORUM для операций записи и ONE для операций чтения. Но операции записи завершатся неудачно, если один узел не работает. Consistency Level = QUORUM совпадает с ALL в случае Replication Factor = 2.

Вы должны использовать Replication Factor = 3 и Consistency Level = QUORUM как для операций записи, так и для операций чтения, чтобы иметь сильную согласованность и полнофункциональное приложение, даже если один из узлов не работает.

Операции DELETE и UPDATE - это операции записи.

Для проблемы с тайм-аутом предоставьте табличную модель и запросы, которые не выполняются.

Обновлено

Уровень согласованности применяется к репликам, а не узлам.

Коэффициент репликации = 2 означает, что 2 из 3 узлов будут содержать данные. Эти узлы будут репликами.

КВОРУМ означает, что операция записи должна быть подтверждена 2 репликами (когда коэффициент репликации = 2), а не узлами.

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

Когда вы выполняете запрос записи QUORUM в кластер с 2 из 3 активных узлов, есть вероятность, что в кластере есть только 1 действующая реплика для ключа раздела, в этом случае запрос на запись завершится ошибкой.

Дополнительно: вот простой калькулятор параметров Cassandra

person Mikhail Baksheev    schedule 22.11.2016
comment
Спасибо за ответ. Но не могли бы вы объяснить, пожалуйста, совсем немного, почему наличие 3 узлов в начале с коэффициентом репликации 2 приведет к сбою операций записи, если один узел выйдет из строя. С одним отказавшим узлом у меня все еще доступно 2 узла. На мой взгляд, в этом случае запись с последовательностью КВОРУМ (должны быть известны 2 репликации) по-прежнему должна работать. Но я, наверное, ошибаюсь. Спасибо. - person The Wingman; 26.11.2016
comment
@TheWingman, я добавил к своему ответу пояснение о репликации - person Mikhail Baksheev; 27.11.2016
comment
Большое спасибо за все эти объяснения. Это намного понятнее - person The Wingman; 28.11.2016
comment
Не могли бы вы взглянуть на мой второй пост stackoverflow.com/q/40953885/7183762. Я был бы очень признателен. Спасибо. - person The Wingman; 10.12.2016