Драйвер Java Cassandra: сколько контактных точек является разумным?

В Java я подключаюсь к кластеру Cussandra следующим образом:

Cluster cluster = Cluster.builder().addContactPoints("host-001","host-002").build();

Нужно ли указывать все хосты кластера? Что делать, если у меня есть кластер из 1000 узлов? Я случайно выбираю несколько? Сколько, и я действительно делаю это случайно?

Ответ 1

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

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

Ответ 2

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

Ответ 3

Документация из DataStax

public Cluster.Builder addContactPoint(String address)

Добавляет точку контакта.

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

Обратите внимание, что по умолчанию (т.е. если вы не используете метод withLoadBalancingPolicy(com.datastax.driver.core.policies.LoadBalancingPolicy)) этого построителя), первый успешно связанный узел будет использоваться для определения локального центра обработки данных для клиента. Если следует, что если вы используете Cassandra в нескольких настройках центра данных, рекомендуется указывать только контактные точки, находящиеся в одном центре данных, чем клиент, или вручную предоставить политику балансировки нагрузки, соответствующую вашим потребностям.

Parameters:
    address - the address of the node to connect to
Returns:
    this Builder.
Throws:
    IllegalArgumentException - if no IP address for address could be found
    SecurityException - if a security manager is present and permission to resolve the host name is denied.

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

Ответ 4

Я прочитал интересную статью о Netflix и их установке Cassandra.

Они упоминают тот факт, что они использовали свою систему Gorilla для удаления 33% своего кластера Cassandra и считают, что их системы все еще работают, как ожидалось.

У них есть около 2000 узлов Cassandra и сокращено на 33%. Это означает, что 1 из 3 узлов исчез. (Около 660 узлов для Netflix)

Если вам действительно не повезло, все указанные вами соединения являются частью узлов 660... Ouch.

Скорее всего, если вы используете достаточно узлы и никогда не ожидаете драматического события, в котором падает более 33% вашей сети, вы должны иметь возможность использовать довольно небольшое число, например, 6 узлов, потому что с таким числом, вы должны всегда ударять по крайней мере 4, которые вверх...

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

Обратите внимание, что если у вас есть коэффициент репликации 5 и 33% ваших узлов Cassandra, вы все равно будете в беде. В этой ситуации многие узлы не могут обращаться к базе данных способом QUORUM. Обратите внимание, что Netflix об этом говорит. Их коэффициент репликации всего 3! (т.е. 1/3 = 0.33 и 1/5 = 0.2.)

Наконец, я не знаю драйвера Java, я использую С++. Когда мне это не удается, мне сказали. Поэтому я могу попробовать с другим набором IP-адресов, если это необходимо, до тех пор, пока он не будет работать... Моя система имеет одно соединение, которое остается между клиентскими обращениями, поэтому это одноразовый процесс, и я могу ретранслировать тот факт, что этот сервер подключен к Cassandra и, таким образом, может принимать клиентские соединения. Если вы повторно подключаетесь к Cassandra каждый раз, когда клиент отправляет вам запрос, может быть разумным не отправлять много IP-адресов вообще.