Cassandra education material
-
Upload
youngki-kim -
Category
Technology
-
view
1.327 -
download
0
description
Transcript of Cassandra education material
1
Cassandra
Youngki Kim
교육 자료
이 자료는 Cassandra 를 상용환경에서 운용하기 위한 , 운용자를 위한 교육 자료로 Cassandra 1.1.X 를 기준으로 설명한 자료입니다 .
2
Day 1. Cassandra 기본 개념 잡기
Day 2.Cassandra 설치 및 cluster 구성하기
( 실습 )
Day 3.Cassandra cluster 관리 및 엔지니어링
( 실습 )
목차
3
Day 1. Cassandra 기본 개념 잡기
1.Cassandra 란 ?
2.Data model
3.Node
4.Cluster
목차 (Day 1)
4
1.Cassandra 란
고성능을 보장하면서도 , 높은 확장성과 가용성을 원할 때 좋은 선택입니다 .
연혁›Facebook 에서 최초로 개발됨›Facebook 에서 Opensource 로 개방하여 apache 재단에서 관리됨 (2008~)
Big data 관련 인프라로 주요 기업에서 채택하여 사용 중임In use at 1000s of organizations worldwide, including Twitter, Netflix, Cisco, Rackspace, as well as in government/intelligence, financial services, telecommunications and logistics
주요 특징› 수평적 확장이 용이한 Ring 구조의 클러스터 아키텍쳐› 유연한 데이터 구조 제공› 아주 빠른 쓰기 속도› 조절 가능한 consistency level
http://cassandra.apache.org/
Amazon DynamoConsistent hashing
PartitioningReplication
One-hop routing
Google BigTableColumn Families
MemtablesSSTables
5
2.Data model
Column
Name 과 value 의 짝으로 이루어진 카산드라 데이터 구조의 최소 단위
›예 1: 도형 )
›예 2: thrift definition)• struct Column
{ 1: binary name,
2: binary value,
3: i64 timestamp, }
›예 3: JSON 양식의 표현 )• { "name": "emailAddress",
"value": "[email protected]",
"timestamp": 123456789 }
실제 카산드라에서는 해당 컬럼의 중복이 발생했을 때의 우선권 관리 (conflict resolution) 를 위해 timestamp라는 field 를 함께 관리함
Column 2
Column 3
Column 1
6
2.Data model
Row and Row key
Row: 하나 이상의 column 들이 순차적으로 저장되는 단위Row key: Row 에 부여하는 unique 한 인자 값
›Row key 는 column family 에만 unique 함• 다른 column family 에 같은 값의 row key 가 있을 경우 두 column family 간의 rela-tion 을 표현하는 수단이 됨
›예 : 도형 )
Row 2 (key: YYY)
Row 1 (key: XXX)
7
2.Data model
Column family
비슷한 유형의 데이터 (column) 을 묶는 컨테이너 형태의 데이터 구조
›RDBMS 의 table 과 유사한 개념
›예 : 도형 )
Row 2 (key: YYY)
Row 1 (key: XXX)
Column family
8
Super column family
›연관된 column 들을 개념적으로 묶어서 관리하고 싶을 때에 사용하는 column family
Super column
›연관된 column 들의 묶음을 정의하는 데이터 구조예 : 도형 )
2.Data model
Super column family and Super column
Row 1 (key: XXX)
Super column familySuper column
1Super column
2
Row 2 (key: XXX)
Super column 1
Super column 2
9
Column family 혹은 super column family 의 컨테이너 역할 , RDBMS 의 database와 유사
복제 계수 (Replication factor), 복제 정책 (Replica placement) 이 설정되는 단위
전체적인 카산드라 데이터 모델 구조
2.Data model
Keyspace
Column
Column family
Row (key)
Column
Column
Row (key)
Column
Supercolumn
Supercolumn
Super column family
Keyspace
10
2.Data model
Real_System example
Super column family: files(Keyspace: storageSub-system)
Column family: Location-info(Keyspace: System)
11
3. Node
데이터 쓰기 프로세스
Cassandra node
1. Commit log 에 순차적으로 데이터를 씀
› 순차적 데이터 기록으로 빠른 쓰기 속도 제공
› 서버가 죽어도 commit log 로 복구 가능
2. Memtable 에 해당 데이터를 적재함
› 빠른 서비스 속도 제공을 위해
3. SSTable 에 최종적으로 데이터를 기재함
12
3. Node
데이터 읽기 프로세스
Node CPU
Cassandra node
Client Read request(row key: AA)
(row key: AA)
(row key: AA) (row key: AA)
1. 클라이언트에서 특정 row key 요청
2. 해당 row key 를 가지고 있는SSTable 이나 memtable 추출
› 이 때에 모든 SSTable 에 대한Disk I/O 를 만들지 않기 위해memtable 에 bloomfilter 라는 index 를 둠
3. Timestamp 를 기준으로가장 최신의 데이터를 응답합
13
3. Node
데이터 관리 (Compaction)
K1 < Serialized data >
K2 < Serialized data >
K3 < Serialized data >
--
--
--
Sorted
K2 < Serialized data >
K10 < Serialized data >
K30 < Serialized data >
--
--
--
Sorted
K4 < Serialized data >
K5 < Serialized data >
K10 < Serialized data >
--
--
--
Sorted
MERGE SORT
K1 < Serialized data >
K2 < Serialized data >
K3 < Serialized data >
K4 < Serialized data >
K5 < Serialized data >
K10 < Serialized data >
K30 < Serialized data >
Sorted
Data File
D E L E T E D
1. 다수의 SSTable 파일을 하나의 SSTable 파일로 병합함
› 중복되는 row key 를 정리해서데이터 디스크 파일 사이즈를 컴팩트하게 관리함
› Threshold 에 이르면 시행됨
14
카산드라의 각 노드의상태 및 각 상태에 대한 Action 을 다음과 SDL 로표현가능함
3. Node
Life Cycle
15
4. Cluster
Life Cycle
카산드라 클러스터는 개별 노드의 집합임›같은 cluster name
›같은 seed node
16
4. Cluster
Token
각 노드는 고유한 값인 token 값을 가지며 , 각 노드가 가지고 있는 token 값이 그 노드가 카산드라 클러스터 내에서 데이터를 분담하는 기준이 됨
›Token 은 cassandra 가 최초 시작될 때에 설정파일 (cassandra.yaml) 에 있는 정보로 구동
›재 구동 될때에는 cache 정보를 기준으로 구동됨
›Nodetool 로 노드의 token 값을 조정할 수 있음Token 계산 식
N= 클러스터의 전체 노드 개수 , i= 노드 번호
For(i=0;i++;i<N)
{
Token_for_Node(i)= i * (2**127 / N);
}
예 )How many nodes are in your cluster? 4 token 0: 0 token 1: 42535295865117307932921825928971026432 token 2: 85070591730234615865843651857942052864 token 3: 127605887595351923798765477786913079296
17
4. Cluster
데이터가 카산드라 클러스터에 저장되는 방법 < 기본 용어 설명 >Keyspace
›Replication Factor: 카산드라 클러스터에 저장되는 원본 포함 복제본 데이터의 개수
›Replica Placement: RF 가 1 이 상일 때에 복제본을 다른 노드에 저장하는 방식• Simple Strategy: 토큰을 기준으로 인접한 노드에 저장• Network Topology Strategy: 카산드라 노드가 네트웍상에 배치된 구조를 고려하여 복사본 저장
Cluster
›Snitch: 카산드라 노드의 배치를 정의함•Simple Snitch: 모든 노드가 같은 네트웍에 있는 기본 설정•Rack Inferring Snitch: IP 대역으로 구분•Property File Snitch: Config File 에 명시
›Partitioner: 데이터의 분배 방식
18
<Replication factor=1 일 경우 >
›노드 A, B, C 로 클러스터가 구성됨•노드의 token 값의 오름차순 결과를 기준으로시계방향으로 노드를 배치한 논리적인Ring 구조를 이룸
›Row key1 쓰기 요청•Row key1 의 MD5 hash 계산•Hash 결과 값을 기점으로 시계 방향으로 이동했을 때에 첫번째 위치한노드가 해당 데이터를 저장
›Row key2 의 쓰기 요청 ( 마찬가지 )
노드 D,E,F 가 클러스터에 추가될 경우
›해당 노드의 token 값을 기준으로 클러스터에배치되며 데이터 관리 영역을 분배 받음
<Replication factor=3 일 경우 >
›노드가 클러스터를 구성하는 방법은RF=1 일 경우와 동일
›쓰기 요청된 Row key 가 처음 저장되는 노드를정하는 방식도 RF=1 일 경우와 동일
›차이점은 시계 방향으로 RF=3 을 만족시키기 위해연속된 2 개의 노드에 데이터를 추가적으로 기록함
4. Cluster
클러스터에 데이터를 쓰는 방식 설명 (animation)
02^127
2^127/2
F
E
D
C
B
AN=3
h(key2)
h(key1)
• RF:1 or 3• Partitioner: Random• Snitch: Simple• Replica Stragegy: Simple
19
4. Cluster
Consistency level
클라이언트에서 카산드라에 쓰기 혹은 읽기 오퍼레이션을 요청했을 때에 , 카산드라가 응답을 주는 Consistency level 에 대한 조절이 가능함
›만약에 RF 3 에 , 읽기 쓰기 오퍼레이션 모두 QUORUM 옵션을 지정하여 사용 한다면 ,
•1 개의 노드 down 까지는 용납 가능함
참고 : http://www.datastax.com/docs/1.0/dml/data_consistency
Level 필요한 Node 쓰기 읽기
ONE 1 commit log 와 memtable 이 성공하면 클라이언트에 OK 반환
가장 가까운 노드에서 응답이 오면 바로 OK 반환 , Read repair 실시
QUORUM (N /2) + 1, 소수점 1 자리 내림
QUORUM 숫자의 응답을 받아 최신 timestamp 를 가진 값을 응답
ALL N = replication factor RF 숫자의 응답을 받아 , 최신 timestamp 를 가진 값을 응답
20
4. Cluster
Repair
Hinted Handoff
› 노드가 일시적으로 죽어 있을 경우나 해당 노드로의 네트웍 다운이 발생한 경우 , 있었던 쓰기 오퍼레이션에 대해서 주의 노드에서 로그를 간직했다 노드가 살아났을 때에 재전송 해주는 기능•현재는 최대 1 시간 까지 데이터를 보관함
Anti entropy repair
› 클러스터에 있는 모든 노드의 데이터를 비교하여 최신의 데이터로 업데이트를 해주어 복잡성을 감소시키는 과정
›Delete mark 가 되어있었던 데이터를 실제 정리해줌
›주기적으로 시행되어야함•자원 소모 및 퍼포먼스 저하가 있음
21
Day 2.Cassandra 설치 및 cluster 구성하기
( 실습 )
1. 설치 준비 및 설치
2. 설정 파일 변경
3. 각 노드 구동 및 클러스터 구성
4. 클러스터 확장
5. 노드 제거 및 교체
목차 (Day 2)
22
1. 설치 준비 및 설치
<JDK install>
›Java download
›java install(Cent OS 기준 )
<Cassandra install>
›Cassandra download
›Cassandra install
›JNA install
참조
›http://dbnosql.wordpress.com/2012/07/16/cassandra-jna-%EA%B5%AC%EC%84%B1/
23
1. 설정 파일 변경
cassandra.yaml 변경
›< 변경 필요 사항 >
›java install(Cent OS 기준 )
cassandra.yaml 변경
›Cassandra download
›Cassandra install
›JNA install
참조
›http://dbnosql.wordpress.com/2012/07/16/cassandra-jna-%EA%B5%AC%EC%84%B1/
Cassandra 관련 설정 파일 셋팅
24
Day 3.Cassandra cluster 관리 및 엔지니어링
( 실습 )
1. 개별 노드 백업 및 복원
2. 2 ring 구조 구성 및 크로스 백업 및 복원
3. Nodetool 및 Cassandra-cli 사용
4. Opscenter 사용
5. 벤치마크 테스트 하기
목차 (Day 3)