2017-01-11 3 views
3

나는 카산드라에 새로운 오전는 샤딩 및 복제를 설명 this Article하지만가는 내가이되는 시점에서 막혔어요 - 나는 내 로컬 컴퓨터에서 구성 6 개 카산드라 노드가 클러스터를카산드라 샤딩 및 복제

. 복제 요소가 6 인 새 키 공간 "TestKeySpace"를 만들고 키 공간 "employee"의 테이블을 만들고 기본 키는 RID라는 자동 증분 번호입니다. 이 데이터가 어떻게 분할되고 복제되는지 이해할 수 없습니다. 내가 알고 싶은 것은 복제 계수를 6으로 유지하고 데이터가 여러 노드에 분산되고 나서 각 노드가 다른 노드와 똑같은 데이터를 갖게 될지 아닌지입니다. 내 클러스터 구성을 다음과 같은 것을하면

-

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

어떻게 다른 노드로 행동하는을하는 다른 두 개의 노드가 데이터 복제 어느 한 노드 (N1 가정 해 봅시다) 것으로 판단 할 수 있습니다 다른 파편들.

미리 감사드립니다.

감사합니다, Vibhav

PS - 사람 아래 표는이 질문에 친절하게 무엇이 잘못되었는지 설명에서 언급 않는 경우.

답변

5

간단한 예를 들어 설명하겠습니다. cassandra의 키 공간은 RDBMS의 데이터베이스 스키마 이름과 동일합니다.

우선은 키 스페이스를 만들 - userid은 파티션 키이며, 이름은 키를 클러스터링되어,이 예에서는

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

-

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

간단한 테이블을 만들 수 있습니다. 파티션은 행 키라고도하며,이 키는 저장할 노드 행을 판별합니다.

귀하의 첫 번째 질문 -이 데이터가 분할되는 방식을 이해할 수 없습니다입니다

?

데이터는 파티션 키에 따라 파티션됩니다. 기본적으로 C *는 Murmur3partitioner을 사용합니다. cassandra.yaml 구성 파일에서 파티셔를 변경할 수 있습니다. 파티션이 어떻게 발생하는지는 구성에 따라 다릅니다. 각 노드에 대해 토큰의 범위를 지정할 수 있습니다 (예 : cassandra.yaml 구성 파일 아래를보십시오). 귀하의 질문에 6 노드 양식을 지정했습니다. 노드 0

cassandra.yaml : 노드 1

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 : 기지국 2

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 :

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 ....- (위의 예 사용자 ID에 - 1)

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

파티션 설정 파티션 키의 해시를 계산하며,

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 

이 삽입 문을 수 있습니다 : 노드 5

cassandra.yaml 이 행이 저장 될 노드를 결정합니다. 계산 된 해시가 12345라고하면,이 행은 노드 0에 저장됩니다 (위의 구성에서 Node0의 initial_token 값을 찾습니다).

전체 cassandra.yaml 구성 configCassandra_yaml_r

당신이 deployCalcTokens을 통해 갈 수있는 토큰을 생성하는 방법을 알고 있습니다.

두 번째 질문 - 데이터가

을 복제됩니다 어떻게?

복제 전략 및 복제 계수에 따라 데이터는 각 노드에서 복제됩니다. 키 공간을 작성하는 동안 복제 인수 및 복제 전략을 지정해야합니다. 예를 들어 위의 예에서 복제 전략으로 SimpleStrategy을 사용했습니다. 이 전략은 소규모 클러스터에 적합합니다. 지질 학적으로 분산 된 응용 프로그램의 경우 NetworkTopologyStrategy을 사용할 수 있습니다. replication_factor는 만들려는 행의 복사본 수를 지정합니다.이 예제에서는 각 행의 복사본이 세 개 생성됩니다. 간단한 전략으로 카산드라는 시계 방향을 사용하여 행을 복사합니다.

위의 예에서 행은 Node0에 저장되고 Node1과 Node2에는 동일한 노드가 복사됩니다. 의 또 다른 예를 보자 -

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

사용자 ID 448454를 들어, 계산 된 해시 3074457345618258609 말, 그래서 노드 2에 복사 될 수도 있습니다 (위의 구성에서 노드 2의 initial_token 값 확인) 및 저장이 행이 될 것입니다 노드 3과 노드 4에 시계 방향으로 (우리는 복제 계수 3을 지정 했으므로 Noe2, Node3, Node4의 세 복사본 만 지정했다는 것을 기억하십시오).

희망이 도움이됩니다.

+0

감사합니다. @Gunwant. 당신의 대답은 많은 도움이되었습니다. –