Узлы Cassandra в одном и том же центре обработки данных дают разные результаты / ошибки - PullRequest
0 голосов
/ 13 декабря 2018

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

У меня есть пространство ключей X с ReplicationFactor 3, в котором имеется 3 копии в центре обработки данныхDC1 и 3 копии в центре обработки данных DC2 (KEYSPACE X WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '3'} AND durable_writes = true;)

Теперь, что я делаю (и, возможно, мне здесь чего-то не хватает), так это то, что я подключаюсь к каждому узлу в центре данных DC2 (скажем, node2A, node2B и node2C) и выполните следующие действия:

  • cqlsh node2N
  • согласованность всех
  • выбор * из x.table;

и путем настройкисогласованность со ВСЕМ, я знаю, что должен получить ответ от каждого узла, 3 из которых принадлежат DC1 и 3 из DC2, всего 6 ответов.Но вместо этого я получаю 3 разных результата в каждом узле:

  • node2A: запрос не выполняется с Cannot achieve consistency level ALL info: {'required_replicas': 6, 'alive_replicas': 5, 'consistency': ALL}
  • node2B: запрос завершается успешно и возвращает данные таблицы
  • node2C: запрос занимает 1-2 минуты, а затем возвращает Coordinator node timed out waiting for replica nodes' responses. Operation timed out - received only 5 responses. info: {'received_responses': 5, 'required_responses': 6, 'consistency': ALL}

Причина, по которой я выполняю эти запросы в cqlsh, заключается в том, что одно из наших приложений работаетошибочно при запросе cassandra (говоря о таких вещах, как недостаточно реплик для QUORUM и т. д.), и я подозреваю, что у нас могут быть некоторые проблемы со связью между узлами.Либо сплетни рассказывают разные вещи разным узлам, либо что-то в этом роде.Связь работает от каждого узла к любому другому узлу (мы можем cqlsh, ssh и все остальное).

Может ли моя теория быть правильной, и у нас есть какое-то несоответствие в конфигурации?Если так, как я мог отладить эти ошибки?Есть ли способ узнать, какой узел не жив или не отвечает, чтобы я мог более внимательно изучить его коммуникации?Я пробовал с «отслеживанием по», но он работает только для успешных запросов, поэтому я получаю только трассировки в node2B (кстати, поведение не всегда одинаково на одном и том же узле, оно кажется случайным)

Если нет, мой тест на cqlsh действителен?Или я здесь упускаю какую-то жизненно важную часть головоломки Кассандры?

Большое спасибо заранее, я схожу с ума здесь ....

РЕДАКТИРОВАТЬ: По запросу, вот выводnodetool описать кластер.Я сделал это во всех 3 узлах DC2 и:

  • node2A:

Cluster Information: Name: Cassandra Cluster Snitch: org.apache.cassandra.locator.DynamicEndpointSnitch Partitioner: org.apache.cassandra.dht.Murmur3Partitioner Schema versions: 19ada8a5-4688-3fa8-9479-e612388f67ee: [node2A, node2B, node1A, node1B, node1C, other IPs from other nodes (from other datacenters and keyspaces)]

  • node2B:

Cluster Information: Name: Cassandra Cluster Snitch: org.apache.cassandra.locator.DynamicEndpointSnitch Partitioner: org.apache.cassandra.dht.Murmur3Partitioner Schema versions: 19ada8a5-4688-3fa8-9479-e612388f67ee: [node2A, node2B, node2C, node1A, node1B, node1C, other IPs from other nodes (from other datacenters and keyspaces)] UNREACHABLE: [couple of IPs from other datacenter/keyspaces]

  • node2C:

Cluster Information: Name: Cassandra Cluster Snitch: org.apache.cassandra.locator.DynamicEndpointSnitch Partitioner: org.apache.cassandra.dht.Murmur3Partitioner Schema versions: 19ada8a5-4688-3fa8-9479-e612388f67ee: [node2B, node2C, node1A, node1B, node1C, other IPs from other nodes (from other datacenters and keyspaces)] UNREACHABLE: [node2A and other IPs]

Стоит отметить, что в узле 2A нет узла 2C, в узле 2B все 3появляются узлы, и в node2C у нас есть node2A как UNREACHABLE ...

Я чувствую, что это очень неправильно, как-то ...

Я только что выполнил "пространство ключей состояния nodetoolX", и эторезультаты:

  • node2A:

Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN node2A 67,78 MB 256 100,0% - RAC1 UN node2B 67,18 MB 256 100,0% - RAC1 ?N node2C 67,11 MB 256 100,0% - RAC1

  • node2B:

Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN node2A 67,78 MB 256 100,0% - RAC1 UN node2B 67,18 MB 256 100,0% - RAC1 UN node2C 67,11 MB 256 100,0% - RAC1

  • node2C:

Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN node2A 67,78 MB 256 100,0% - RAC1 UN node2B 67,18 MB 256 100,0% - RAC1 UN node2C 67,11 MB 256 100,0% - RAC1

Теперь, почему node2A не знает состояние node2C (оно отображается как? И не былопоявиться в схеме описания описываемого кластера)?Но почему node2C, который жаловался на node2A как UNREACHABLE в описывающем кластере, знает, что node2A находится в состоянии Up согласно статусу?

1 Ответ

0 голосов
/ 13 декабря 2018

Во-первых, вы можете проверить, доступен ли какой-либо узел или нет, вы можете запустить nodetool, описать кластер и проанализировать вывод.

Связь между узлом происходит через сплетни и обмен сообщениями через порт 7000, а не через ssh.или cqlsh.

О 3 вышеупомянутых вопросах: -

  • Когда вы выполняете запрос, возможно, что какой-либо узел был недоступен в то время, и вы не достигли согласованности какиспользовал ВСЕ.

  • Этот узел времени был жив и достиг согласованности, и вы получили данные.

  • В этом случае узел координатора не получилданные от всех узлов в течение времени и через исключение тайм-аута.он может быть установлен на cassandra.yaml.

Надеюсь, что ответил на ваш запрос.

...