2017-01-11 4 views
3

Я новичок Кассандре собирался, хотя this Article объяснения шардинга и репликации, и я застрял в точке, -Cassandra Sharding и репликации

У меня есть кластер с 6 Cassandra узлов, настроенных на моей локальной машине. Я создаю новое пространство ключей «TestKeySpace» с коэффициентом репликации как 6, а таблица в «пространстве» в ключевом пространстве, а первичный ключ - это номер автоинкремента с именем RID. Я не могу понять, как эти данные будут разбиты на разделы и реплицированы. Я хочу знать, так как я сохраняю свой коэффициент репликации равным 6, и данные будут распределены по нескольким узлам, тогда каждый узел будет иметь точно такие же данные, что и другие узлы, или нет?

Что делать, если мой кластер имеет следующую конфигурацию -

Number of nodes - 6 (n1, n2 ,n3, n4, n5 and n6). 
    replication_factor - 3. 

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

Спасибо заранее.

С уважением, Vibhav

PS - Если кто-нибудь вниз голосов этот вопрос любезно упоминают в комментариях, что пошло не так.

ответ

5

Объясню это простым примером. Ключевое пространство в кассандре эквивалентно имени схемы базы данных в СУБД.

Сначала нужно создать пространство ключей -

CREATE KEYSPACE MYKEYSPACE WITH REPLICATION = { 
'class' : 'SimpleStrategy', 
'replication_factor' : 3 
}; 

Позволяет создать простую таблицу -

CREATE TABLE USER_BY_USERID(
userid int, 
name text, 
email text, 
PRIMARY KEY(userid, name) 
) WITH CLUSTERING ORDER BY(name DESC); 

В этом примере userid является ключом разделов и имя кластеризация ключа. Раздел также называется ключом строки, этот ключ определяет, какая строка узла будет сохранена.

Ваш первый вопрос -

Я не могу понять, как будет разделена эти данные?

Данные будут разбиты на разделы на основе ключа раздела. По умолчанию C * использует Murmur3partitioner. Вы можете изменить разделитель в файле конфигурации cassandra.yaml. Как происходит разделение, также зависит от вашей конфигурации. Вы можете указать диапазон токенов для каждого узла, например, посмотрите ниже файл конфигурации cassandra.yaml. Я задал 6 узлов из вашего вопроса.

cassandra.yaml для узла 0:

cluster_name: 'MyCluster' 
initial_token: 0 
seed_provider: 
    - seeds: "198.211.xxx.0" 
listen_address: 198.211.xxx.0 
rpc_address: 0.0.0.0 
endpoint_snitch: RackInferringSnitch 

cassandra.yaml для узла 1:

cluster_name: 'MyCluster' 
initial_token: 3074457345618258602 
seed_provider: 
    - seeds: "198.211.xxx.0" 
listen_address: 192.241.xxx.0 
rpc_address: 0.0.0.0 
endpoint_snitch: RackInferringSnitch 

cassandra.yaml для узла 2:

cluster_name: 'MyCluster' 
initial_token: 6148914691236517205 
seed_provider: 
    - seeds: "198.211.xxx.0" 
listen_address: 37.139.xxx.0 
rpc_address: 0.0.0.0 
endpoint_snitch: RackInferringSnitch 

.... ... Node3 ...... Node4 ....

cassandra.yaml для узла 5:

cluster_name: 'MyCluster' 
initial_token: {some large number} 
seed_provider: 
    - seeds: "198.211.xxx.0" 
listen_address: 37.139.xxx.0 
rpc_address: 0.0.0.0 
endpoint_snitch: RackInferringSnitch 

позволяет принять эту вставку заявление -

INSERT INTO USER_BY_USERID VALUES(
1, 
"Darth Veder", 
"[email protected]" 
); 

Разметка вычислит хэш ключа секционирования (в приведенном выше примере идентификатор пользователя - 1), и решает, какой узел будет сохранен в этой строке. Предположим, что рассчитанный хеш - это что-то 12345, эта строка будет сохранена в Node 0 (найдите значение initial_token для Node0 в приведенной выше конфигурации).

Полная конфигурация cassandra.yaml configCassandra_yaml_r

Вы можете пройти через этот deployCalcTokens знать, как генерировать маркеры.

Второй вопрос -

как получает данные реплицируются?

В зависимости от стратегии репликации и коэффициента репликации данные реплицируются на каждом узле. вам нужно указать коэффициент репликации и стратегию репликации при создании пространства ключей. Например, в приведенном выше примере я использовал SimpleStrategy в качестве стратегии репликации. Эта стратегия подходит для небольших кластеров. Для геологически распределенного приложения вы можете использовать NetworkTopologyStrategy. replication_factor указывает, сколько копий строки будет создано, в этом примере будут созданы три копии каждой строки. С простой стратегией, cassandra будет использовать по часовой стрелке для копирования строки.

В приведенном выше примере строка сохраняется в Node0, и тот же узел копируется на узлах Node1 и Node2. Давайте возьмем другой пример -

INSERT INTO USER_BY_USERID VALUES(
448454, 
"Obi wan kenobi", 
"[email protected]" 
); 

Для идентификатора пользователя 448454, вычисленный хэш сказать 3074457345618258609, поэтому эта строка будет экономить на Node2 (обратите внимание на initial_token значение для узла 2 в указанной выше конфигурации), а также копируются по часовой стрелке до Node3 и Node4 (помните, что мы определили коэффициент репликации 3, поэтому только три копии Noe2, Node3, Node4).

Надеюсь, это поможет.

+0

спасибо большое @Gunwant. Ваш ответ очень помог. –

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