Репликация в кассандре

Как работает репликация в Cassandra? Если у меня есть 3 стойки и 3 RF с NetworkTopologyStratagy, будут ли данные реплицированы на все 3 стойки?

Как именно данные будут реплицироваться в кластере? Я спрашиваю, потому что мы проектируем наш кластер с учетом наихудшего сценария, когда 2 из 3 стоек выходят из строя, и мы не хотим терять данные.

У нас всего один датацентр с 3 стойками.

Если я использую:

CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3  }

Будет ли это реплицироваться на все три стойки?


person Rock    schedule 25.04.2014    source источник


Ответы (3)


В документации Cassandra 1.0 есть статья, в которой это довольно хорошо объясняется: О репликации в Cassandra< /а>.

Я предполагаю, что у вас есть два (логических?) центра обработки данных. Допустим, у вас две стойки в одном ДЦ и последняя стойка в другом, и на каждой СТОЙКЕ у вас по 2 узла. Вы должны определить их в файле топологии, чтобы они выглядели примерно так:

server1IP=DC1:RACK1
server2IP=DC1:RACK1
server3IP=DC2:RACK1
server4IP=DC2:RACK1
server5IP=DC2:RACK2
server6IP=DC2:RACK2

Если вы хотите иметь 3 копии данных (по одной для каждой логической стойки), вы определите свое пространство ключей для использования NetworkTopologyStrategy с настройками репликации для каждого контроллера домена, например так:

CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};

Перехватчик PropertyFile также «осведомлен о стойке», поэтому, когда происходит запись, он гарантирует, что одна копия данных находится на узле в RACK1 в DC1, и по одной копии на каждом RACK в DC2. Исходя из того, что вы говорите, может иметь смысл иметь три логических центра обработки данных, каждый с одной стойкой.

Вам также следует ознакомиться с этим документом в разделе "Выбор параметров репликации пространства ключей" это далее объясняет, как настроить репликацию.

РЕДАКТИРОВАТЬ:

Если я использую CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', replicationfactor: 3}. Будет ли это реплицироваться на все три стойки?

Я не уверен. Но каждый найденный мной пример определения стратегии репликации пространства ключей с использованием NetworkTopologyStrategy только с одним контроллером домена конкретно называет контроллер домена, а не указывает «коэффициент репликации». Даже в документе, который я связал, говорится:

NetworkTopologyStrategy принимает в качестве параметров количество реплик, которое необходимо для каждого центра обработки данных. Даже для кластеров с одним центром обработки данных (или с одним узлом) вы можете использовать эту стратегию размещения реплик и просто определить количество реплик для одного центра обработки данных.

Итак, если вы назовете свой контроллер домена DC1, это будет выглядеть так:

CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}

Если вы сделали это и определили три стойки под этим контроллером домена, одна копия будет реплицирована на все три стойки.

person Aaron    schedule 25.04.2014
comment
У нас всего один ДЦ с тремя стойками. Если я использую CREATE KEYSPACE myKeyspaceName WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'replication_factor': 3}. Будет ли это реплицироваться на все три стойки? - person Rock; 25.04.2014

Репликация полностью зависит от стратегии репликации вашего пространства ключей и макета вашего кластера. Этот макет определяется двумя вещами: центрами обработки данных и стойками. Центры обработки данных — это группа стоек, с которыми следует обращаться так, как если бы они были отделены от других машин.

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

Стойки только помогают кластеру определить, где разместить реплики в центре обработки данных. Когда это возможно, C* пытается разместить реплики в центре обработки данных на отдельных стойках.

Доступность вашей службы (возможны чтение и запись) зависит от уровня согласованности, который вы выбираете для клиентских операций. Для уровня согласованности One требуется, чтобы только одна реплика была подключена к сети, для Quorum требуется 1/2 от общего числа реплик + 1. Большинство людей, использующих NetworkTopologyStrategy, используют Local_One или Local_Quorum (1/2 узлов в контактном DC + 1), что минимизирует трафик между DC. .

Калькулятор, чтобы вычислить, сколько узлов выйдет из строя, прежде чем у вас появятся недоступные исключения

Репликация

Последовательность

person RussS    schedule 25.04.2014
comment
У нас всего один датацентр с 3 стойками. Если я использую CREATE KEYSPACE myKeyspaceName WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'replication_factor': 3}. Будет ли это реплицироваться на все три стойки? - person Rock; 25.04.2014
comment
+1 за упоминание согласованности на стороне клиента, поскольку настройка репликации кластера — это только половина дела. - person Aaron; 25.04.2014

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

person user3707180    schedule 19.05.2016