Значительное уплотнение на Кассандре после смены gc_grace_seconds с 10 на 0 день - PullRequest
0 голосов
/ 17 января 2019

У меня есть кластер Cassandra, у которого gc_grace_seconds 10 дней. Автоматическое уплотнение включено и работает в соответствии с конфигурацией, но я подозреваю, что автоматическое уплотнение не очищает надгробия, срок действия которых истек gc_grace_seconds (10 дней). Я планирую провести серьезное уплотнение этой таблицы, поэтому мои вопросы:

1) Должен ли я выполнять основное уплотнение без изменения gc_grace_seconds в течение 10 дней?

2) Должен ли я выполнить крупное изменение уплотнения gc_grace_seconds 0 дней?

3) Если я изменяю gc_grace_seconds 0, применимо ли это к будущим или уже существующим данным со днями gc_grace_seconds?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

1) Должен ли я выполнять основное уплотнение без изменения gc_grace_seconds 10 дней

Да. Если установлено значение 0, надгробия не будут распространяться на другие узлы в кластере. Что вызывает несоответствие в данных.

3) Если я изменяю gc_grace_seconds 0, применимо ли это к будущему данные или уже существующие данные с днями gc_grace_seconds?

Если вы измените gc_grace_seconds, он будет применим к будущим данным, а также к текущим данным.

Если вы хотите очистить надгробия путем уплотнения, у меня есть два варианта для вас

1) nodetool compact -s keyspace table

Это сократит таблицу и создаст sstables, которые на 50% -25% -12,5% и т. Д.

2) nodetool compact --user-defined path/to/sstable

Это очистит надгробия от упомянутого выше sstable.

0 голосов
/ 17 января 2019

Прежде всего, вы не должны устанавливать gc_grace_seconds в 0, если только это не кластер с одним узлом. Если для gc_grace_seconds задано какое-то время, вы должны запускать repair хотя бы один раз за каждый такой период, в противном случае вы рискуете воскресить данные - что происходит, когда один узел в кластере пропустил удаление, а другие узлы отбросьте их надгробия, поэтому при последующем ремонте данные будут новыми, и они не поймут, что они уже были удалены. Если вы когда-либо установите gc_grace_seconds в 0, любые данные, которые вы ранее удалили, могут быть воскрешены при следующем восстановлении, если данные окажутся на одной из реплик (потому что эта конкретная реплика пропустила удаление из-за какой-то временной проблемы).

Так что да, правильным подходом было бы запустить крупное уплотнение с исходными значениями gc_grace_seconds в течение 10 дней (и обязательно выполнять ремонт хотя бы раз в 10 дней).

Но вам нужно подумать, почему вы вообще хотите проводить крупное уплотнение. То, может ли незначительное уплотнение избавиться от старых (за последние 10 дней) надгробий, зависит от множества факторов, например, от того, недавно ли вы вносили другие изменения в тот же раздел, в котором находятся эти надгробия. Но если надгробия не вызывают у вас серьезных проблем (тонны дискового пространства, медленное чтение и т. д.), возможно, не стоит делать большое сжатие. Основное уплотнение не является бесплатным, и (по крайней мере, в стратегии многоуровневого уплотнения) после него все данные хранятся в одном файле, и их сжатие займет больше времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...