Назад | Перейти на главную страницу

Динамическое изменение кластера Cassandra с одним узлом на два узла

Итак, у меня есть приложение, которое большую часть времени будет бездействовать, но в течение нескольких дней в месяце потребуется интенсивная загрузка. Поскольку мы выполняем развертывание на EC2, я бы хотел, чтобы большую часть времени работал только один сервер Cassandra, а затем, в дни пиковых нагрузок, я хочу задействовать еще один сервер (с большим количеством ОЗУ и ЦП, чем первый), чтобы помочь справиться с нагрузкой. Как лучше всего это сделать? Стоит ли мне использовать другой подход?

Некоторые заметки о том, что я планирую делать:

Мой главный вопрос заключается в том, как заставить узлы совместно использовать все данные, поскольку мне нужен коэффициент репликации 2 (чтобы у обоих узлов были все данные), но это не сработает, пока есть только один сервер. Стоит ли использовать 2 дополнительных сервера вместо одного?

Кажется, вы можете довольно легко изменить коэффициент репликации.

Это также упоминается на Кассандра вики, где вы можете найти инструкции как по увеличению, так и по уменьшению коэффициента репликации.

Это означает, что это должно быть возможно:

  • изменить коэффициент репликации с 1 на 2
  • вызвать и восстановить пакетный узел, чтобы он получил копию всех данных
  • ... Работай ...
  • пакетный узел вывода из эксплуатации
  • изменить коэффициент репликации обратно с 2 на 1
  • запустить очистку

По моему опыту, изменение коэффициента репликации «на лету» не очень хорошо работает :-( Вы можете столкнуться с разногласиями в схеме, на исправление которых уходит много времени, по крайней мере, для меня.

Просто подумайте вслух, но возможен другой путь (измените время по своему усмотрению):

  1. Увеличьте период отсрочки сборки мусора в cassandra.yaml (это определяет, как долго живут надгробия до того, как они будут удалены с диска), чтобы сказать 30 дней.
  2. Раскручивайте второй узел примерно каждые 15 дней, независимо от того, нужен он или нет. Убедитесь, что данные / журналы фиксации и т. Д. Сохраняются между запусками. Это будет означать, что вы начнете быстрее, когда вам нужно раскрутить 2-й узел.
  3. с большим количеством ОЗУ и ЦП, чем первый

Cassandra эффективно делит рабочую нагрузку по количеству кольца, за которое отвечает каждый узел. Возможно, будет проще иметь второй узел или удвоить емкость первого, или добавить 2 узла того же размера, что и первый, для более легкого разделения кольца.

Это по-прежнему потребует ручного вмешательства nodetool при отбрасывании узлов, хотя намекаемые передачи обслуживания будут напрасно заполнять диск на оставшемся узле.