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, это не так просто и волшебно, как автоматическое масштабирование, как это было бы с веб-приложением, и вы, вероятно, в конечном итоге проиграете данные и очень противоречивая и нестабильная система.
Другая проблема с использованием автоматического масштабирования заключается в том, что мгновенного удовлетворения нет. Вы не можете увидеть преимущества нового узла, пока кластер не перебалансируется, и это может занять много времени в зависимости от вашего кластера.
Пока происходит перебалансирование, вы в конечном итоге возлагаете дополнительную нагрузку на исходные узлы, что лишает цели увеличения емкости.