[AWS] ElastiCache Redis 사용하기

반응형

이번 글에서는 ElastiCache Redis 클러스터를 생성해보겠습니다.

0. ElastiCache란?

분산 인 메모리 캐시(In-Memory-Cache)를 손쉽게 생성하고 확장할 수 있는 서비스입니다.

읽기 중심의 서비스(소셜 네트워크, 게임, 추천 엔진 등)을 제공해야 하는 환경, 고속으로 데이터를 분석해야 하는 환경에 적합합니다.

ElastiCache는 두 가지 캐시 엔진을 지원합니다.

Memcached : 유명한 분산 메모리 캐시 시스템입니다.
Redis : String, Hash, List, Set, Sorted Set 등 다양한 데이터 형식을 제공하는 키-값(Key-Value) 데이터 저장소입니다.

자세한 내용은 아래의 책을 참고하시길 바랍니다.

 

아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다!

COUPANG

www.coupang.com

1. In Memory Cache란?

모든 데이터를 메모리(RAM)에만 올려 놓고 사용하는 데이터베이스의 일종입니다.

일반적인 데이터베이스(RDBMS)는 디스크(HDD,SSD)에 데이터를 영구적으로 저장해 놓고, 필요한 데이터만 메모리에 읽어서 사용합니다.

인 메모리 캐시는 디스크에 접근하지 않고 메모리로만 모든 처리를 하기 떄문에 데이터 저장 및 검색 속도가 매우 빠릅니다. 단 데이터는 딱 메모리 크기까지만 저장할 수 있습니다. 또한, 메모리에만 저장되어 있기 때문에 서버의 전원 공급이 중단되면 데이터는 소멸됩니다.

보통 빠른 처리 속도를 위해 데이터베이스에 저장된 데이터 중 쿼리 결과나 자주 사용되는 데이터를 인 메모리 캐시에 임시로 저장합니다.

2. Redis

이번 실습에서는 Redis를 주로 다루겠습니다.

Redis에 대한 자세한 내용은 https://velog.io/@minholee_93/series/Redis 에 정리하도록 하겠습니다.

Redis는 Memcached와 달리 노드들끼리 클러스터를 구성할 수 없습니다. 따라서 노드를 추가한다고 해서 저장할 수 있는 전체 메모리 용량이 늘어나지 않습니다.

ElastiCache Redis는 Read Replica를 지원합니다. Read Replica는 마스터 캐시 노드에 장애가 발생하면 자동으로 Read Replica가 마스터 캐시 노드로 승격되는 Failover 기능을 지원합니다.

Redis 캐시 노드가 제공하는 메모리 용량을 넘어서는 데이터를 저장하기 위해서는 애플리케이션 레벨에서 데이터를 여러 캐시 노드에 분산하여 저장하는 샤딩(Shading)을 구현해야 합니다.

3. ElastiCache Redis 클러스터 생성하기

이제 Redis 클러스터를 생성해보겠습니다.

ElastiCache 대시보드의 Redis 탭에서 'Create' 버튼을 클릭합니다.

image.png

생성할 Cluster engine으로 Redis를 선택합니다. 만약 Cluster Mode enabled를 선택하면 Redis에서 샤딩(Shading) 기능을 사용할 수 있습니다. 저는 선택하지 않겠습니다.

image.png

클러스터 모드 사용시 샤딩 셋팅이 활성화됩니다.

image.png

클러스터 모드 미 사용시 아래와 같이 Read Replica를 생성 할 수 있습니다. 저는 2개를 Read Replica로 생성하겠습니다.

image.png

책에서는 Redis 클러스터를 생성하고 나서 다른 화면(Replication Group)에서 Read Replica를 생성하도록 설명되어 있지만, 현재는 해당 화면은 없어지고 Redis 클러스터 생성시 위에처럼 Read Replica의 갯수를 셋팅하도록 변경되었습니다.

다음으로 Failover 기능을 사용할지 선택해줍니다. 앞서 말씀드렸다 싶이 해당 기능을 사용할 경우 Master 캐시 노드의 문제가 생길경우 Read Replica가 Master 캐시 노드로 승격됩니다.

image.png

다음으로 Security 그룹을 선택합니다. Redis는 전용 Security 그룹이 필요합니다. 다음장에서 설명드리겠습니다.

image.png

나머지 값들을 선택한 뒤 'Create' 버튼을 눌러 Redis 클러스터를 생성합니다.

image.png

4. ElastiCache Reids 클러스터 Security Group 생성하기

ElastiCache Redis 클러스와 캐시 노드가 완전히 생성되어도 엔드포인트 주소로 접속이 되지 않습니다. 이를 해결하기 위해선 Redis 클러스터 전용 Security Group을 생성하고 포트(6379)를 열어줘야 합니다.

Redis 클러스터 전용 Security Group을 생성하기위해 EC2의 Security Group탭의 'Create Security Group' 버튼을 눌러줍니다.

image.png

생성할 Security group name을 입력하고, VPC를 선택합니다. Redis 클러스터에 외부에서 들어오는 트래픽을 허용하기 위해 Inbound 탭에서 'Add Rule' 버튼을 누르고 아래와 같이 입력합니다.

• Redis는 미리 정의된 TCP가 없으므로 Custom TCP Rule을 선택합니다.
• Port Range는 Redis의 전용 Port 번호인 6379를 입력합니다.
• Source는 접속 가능한 IP 또는 IP 대역입니다. Anywhere를 선택합니다.

설정이 완료되었으면 'Create' 버튼을 클릭합니다.

image.png

아래와 같이 Redis 전용 Security Group이 생성되었습니다.

image.png

5. Redis Security Group 적용하기

위에서 생성한 Security Group을 ElastiCache Redis 클러스에 적용해보겠습니다.

앞서 생성했던 ElastiCache Redis 클러스터를 선택한뒤 'Action' 버튼의 Modify를 눌릅니다.

image.png

다음으로 VPC Security Group 항목에서 방금 생성한 Redis 클러스터 전용 Security Group을 선택후 'Modify' 버튼을 눌러 저장합니다.

image.png

자 이제 ElastiCache Redis의 엔드포인트로 해당 Redis에 접근할 수 있습니다.

image.png

6. 주의점

RDS와 ElastiCache는 큰 자이점이 있습니다.

RDS의 데이터베이스 엔진은 AWS 외부(인터넷)에서 접속이 허용되지만, ElastiCache의 캐시 엔진은 AWS 외부에서 접속 할 수 없습니다. Security Group을 생성해 모든 IP 대역에 대해 접속을 허용하더라도 동일한 VPC에 속한 EC2 인스턴스에서만 접속할 수 있습니다.

따라서 접속가능 여부를 확인하기 위해선 동일 VPC 내의 EC2인스턴스에 접속해 텔넷(telnet)으로 확인해보면 됩니다.

7. 결론

대용량 분산 캐시 환경을 구축하기 위해선?
-> ElastiCache를 쓰자


파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY