2014-07-03 2 views
3

Если мы добавили новые узлы в C * ring, , нам нужно запустить «очистка nodetool», чтобы избавиться от данных, которые теперь были назначены в другом месте? Или это произойдет в любом случае во время обычных операций? Во время нормальных копий C * удаляет данные, которые больше не принадлежат этому узлу, или нам нужно запустить «очистку nodetoool» для этого? Спросите, потому что «очистка» берет навсегда и разбивает узел до окончания.Cassandra - избегать очистки nodetool

Если нам нужно запустить «очистку nodetool», есть ли способ узнать , какие узлы теперь имеют данные, которые у них больше не должны быть? (т. е. данные, которые теперь принадлежат новым узлам, но все еще присутствуют на старых узлах, потому что никто не удалил их. Это данные, которые удалят «очистка nodetool».) У нас есть RF = 3 и два центра обработки данных, каждый из которых который имеет полную копию данных. Я предполагаю, что нам нужно запустить очистку на всех узлах центра обработки данных, где мы добавили узлы, потому что каждая строка нового узла использовалась на другом узле (первичный), плюс две копии (реплики) на двух других узлах.

+0

Очистка nodetool только что вызвала потерю строки в 25+ миллионов строк в моей настройке. В соответствии с документацией я ждал, пока новые узлы будут запущены (UN), но в документации не упоминается, что схемы должны быть синхронизированы. Оказывается, «nodetool describeecluster» показал проблему, когда схемы были не синхронизированы, но узлы были нормальными UN. Поэтому, не зная этого, я запускал 'nodetool cleanup'. Через 30 минут он закончил уничтожение 20 дней. –

ответ

4

Если вы находитесь на Apache Cassandra 1.2 или новее, очистка проверяет метаданные на файлы, чтобы она только что-то делала, если нужно. Таким образом, вы можете просто запустить его на каждом узле, и только те узлы с дополнительными данными будут что-то делать. Данные не будут удалены во время обычного процесса уплотнения, вы должны вызвать очистку, чтобы удалить его.

Смежные вопросы