This material is made to educate operators, who deal with cassandra in production environment and based on cassandra version 1.1.X
이 자료는 Cassandra를 상용 환경에서 운용하기 위한, 운용자를 위한 교육 자료로 Cassandra 1.1.X를 기준으로 설명한 자료입니다.
2. 2
Day 1. Cassandra 기본 개념 잡기
Day 2.
Cassandra 설치 및 cluster 구성하기
(실습)
Day 3.
Cassandra cluster 관리 및 엔지니어링
(실습)
목차
3. 3
Day 1. Cassandra 기본 개념 잡기
1.Cassandra란?
2.Data model
3.Node
4.Cluster
목차(Day 1)
4. 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 Dynamo
Consistent hashing
Partitioning
Replication
One-hop routing
Google BigTable
Column Families
Memtables
SSTables
5. 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": "foo@bar.com",
"timestamp": 123456789 }
- 실제 카산드라에서는 해당 컬럼의 중복이 발생했을 때의 우선권 관리(conflict resolution)를 위해 timestamp라는
field를 함께 관리함
Column 2 Column 3Column 1
6. 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 간의 relation을 표현
하는 수단이 됨
›예: 도형)
Row 2
(key: YYY)
Row 1
(key: XXX)
7. 7
2.Data model
Column family
비슷한 유형의 데이터(column)을 묶는 컨테이너 형태의 데이터 구조
›RDBMS의 table과 유사한 개념
›예: 도형)
Row 2
(key: YYY)
Row 1
(key: XXX)
Column family
8. 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 family
Super column 1 Super column 2
Row 2
(key: XXX)
Super column 1 Super column 2
9. 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
Super
column
Super
column
Super column family
Keyspace
11. 11
3. Node
데이터 쓰기 프로세스
Cassandra node
1. Commit log에 순차적으로 데이터를 씀
› 순차적 데이터 기록으로 빠른 쓰기 속도 제공
› 서버가 죽어도 commit log로 복구 가능
2. Memtable에 해당 데이터를 적재함
› 빠른 서비스 속도 제공을 위해
3. SSTable에 최종적으로 데이터를 기재함
12. 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. 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. 14
카산드라의 각 노드의
상태 및 각 상태에 대한
Action을 다음과 SDL로
표현가능함
3. Node
Life Cycle
16. 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 manynodesare in yourcluster?4
token0: 0
token1: 42535295865117307932921825928971026432
token2: 85070591730234615865843651857942052864
token3: 127605887595351923798765477786913079296
17. 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. 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
A
N=3
h(key2)
h(key1)
• RF:1 or 3
• Partitioner: Random
• Snitch: Simple
• Replica Stragegy: Simple
19. 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. 20
4. Cluster
Repair
Hinted Handoff
› 노드가 일시적으로 죽어 있을 경우나 해당 노드로의 네트웍 다운이 발생한 경우, 있었던
쓰기 오퍼레이션에 대해서 주의 노드에서 로그를 간직했다 노드가 살아났을 때에 재전송
해주는 기능
•현재는 최대 1시간 까지 데이터를 보관함
Anti entropy repair
› 클러스터에 있는 모든 노드의 데이터를 비교하여 최신의 데이터로 업데이트를 해주어 복
잡성을 감소시키는 과정
›Delete mark가 되어있었던 데이터를 실제 정리해줌
›주기적으로 시행되어야함
•자원 소모 및 퍼포먼스 저하가 있음
21. 21
Day 2.
Cassandra 설치 및 cluster 구성하기
(실습)
1. 설치 준비 및 설치
2. 설정 파일 변경
3. 각 노드 구동 및 클러스터 구성
4. 클러스터 확장
5. 노드 제거 및 교체
목차(Day 2)
22. 22
1. 설치 준비 및 설치
<JDK install>
›Java download
›java install(Cent OS 기준)
<Cassandra install>
›Cassandra download
›Cassandra install
›JNA install
23. 23
1. 설정 파일 변경
cassandra.yaml 변경
›<변경 필요 사항>
›java install(Cent OS 기준)
cassandra.yaml 변경
›Cassandra download
›Cassandra install
›JNA install
Cassandra 관련 설정 파일 셋팅
24. 24
Day 3.
Cassandra cluster 관리 및 엔지니어링
(실습)
1. 개별 노드 백업 및 복원
2. 2 ring 구조 구성 및 크로스 백업 및 복원
3. Nodetool 및 Cassandra-cli 사용
4. Opscenter 사용
5. 벤치마크 테스트 하기
목차(Day 3)