2012-02-13 1 views
1

удался воссоздать более простой сценарий, см обновления придонныхCassandra кластер нагрузка несбалансированной после последовательного стресса пишет

Сначала некоторые в фоне проблемы. Я делаю несколько экспериментов с Cassandra на Amazon EC2. У меня 4 узла на востоке, 4 на западе - в одном кластере. Чтобы смоделировать мой прецедент, я использовал инструмент внутреннего напряжения cassandras, работающий на отдельном экземпляре East-EC2 для выпуска:

./stress -d us-eastnode1, ..., us-eastnode4 --replication-strategy NetworkTopologyStrategy - -стратегические свойства us-east: 3, us-west: 3 -e LOCAL_QUORUM -c 200 -i 10 -n 1000000

Далее я запустил такую ​​же запись, а также начал с соответствующего local_quorum читать на другом отдельном Западе -EC2 пример:

./stress -d нам-westnode1, ..., нам-westnode4 -o чтения -e LOCAL_QUORUM -с 200 -i 10 -n +1000000

После пихты st 300k или около того, один из западных узлов начал блокировать с ~ 80% процессора iowait и снижать общую скорость чтения на ~ 90%. Между тем, записи закончились очень хорошо при близкой к их нормальной скорости. В попытке выяснить, что вызывает этот единственный узел для блока iowait, я запустил только читателя и сразу же получил такую ​​же проблему.

Мои токены таковы, что они сбалансированы вокруг восточных узлов, причем каждый западный узел +1 над каждым соответствующим восточным узлом, т.е. us-eastnode1: 0, us-westnode1: 1, us-eastnode2: 42535295865117307932921825928971026432 и т. д. Фактическая нагрузка оказалась сбалансированной по множеству, поэтому я ударил это из возможной причины этого.

В конечном итоге я получил крупное уплотнение (несмотря на то, что для CF было всего 10 сэблей), и никакие мелкие комбайны не были отправлены на> час). Как только я снова попробовал стресс, узел был в порядке ... Однако следующий последовательный узел затем имел ту же проблему. Это самый большой ключ, который я нашел, но я не знаю, куда он ведет.

Я спросил в IRC Кассандры, но не получил оттуда никаких идей. У кого-нибудь есть идеи о новых вещах, которые я мог бы попытаться выяснить, что здесь происходит?

следующий день обновление Некоторые далее Delving я был в состоянии воспроизвести это просто запустив напряжение записи в два раза, а затем продолжить чтение. nodetool cfstats после первой записи показывает, что каждый узел отвечает за ~ 750 тыс. ключей, что имеет смысл для 1 000 000 ключей и RF: 3 для 4 узлов в DC. Однако после второго написания напряжения us-westnode1 имеет ~ 1 500 000 ключей, в то время как us-westnode1-3 имеет ~ 875 000 ключей. Затем, когда он пытается прочитать, узел с вдвое большей нагрузкой, чем он должен иметь, является увязкой. Это заставляет меня думать, что проблема в инструменте стресса. Он перезаписывает те же строки 0000000-0999999 с теми же столбцами c0-c199. Однако каким-то образом ни один из узлов не находится примерно на той же нагрузке, что и у первой.

Простой отдых Уточнил проблему, удалив второй DC в качестве переменной. Теперь выполняется 1 постоянный ток, 4 узла с 25% владениями каждый, RandomPartitioner и следующие записи:

./stress -d node1, ..., node4 - коэффициент повторения 3 -e QUORUM -c 200 -i 10 -n 1000000

После одной записи (и незначительных копий) каждый узел имел ~ 7.5gb нагрузки.
После двух записей (и незначительных копий) каждый узел имел ~ 8.6 ГБ нагрузки, за исключением узла2 с ~ 15 ГБ. После выполнения крупного уплотнения на всех узлах каждый узел вернулся к загрузке ~ 7.5gb.

Это просто странная проблема уплотнения, которая возникает при эффективном перезаписи всего набора данных, например, инструмента для стресса?

+0

Вы работаете на EC2? Используете ли вы хранилище экземпляров или EBS? – fennec

+0

Хранилище экземпляров. Дальнейшее расследование сегодня и я обновляю вопрос. Кажется, это связано с неправильной балансировкой нагрузки во второй раз, когда я запускаю запись напряжения. – user1207932

ответ

1
Is this simply a weird compaction issue that crops up when effectively overwriting the entire dataset like the stress tool does? 

Да, уплотнительная bucketing будет вести себя несколько случайным образом, и это нормально для некоторых узлов не уплотнять, а также другие. (Тем не менее, это звучит так, как будто узел2 по существу не сделал уплотнения, вероятно, только позади.)

Если ваша фактическая рабочая нагрузка также включает в себя много перезаписи, вам, вероятно, следует проверить Leveled Compaction, которая предназначена для того, чтобы сделать лучше и более прогнозируемая работа в этом сценарии: http://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra