Почему таблицы со временем перестают синхронизироваться, когда используется согласованность записи ALL? - PullRequest
1 голос
/ 21 мая 2019

Я управляю кластером cassandra 3.11.4 с 1 центром обработки данных, 2 стойками и 11 узлами.Мои пространства ключей и таблицы настроены на репликацию 2. Я использую Prometheus-Grafana-Combo для мониторинга кластера.

Наблюдение: во время (массивных) вставок с использованием уровня записи-согласованности ВСЕ (т. Е. 2 ​​узла) затронутыетаблицы / узлы медленно не синхронизируются (наихудший случай на одном узле: от 100% до 83% в течение 6 часов).Я ожидаю, что это может произойти, только если я использую ЛЮБОЙ (или что-то меньшее, чем мой коэффициент репликации).

Я действительно хотел бы понять это поведение.

Что также интересно: Если яосмеливаюсь использовать согласованность записи ЛЮБОЙ, я получаю именно это - и даже при том, что все узлы подключены к сети, Кассандра, похоже, даже не пытается записать все узлы.В любом случае (ЛЮБОЙ или ВСЕ), если придется выполнять дополнительный ремонт.

1 Ответ

1 голос
/ 22 мая 2019

Прежде всего, ваше ожидание верное: пишет, независимо от того, какой уровень согласованности (ВСЕ, ОДИН, ЛЮБОЙ и т. Д.), Делает каждую попытку записи в все реплики.Различные уровни согласованности записи различаются только в том случае, если клиенту сообщается об «успехе»: ALL ожидает, пока все записи не будут выполнены, в то время как ONE ожидает только одну (и выполняет другие операции в фоновом режиме).Таким образом, если один из ваших узлов не выйдет из строя или сильно перегружен, ни одна из записей не должна быть пропущена ни на одном из узлов, и несоответствий не должно быть.Функция «скрытой передачи обслуживания» делает несоответствия еще менее вероятными (если один узел временно отключен, другие узлы сохраняют для него пропущенные записи и воспроизводят их позже).

Я думаю, что ваша единственная проблема заключается в том, что вы 'неверно истолковывать, что означает статистика по процентам.Показатель «восстановленный в процентах» используется инкрементным восстановлением .При инкрементном восстановлении данные на диске разделяются между «восстановленными» данными (данными, которые уже прошли процесс восстановления) и «неотремонтированными» данными - новые данные, которые до сих пор не прошли проверку.Это не означает, что новые данные противоречивы или отличаются между узлами - просто никто еще не проверял это!Чтобы пометить эти новые данные как «восстановленные», вам необходимо выполнить (инкрементное) восстановление - он поймет, что данные не отличаются между узлами, и пометит их как «восстановленные».

...