본문 바로가기

NoSQL/Cassandra

Requirements for Cassandra on AWS

카산드라 리소스 요구사항

1. 스토리지 및 IO 요구사항

Cassandra에서 대부분의 I/O는 순차적입니다. 하지만 random I/O를 요청하는 케이스도 존재합니다. read 동작을 하는동안 SSTable 읽기 할때의 random I/O가 발생합니다.

SSD는 카산드라를 위해 추천되는 스토리지입니다. 왜냐하면 SSD는 병합동작을 위해 충분한 순차적 쓰기 동작을 제공하는 동안 random read 수행하는데 있어서 극도로 낮은 레이턴시 반응 시간을 제공하기 때문입니다.

replication과 병합에 의한 스토리지 오버헤드는 스토리지 요구사항을 결정하는 동안 고려되어야 합니다.

모든 볼륨을 file system을 xfs로 하는 것을 추천합니다. ex4는 기본설정하여 사용할 수 있습니다. ext3는 느리기 때문에 피하기를 권고합니다.

aws는 local storage와 EBS라는 두가지 타입을 제공합니다. local storage는 instance를 위해 자체적으로 사용가능합니다. EBS는 network로 붙인 스토리지입니다.

2. Network 요구사항

카산드라는 네트워크 망에서 다른 노드들과 함께 정보를 교환하기 위해 Gossip 프로토콜을 사용합니다.

카산드라의 분산특성과 함께 Gossip 사용은 read와 write 동작을 하기 위해 여러 노드들과 통한한다는 것과 관련이 있습니다. 그 결과 network에서 많은 통신이 이루어 질 것입니다.

AWS에서는 Gossip과 replication를 하가위한 충분한 공간을 확보하기 위해 항상 적어도 1Gbps를 가지는 인스턴스를 선택하기를 권고합니다. AWS를 사용할 때 높은 network이 활성화된 instance type 선택하기를 권고합니다.

enhanced networking은 더 나은 network 성능을 제공합니다.

3. 메모리 요구사항

카산드라는 기본적으로 JVM을 돌립니다. JVM은 성능을 위해 알맞은 사이즈를 가집니다. 큰 heap는 GC(Garbage Collection)을 일시중지시킬 수 있습니다. 레이턴시가 늘어날 수 있고, 심지어 카산드라가 중지될 수도 있습니다.

적절한 heap 세팅이 JVM에서 GC의 영향을 최소화할 것입니다.

MAX_HEAP_SIZE 파라미터는 Cassandra JVM의 heap size를 결정하는 파라미터입니다. datastax는 heap을 위해 8G이상 허용하지 않는 것을 권장합니다.

HEAP_NEW_SIZE 파라미터는 JAVA에서 새로운 세대의 사이즈입니다. 일반적인 규칙은 Amazon EC2위에선 vCPU당 100MB로 세팅하는 것을 권장합니다.

카산드라는 read performance를 위해 OS file Cache를 크게 신뢰합니다. 그렇기 때문에, 최적의 JVM heap size와 OS File Cache를 위한 충분한 메모리를 선택하는 것이 중요합니다.

production을 위해 AWS는 일반적인 권고사항으로 instance type을 최소 32G RAM을 선택하는 것을 권고합니다.

4. CPU 요구사항

카산드라 CPU요구사항을 볼때, 무거운 insert 워크로드들이 카산드라에서 CPU-bound되기 전에 CPU-counding되는 지에 대해 주의하는 것이 유용합니다.

다른 말로는, 모든 write 동작시에 commit log을 만듭니다. 하지만 카산드라는 writing에서 효율적으로 CPU 사용양을 제한합니다.

카산드라는 다량이 동시에 발생하기 때문에 가능한 많은 CPU 코어들이 필요합니다.

write가 심한 workload들 위해 Amazon EC2 instance를 선택할 때 instance type은 적어도 4 vCPU를 가지고 있어야 합니다. AWS는 테스트를 통해 각 서비스에 맞는 최적의 인스턴스를 찾는 것을 권고합니다.

5. 요구사항 종합

  • Storage : SSD(PIOPS 또는 GP)를 사용. xfs 추천. 혹은 ext4도 가능
  • Network : enhanced Network 옵션이 켜져있는 instance type 사용. 최소 1Gbps
  • Memory : 최소 32GB RAM 사용
  • CPU : 최소 4 Core 사용

    instance type
    cpu
    memory
    스토리지(GB)
    Network
    Enhanced Network Flag
    on demand cost
    m4.2xlarge832EBS 전용높음Yes$ 0.660
    m4.4xlarge1664EBS 전용높음Yes$ 1.321
    m4.10xlarge40160EBS 전용10GYes$ 3.303
    c4.4xlarge1630EBS 전용높음Yes$ 0.955
    c4.8xlarge3660EBS 전용10GYes$ 1.910
    c3.4xlarge16302 x 160 SSD높음Yes 
    c3.8xlarge32602 x 320 SSD10GYes 
    x1.32xlarge1281,9522 x 1,920 SSD20GYes 
    r3.xlarge430.51 x 80 SSD중간Yes$ 0.399
    r3.2xlarge8611 x 160 SSD높음Yes$ 0.798
    r3.4xlarge161221 x 320 SSD높음Yes$ 1.596
    r3.8xlarge322441 x 800 SSD10GYes$ 3.192
    i2.xlarge430.51 x 800 SSD중간Yes$ 1.001
    i2.x2large8612 x 800 SSD높음Yes$ 2.001
    i2.x4large161224 x 800 SSD높음Yes$ 4.002
    i2.x8large322448 x 800 SSD높음Yes$ 8.004

Datastax Planning

EC2에서의 Production Cluster

datastax에서는 EC2위에 Cassandra Cluster를 올릴때 아래와 같이 정의해서 instance를 정하기를 권고합니다.

목적instance typeinstance cpuinstance memoryinstance network
개발서버이고 가벼운 운영서버m3.large27.5not enhanced network
보통의 운영서버m3.xlarge415not enhanced network
SSD를 사용하면서 가벼운 데이터를 가진 운영서버c3.2xlarge47.5enhanced network
가장 크고 무거운 운영서버m3.2xlarge(PV)830not enhanced network
i2.2xlarge(HVM)861enhanced network

참고자료

http://docs.datastax.com/en/landing_page/doc/landing_page/planning/planningEC2.html

https://d0.awsstatic.com/whitepapers/Cassandra_on_AWS.pdf


'NoSQL > Cassandra' 카테고리의 다른 글

Cassandra version 3.7 install on AWS Ubuntu 16.04  (0) 2016.12.04
Key Components for Configuring Cassandra  (0) 2016.11.27
Apache Cassandra 란?  (0) 2016.11.27