Cassandra - данные не реплицируются на всех узлах

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

Коэффициент репликации установлен равным 3:

keyspace_name      | durable_writes | replication
--------------------+----------------+-------------------------------------------------------------------------------------

table name |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}

Сетевая статистика Nodetool:

nodetool netstats
Mode: NORMAL
Not sending any streams.
Read Repair Statistics:
Attempted: 16519
Mismatch (Blocking): 0
Mismatch (Background): 0
Pool Name                    Active   Pending      Completed   Dropped
Large messages                  n/a         1             13         4
Small messages                  n/a         0         320422         4
Gossip messages                 n/a         0       12972040       470

Восстановление Nodetool было выполнено на всех узлах.


person Brian Johnson    schedule 30.09.2019    source источник
comment
какой уровень согласованности вы используете для запроса?   -  person Carlos Monroy Nieblas    schedule 01.10.2019
comment
@CarlosMonroyNieblas Уровень согласованности был установлен на единицу. Я установил кворум, и это решило проблему. Код Java должен быть скорректирован, чтобы установить уровень согласованности на кворум, или это то, что я могу вызвать на стороне сервера? Спасибо за помощь!   -  person Brian Johnson    schedule 01.10.2019
comment
Кроме того, это происходит только в этой конкретной среде. В других средах такое же количество строк на каждом узле с уровнем согласованности, равным единице. Есть понимание?   -  person Brian Johnson    schedule 01.10.2019
comment
Вы должны установить уровень согласованности в своем коде, чтобы каждый запрос выполнялся с одинаковой согласованностью из приложения.   -  person LetsNoSQL    schedule 01.10.2019


Ответы (1)


Судя по вашему комментарию, эту проблему можно предотвратить, используя уровень согласованности QUORUM или выше. Следует учитывать, что повышение согласованности может повлиять на производительность и отказоустойчивость. Например, использование уровня согласованности ALL гарантирует, что данные всегда будут точными, но если возникнет проблема с одним из экземпляров кластера, запросы не будут выполнены, поскольку уровень согласованности не будет удовлетворен. Наилучший уровень согласованности будет зависеть от вашего варианта использования и вашего SLA.

Как часто вы ремонтировали (nodetool repair) свой кластер? Исправления будут устранять основную причину различных данных, полученных с каждого узла.

person Carlos Monroy Nieblas    schedule 01.10.2019
comment
В настоящее время я запускаю nodetool repair по запросу. Это было бы только в моих более низких средах. Считаете ли вы, что настройки cron для периодического запуска восстановления nodetool на узлах будет достаточно для непроизводственной среды? - person Brian Johnson; 01.10.2019
comment
Я бы порекомендовал вам взглянуть на cassandra-reaper (cassandra-reaper.io), это открытый исходный код. инструмент, в котором вы можете определить расписание и частоту ремонта, а также позволяет планировать их до уровня ключевого пространства. Таким образом, вы можете разбить задачу на небольшие подзадачи, выполнение которых займет меньше времени. - person Carlos Monroy Nieblas; 01.10.2019