Кассандра (коэффициент репликации: 2, узлы: 3) и облегченные транзакции

У нас есть кластер cassandra, работающий с 3 узлами и коэффициентом репликации 2 -> возможно, мы должны были выбрать 3 с самого начала, но это не так.

Следовательно, наш кворум = 2/2 + 1 = 2

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

У нас все еще есть возможность читать из кластера, если мы установим наш уровень согласованности на "ОДИН", а затем прочитаем ->, так что это не проблема.

Вещь, которую я не понимаю, заключается в следующем.

У нас все еще работают два узла, так почему же невозможно выполнить последовательную (облегченную транзакцию) вставку в наше пространство ключей? У нас работает два узла, поэтому разве нельзя получить кворум 2 при попытке вставить?

Это потому, что один из рядов уже помещен в отсутствующий узел?

2 ответа

Решение

Когда вы пытаетесь вставить данные, они сохраняются на основе значений токена (на основе сконфигурированного разделителя) и реплицируются по кругу.

Например, если вы вставляете данные X в пространство ключей с коэффициентом репликации 2 в кластере с 3 узлами Node1 (владеющий токеном A), Node2 (владеющий токеном B) и Node3 (владеющий токеном C). Скажем, если данные X вычислены для токена B, то Cassandra начинает вставлять данные из Node2 и Node3 (пока не завершит реплики). Скажем, если данные X вычислены для токена C, то Cassandra начинает вставлять данные из Node3 и Node1.

Таким образом, установка уровня согласованности 2 означает, что данные должны быть записаны в 2 узла. В вашем случае, даже если у вас есть 2 узла вверх по Node1 (токен A) и Node2 (токен B) и один узел по Node3 (токен C), если данные вычисляются и выбираются как токен B, Cassandra пытается вставить в Node2 и Node3, и вы получаете ошибку согласованности, поскольку она не может быть вставлена ​​в Node3.

Поэтому для вставки необходимо либо увеличить репликацию до 3, либо уменьшить согласованность до 1.

Чтобы узнать больше о согласованности, см. Этот документ https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html

Облегченные транзакции требуют уровня согласованности QUORUM, который не может быть достигнут в случае, если недоступный узел является копией затронутого ключа. Здесь важно количество доступных реплик, а не количество узлов в кластере.

Другие вопросы по тегам