Вопросы по Cassandra Bootstrap

Может ли кто-нибудь ответить на мои вопросы ниже,

1) У меня есть 4 узла 172.30.56.60, 172.30.56.61, 172.30.56.62, 172.30.56.63, а также я настроил семена как '172.30.56.60, 172.30.56.61' в cassandra.yaml во всех четырех узлах. ПРИМЕЧАНИЕ. Я не предоставил никакой информации о "172.30.56.62, 172.30.56.63" в файле cassandra.yaml. Но когда я запускаю Cassandra во всех четырех узлах, как у Cassandra есть способность идентифицировать 62 и 63?

2) Как именно работает протокол сплетен / Как работает Cassandra bootstrap?

Спасибо,
Гарри

1 ответ

Решение

(Отказ от ответственности: я сотрудник Сциллы)

Когда вы запускаете Cassandra / Scylla на своих узлах, они связываются с узлами seed/s (которые вы определили в файле yaml для всех 4 узлов), чтобы получить информацию о кольце, диапазонах токенов и других членах в кольце (другие узлы).).

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

  • Свяжитесь с семенами, чтобы узнать о состоянии сплетен.
  • Переход в состояние "Вверх" и "Присоединение" (чтобы указать, что он присоединяется к кластеру; представлен UJ в nodetool status).
  • Свяжитесь с начальными узлами, чтобы обеспечить согласование схемы.
  • Подсчитайте токены, за которые он станет ответственным.
  • Потоковые данные реплики, связанные с токенами, за которые он отвечает, от прежних владельцев.
  • Переход в верхнее и нормальное состояние после завершения потоковой передачи (для обозначения того, что теперь он является частью кластера; представлен UN вnodetool status).

Вы можете прочитать больше о начальной загрузке здесь: http://thelastpickle.com/blog/2017/05/23/auto-bootstrapping-part1.html

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

  1. Сплетни на случайную живую конечную точку (если есть)
  2. Сплетни к случайной недоступной конечной точке с определенной вероятностью, зависящей от количества недоступных и живых узлов
  3. Если для сплетни в точке (1) не было начального числа или число живых узлов меньше числа начальных чисел, сплетни в случайное начальное число с определенной вероятностью зависят от количества недоступных, начальных и живых узлов.

Эти правила гарантируют, что если сеть работает, все узлы в конечном итоге узнают обо всех остальных узлах. (Очевидно, что если каждый узел связывается только с одним начальным числом, а затем сплетничает только со случайными узлами, о которых он знает, вы можете иметь разделы при наличии нескольких начальных чисел - каждое начальное число будет знать только о подмножестве узлов в кластере. Шаг 3 позволяет избежать это и более тонкие проблемы.)

Таким образом, узел инициирует обмен сплетнями с одним-тремя узлами каждый раунд (или ноль, если он один в кластере)

Вы можете прочитать больше об высокоуровневой архитектуре сплетен здесь: https://wiki.apache.org/cassandra/ArchitectureGossip

Вы можете прочитать больше о реализации сплетен Scylla здесь: https://github.com/scylladb/scylla/wiki/Gossip

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