2015-01-05 2 views
8

У меня есть два сервера для запуска Cassandra, следуя документации на веб-сайте DataStax. Моя текущая настройка должна иметьCassandra два узла с резервированием

1 узел семян (настраивается в обоих yamls)

При запуске, оба узла вверх (при тестировании с помощью nodetool), и оба, кажется, данные реплицируются правильно, но Я заметил, что когда я уничтожаю семенной узел, другой узел не разрешает клиентские соединения (ни через их API, ни путем подключения к cqlsh), что является проблемой.

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

Учитывая этот requriement, у меня есть следующие вопросы:

  1. Мне нужно установить оба узла, как «семенных» узлы ли?
  2. Как я могу убедиться, что все реплицировано на обоих серверах? Это происходит автоматически или есть какие-то настройки, которые мне нужно установить?

Большое спасибо заранее,

ответ

16

Cassandra не делает мастер-ведомый репликации. В кассандре нет мастера. Скорее, данные распределяются по кластеру. Механизм распределения зависит от ряда факторов.

Данные хранятся на узлах в разделах. Помните, что cassandra является секционированным хранилищем строк? Это то место, где входят разделы. Данные хранятся в разделах. Все строки для раздела хранятся вместе в одном узле (и репликах). Сколько реплик зависит от коэффициента репликации таблицы. Если коэффициент репликации равен 3 для таблицы, каждый раздел для этой таблицы (и как таковой, все строки в этом разделе) хранятся в двух дополнительных репликах. Это как сказать: «Я хочу 3 копии этих данных».

Во время записи клиенты могут указывать уровень согласованности (CL). Это число узлов, которые должны подтвердить успешность записи. Клиенты также могут указать CL для чтения. Cassandra отправляет запросы на чтение в n = CL узлы и берет последнее значение в качестве результата запроса.

Путем настройки CLI чтения и записи вы контролируете согласованность. Если Read CL + Write CL> Коэффициент репликации (RF), вы получите полную согласованность.

Что касается отказоустойчивости, вы можете настроить CL и RF, чтобы быть тем, что вам нужно. Например, если у вас RF = 3, прочитайте CL = 2, напишите CL = 2, тогда вы получите полную согласованность, и вы можете переносить один узел вниз. Для RF = 5, прочитайте CL = 3, напишите CL = 3, вы будете иметь то же самое, но можете переносить 2 узла вниз.

Двухузловой кластер, на самом деле не очень хорошая идея. Вы можете установить RF = 2 (все реплицированные данные), написать CL = 2 и прочитать CL = 1. Однако это будет означать, что если узел опущен, вы можете читать, но не писать. Вы можете установить CL = 2 и записать CL = 1, и в этом случае, если узел опустится, вы можете писать, но не читать. Реально, вы должны пойти как минимум на 5 (по крайней мере 4) узлов с RF = 3. Все меньше, и вы просите о неприятностях.

+0

Я должен добавить, что с двумя узлами вы можете выполнить RF = 2, прочитать CL = 1 и записать CL = 1; однако это означает, что вы можете читать устаревшие данные до тех пор, пока они не будут реплицированы на другой узел.Это позволит вам читать и писать, если живет только один узел, но вы жертвуете согласованностью. – ashic

+0

Большое спасибо за ваш ответ. Отличное объяснение. Один последний вопрос, если бы я решил выбрать 2 узла с Read/Write CL = 1 (я знаю, что это не очень хорошо, но у меня только 2 сервера в моем распоряжении на моем этапе бета-версии, и вы сможете добавлять больше серверов позже), мне нужно установить оба узла как «семена», чтобы в случае падения одного узла/сервера соединение все еще возможно? – kha

+0

Семена не * это * критический. Это адрес, который вы даете клиентам, полагая, что семенные узлы будут стабильными. Клиент будет подключаться к семени и получать информацию о остальной части кластера. Затем он будет подключаться к любому узлу кластера для транзакций. Если вы не укажете семена, информация может распространяться в любом случае сплетнями. Если вы сообщите клиенту о подключении к несеянию, это не должно вызывать проблемы для настройки вашего двух узлов. Если вы помечаете как семена, если клиент подключается к одному, а он вниз, он будет подключаться к другому. Я бы обозначил их как семена. – ashic

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