AWS и автоматическое масштабирование кассандры

Я установил экземпляр AWS с cassandra на нем, а затем также настроил группу автоматического масштабирования, чтобы раскрутить еще 4-8 экземпляров в зависимости от тревоги. Но как Кассандра узнает, когда начинается автоматическое масштабирование? Откуда он знает, к каким другим узлам подключаться? Нужно ли что-то настраивать в Кассандре, чтобы нюхать ноды?

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

[root@ip-10-205-119-104 bin]# sh nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns    Host ID                               Rack
UN  127.0.0.1  107.12 MB  256     ?       a50294ac-2150-4d9e-9dd2-0a56906e9531  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

2 ответа

Наилучшим вариантом для автоматического обнаружения в Cassandra являются начальные узлы, которые являются "якорными" узлами, которые, как предполагается, всегда находятся там, когда появляется новый, и могут запрашиваться для списка узлов кластера каждый раз, когда это необходимо.

Таким образом, вы поставляете каждый узел со списком начальных узлов в его конфигурационном файле (включая сами начальные числа), и как только он поднимется, он получит список узлов из начального числа. Это, разумеется, требует, чтобы начальные узлы были статичными и всегда работали (естественно, для избыточности у вас должно быть более одного начального узла). Кассандра требует, чтобы он также указывался по их IP (чтобы избежать проблем с DNS).

Тем не менее, я не думаю, что автоматическое масштабирование Кассандры было бы хорошо. Cassandra распределяет свои данные (строки) по узлам, и каждый раз, когда вы добавляете или удаляете узел, ему необходимо перераспределять и перераспределять строки, что в зависимости от размера ваших данных занимает довольно много времени (и может потребовать других административных действий, таких как ремонт и т. д.). Даже если у вас достаточно реплик, чтобы позволить себе внезапную потерю узла (что будет происходить при использовании автоматического масштабирования), это грязно. Во-первых, потому что Cassandra не будет автоматически выводить узлы из строя - кластер будет знать, что узел недоступен, но он просто ждет, пока он вернется, и попытается сохранить кластер как можно более работоспособным (включая механизм, который сохраняет записи в недоступный узел в других узлах в течение некоторого периода).

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

Ну, может быть, есть некоторые люди, которые делают это, но, согласно моим знаниям и опыту с Cassandra, это не так просто и волшебно, как автоматическое масштабирование, как это было бы с веб-приложением, и вы, вероятно, в конечном итоге проиграете данные и очень противоречивая и нестабильная система.

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

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

Другие вопросы по тегам