Динамическое изменение одноузлового кластера Cassandra на два узла
Итак, у меня есть приложение, которое будет в большинстве случаев бездействующим, но через несколько дней в месяце ему понадобится высокая скорость. Поскольку мы развертываем на EC2, я бы хотел, чтобы большую часть времени работал только один сервер Cassandra, а затем в рабочие дни я хочу задействовать еще один сервер (с большим объемом оперативной памяти и ЦП, чем первый), чтобы помочь справиться с нагрузкой. Каков наилучший способ сделать это? Должен ли я выбрать другой подход?
Некоторые заметки о том, что я планирую сделать:
- Поднимите узел и немедленно восстановите его
- После того, как время взрыва закончено, выводится из эксплуатации мощный узел
- Используйте всегда включенный сервер в качестве начального узла
Мой главный вопрос - как заставить узлы совместно использовать все данные, так как я хочу, чтобы коэффициент репликации равнялся 2 (чтобы у обоих узлов были все данные), но это не будет работать, пока есть только один сервер. Должен ли я вызвать 2 дополнительных сервера вместо одного?
2 ответа
Кажется, что вы можете довольно легко изменить фактор репликации.
Это также упоминается в вики Cassandra, где вы можете найти инструкции по увеличению и уменьшению коэффициента репликации.
Это означает, что должно быть возможно сделать это:
- изменить коэффициент репликации от 1 до 2
- поднять и восстановить ваш пакетный узел, чтобы он получил копию всех данных
- ... Работай...
- узел разрыва
- изменить коэффициент репликации обратно с 2 на 1
- убирать
По моему опыту, изменение коэффициента репликации на лету не очень хорошо работает:-(Вы можете столкнуться с разногласиями со схемой, которые, по крайней мере, требуют времени для устранения.
Просто подумайте вслух, но возможен другой путь (измените время, чтобы удовлетворить):
- Увеличьте период отсрочки GC в cassandra.yaml (это определяет, как долго живут надгробные камни до того, как их очистят от диска), скажем, до 30 дней.
- Раскручивайте второй узел каждые 15 дней или около того, нужен он или нет. Убедитесь, что данные / логи коммитов и т.д. сохраняются между запусками. Это будет означать, что вы начнете быстрее, когда вам нужно раскрутить 2-й узел
с большим количеством оперативной памяти и процессора, чем первый
Кассандра эффективно делит рабочую нагрузку на количество кольца, за которое отвечает каждый узел. Может быть проще иметь 2-й узел либо удвоить емкость первого, либо добавить 2 узла того же размера, что и первый, для более легкого разделения кольца.
Это по-прежнему потребует ручного вмешательства nodetool при отбрасывании узлов, хотя намекаемые передачи обслуживания будут бесполезно заполнять диск на оставшемся узле.