2015-08-05 7 views
1

Мы используем несколько экземпляров кластера cassandra datastax (6) для подключения к cassandra с использованием python. Мы объединяем эти множественные соединения для выполнения некоторых операций. Каждая операция не зависит от других.Невозможное масштабирование cassandra с использованием последнего драйвера python datastax

Он отлично работает на небольшом числе операций, но когда я пытаюсь расширить масштабы я получаю следующие ошибки:

NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.ption('Pool is shutdown',)}) 

и иногда следующее предупреждение:

WARNING Heartbeat failed for connection (140414695068880) to 127.0.0.1 

Я попытался изменить некоторые параметры объекта кластера, но это не помогло.

Ниже конфигурация пространства ключей в Кассандры я использую:

'класс': 'SimpleStrategy', 'replication_factor': '1'

Я использую Lastest версии Кассандры и datastax драйвер для python. Существует только один узел - кассандра.

EDIT: Подробнее:

В нескольких экземпляров кластера находятся в разных процессах (процессы, создаются с помощью модуля многопроцессорной Python) - один экземпляр кластера для каждого процесса. Позволяет вызвать процессы Cassandra-Processes (CP). Есть куча другого процесса, который выполняет некоторые вычисления и должен искать Cassandra DB, и писать ему, иногда. Текущий дизайн состоит в том, что каждый из этих процессов сопоставляется с одним CP, и все чтения/записи БД, выполняемые процессом, выполняются с помощью этого сопоставленного CP. «то, что» точно должно быть прочитано/записано, передается в очередь (опять же из библиотеки многопроцессорности), которую считывает отображаемый CP.

Мы наблюдаем, что эта настройка работает довольно давно - и затем внезапно Кассандра начинает выходить из строя.

+0

Вы предоставили нам небольшую информацию, чтобы мы могли вам помочь. Выполнение простого поиска в Google показывает, что существует множество способов получить это поведение с помощью Casandra. Существует также зарегистрированная ошибка с этим названием. – theAlse

+0

обновил вопрос. Благодарю. – santosh

+0

Кассандра версия? Версия драйвера? Есть ли ошибки в журнале сервера? Дополнительные подсказки, доступные из журналов отладки драйвера? –

ответ

0

Дистанционный диагноз трудно сделать, не зная ничего о вашей конкретной топологии, настройке и конфигурации системы. Это похоже на проблему конфигурации или даже драйвер python. Если вы сообщите об ошибке в своем сообщении об ошибке, вы найдете несколько тем в Jira Datastax, описывающих эту или подобные проблемы, я бы проверял, что Python Driver обновлен. Что поможет в первую очередь - подробно посмотреть, что вы пытаетесь сделать, как настроен ваш кластер.

1

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

Если вы хотите «масштабировать» в отношении пропускной способности, вы можете рассмотреть возможность использования многопроцессорности. Я обсуждаю это в блоге here.


Follow-on:

Две вещи можно сделать вывод из информации, которую мы имеем до сих пор:

  1. Приложение толкая более одновременных запросов, чем ваш пул подключений настроен для обработки. Я говорю это, потому что «Пул выключен» происходит только тогда, когда запрос ожидает, когда соединение/поток станет доступным.Вы можете настроить объединение пулов, чтобы сделать более доступным изначально, используя cluster settings. Однако, если ваш «кластер» (серверный узел) перегружен, вы не получите многого.
  2. Ваше соединение отключено. Это исключение происходит только тогда, когда узел внезапно помечен. В конфигурации с одним узлом это, скорее всего, связано с ошибкой соединения. Ищите подсказки в журнале сервера, или журнал отладки драйвера, если вы его захватили.

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

+0

спасибо за ответ и очень информативный пост! Кажется, что в примерах в сообщении вы создаете несколько экземпляров кластера, по одному на процесс в пуле. Чем он отличается от того, что делает OP? Или вы говорите, что это имеет смысл только с несколькими узлами? – abhgh

+0

Да, это сообщение показывает один экземпляр кластера для каждого процесса (также объясняет, почему). Я не получил от OP, что в этом сценарии задействована многопроцессорная обработка. Как отмечали другие, здесь не хватает подробностей. Я надеялся, что примеры приведут в правильном направлении без дальнейшего открытия с нашей стороны. –

+0

Я знаю ОП и проект :) - Я попрошу его добавить дополнительные сведения. – abhgh

Смежные вопросы