카산드라 리소스 요구사항
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 typecpumemory스토리지(GB)NetworkEnhanced Network Flagon demand costm4.2xlarge 8 32 EBS 전용 높음 Yes $ 0.660 m4.4xlarge 16 64 EBS 전용 높음 Yes $ 1.321 m4.10xlarge 40 160 EBS 전용 10G Yes $ 3.303 c4.4xlarge 16 30 EBS 전용 높음 Yes $ 0.955 c4.8xlarge 36 60 EBS 전용 10G Yes $ 1.910 c3.4xlarge 16 30 2 x 160 SSD 높음 Yes c3.8xlarge 32 60 2 x 320 SSD 10G Yes x1.32xlarge 128 1,952 2 x 1,920 SSD 20G Yes r3.xlarge 4 30.5 1 x 80 SSD 중간 Yes $ 0.399 r3.2xlarge 8 61 1 x 160 SSD 높음 Yes $ 0.798 r3.4xlarge 16 122 1 x 320 SSD 높음 Yes $ 1.596 r3.8xlarge 32 244 1 x 800 SSD 10G Yes $ 3.192 i2.xlarge 4 30.5 1 x 800 SSD 중간 Yes $ 1.001 i2.x2large 8 61 2 x 800 SSD 높음 Yes $ 2.001 i2.x4large 16 122 4 x 800 SSD 높음 Yes $ 4.002 i2.x8large 32 244 8 x 800 SSD 높음 Yes $ 8.004
Datastax Planning
EC2에서의 Production Cluster
datastax에서는 EC2위에 Cassandra Cluster를 올릴때 아래와 같이 정의해서 instance를 정하기를 권고합니다.
목적 | instance type | instance cpu | instance memory | instance network |
---|---|---|---|---|
개발서버이고 가벼운 운영서버 | m3.large | 2 | 7.5 | not enhanced network |
보통의 운영서버 | m3.xlarge | 4 | 15 | not enhanced network |
SSD를 사용하면서 가벼운 데이터를 가진 운영서버 | c3.2xlarge | 4 | 7.5 | enhanced network |
가장 크고 무거운 운영서버 | m3.2xlarge(PV) | 8 | 30 | not enhanced network |
i2.2xlarge(HVM) | 8 | 61 | enhanced network |
참고자료
http://docs.datastax.com/en/landing_page/doc/landing_page/planning/planningEC2.html
'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 |