클러스터 구성에는 세가지 옵션이 있다.
1) 싱글 클러스터 노드
2) 클러스터 모드 없이 Replication만 지원 (클러스터 모드 X)
3) 클러스터 모드와 Replication 모두 지원 (클러스터 모드 O)
Redis는 주 노드(Primary Node)와 복제 노드(Replica Node)로 구성하는게 일반적이며,
이런 구성을 shard로 여러번 준비해 Data Partiotioning을 수행하는 것이 Cluster Mode이다.
Redis의 쓰임새에 맞게 위 구성 중 하나를 선택해야 한다.
선택의 기준은 최종 애플리케이션의 신뢰성, 사용성, 확장성에 기인한다.
- 주 노드에 문제 발생 → Replica Node 사용 → 복제 지연으로 인해 일부 데이터의 손실 가능
- 특정 가용 영역에 문제 발생 → Multi-AZ 구성으로 타 가용 영역의 Replica Node 사용
① 싱글 클러스터 노드 | ② 클러스터 모드 X Replication만 지원 |
③ 클러스터 모드 O | |
데이터 복제 (Replication) |
X | O (노드 당 최대 5 replicas) |
O (노드 당 최대 5 replicas) |
데이터 분할 (Data Partitioning) |
O | X (싱글 샤드) |
O (최대 90 샤드) |
확장성 (Scaling) |
노드 타입을 변경하는 수직 확장 |
노드 타입을 변경하는 수직 확장 |
샤드의 추가/삭제 및 밸런싱을 통한 수평적 확장 |
Multi-AZ | X | 최소 1 replica 이상의 옵션 | 필요 |
ElastiCache 대시보드의 Redis 탭에서 Create 버튼을 클릭한다.
클러스터 설정
클러스터 모드를 활성화하고 클러스터 정보를 입력한다.
파라미터 그룹은 default 파라미터 그룹을 사용한다.
다음과 같은 옵션으로 설정하면
- 샤드 수 : 3
- 샤드 당 복제본(replica node) : 2
- 다중 AZ : 선택
결과적으로 다중 가용 영역에 걸쳐 3개의 샤드가 생성되고 각 샤드는 기본 노드 1개, 복제 노드 2개를 갖게된다.
따라서 총 9개의 노드가 생성된다.
ElastiCache 파라미터 그룹
파라미터 그룹이란 지원되는 엔진 소프트웨어에 대한 런타임을 관리하는 간단한 방법이다.
메모리 사용량, 제거 정책, 항목 크기 등을 제어하는데 여러가지 파라미터가 사용된다.
ElastiCache 파라미터 그룹이란 클러스터에 적용할 수 있는 엔진별 파라미터의 이름이 지정된 모음을 말한다.
이를 통해 해당 클러스터에 있는 모든 노드가 정확히 동일한 방법으로 구성되게 할 수 있다.
파라미터 그룹은 기본적으로 제공하는 것이 있으며 파라미터 그룹을 새로 만들 수도 있다.
Multi-AZ를 선택했으니 서로 다른 가용 영역에서 2개 이상의 서브넷을 선택해야 한다.
서울 리전의 가용 영역 a, b를 선택한다.
슬롯 및 키스페이스는 기본 설정(균등 배포), 가용 영역 배치도 기본 설정값을 그대로 사용한다.
우선 기본 보안 그룹을 사용할 것이다.
VPC의 기본 보안 그룹에 SSH 접속과 Redis 접속을 위한 인바운드 규칙을 추가해야한다.
나머지 항목은 기본값으로 두고 생성한다.
생성 후 약간의 시간이 걸리고 클러스터 세부 정보의 구성 엔드포인트로 접속할 수 있다.
RDS와 ElastiCache에는 큰 차이점이 있다.
RDS의 데이터베이스 엔진은 AWS 외부(인터넷)에 접속이 허용되지만, ElastiCache의 캐시 엔진은 AWS 외부에서 접속 할 수 없다.
Security Group을 생성해 모든 IP 대역에 대해 접속을 허용하더라도 동일한 VPC에 속한 EC2 인스턴스에서만 접속할 수 있다.
따라서 동일 VPC 내의 EC2 인스턴스에 접속해 telnet으로 확인해보면 된다.
EC2에서 Redis로 접속해보기
1) EC2에 build를 위한 gcc 설치
$ sudo yum install -y gcc
2) redis stable 버전 다운로드 및 빌드
$ wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make
3) redis-cli 로 접속해보기 (기본포트 사용시 포트정보 필요없음)
$ ./src/redis-cli -h testcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com
4) 사용의 편의성을 위해 usr/bin 디렉토리에 redis-cli 명령어 복사해놓기
$ sudo cp src/redis-cli /usr/bin
Redis 클러스터의 슬롯 정보 확인하기
[ec2-user@ip-10-82-27-136 redis-stable]$ ./src/redis-cli -h testcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com
testcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com:6379> CLUSTER SLOTS
1) 1) (integer) 0
2) (integer) 5461
3) 1) "10.82.27.175"
2) (integer) 6379
3) "2daffb10aaad953b5cc4c0cec182f6b2533096da"
4) 1) "10.82.27.147"
2) (integer) 6379
3) "ad5a0c857f0e78024173427f600dd1b51f75971e"
5) 1) "10.82.27.178"
2) (integer) 6379
3) "75399d18915a2a11f96d1e95b401d8b5ccbb8ccd"
2) 1) (integer) 5462
2) (integer) 10922
3) 1) "10.82.27.152"
2) (integer) 6379
3) "664a9106b7769685c6b37a73635a292f2f3f9cf2"
4) 1) "10.82.27.138"
2) (integer) 6379
3) "ca293905d952147437b1170bace0fdc46ece1625"
5) 1) "10.82.27.182"
2) (integer) 6379
3) "ca9897f687bcd3761d0090f208b99c134d29c9cf"
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "10.82.27.184"
2) (integer) 6379
3) "e9fc1c2f8291a93e9ac07c835429ab5eb1f0d697"
4) 1) "10.82.27.143"
2) (integer) 6379
3) "44cca688b48a4dcfe41b011d9595ac69c599ed3a"
5) 1) "10.82.27.170"
2) (integer) 6379
3) "32ea511252ff89cae3e129fc98cf7d22bd249fff"
- 슬롯 0 ~ 5461
- 슬롯 5462 ~ 10922
- 슬롯 10923 ~ 16838
각 샤드의 3개 노드에는 Internal IP가 각각 부여되었다.
첫번째 샤드의 노드 IP 주소는 다음과 같다.
1) 1) (integer) 0
2) (integer) 5461
3) 1) "10.82.27.175" -> 주 노드
2) (integer) 6379
3) "2daffb10aaad953b5cc4c0cec182f6b2533096da"
4) 1) "10.82.27.147" -> 복제 노드 1
2) (integer) 6379
3) "ad5a0c857f0e78024173427f600dd1b51f75971e"
5) 1) "10.82.27.178" -> 복제 노드 2
2) (integer) 6379
3) "75399d18915a2a11f96d1e95b401d8b5ccbb8ccd"
estcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com:6379> CLUSTER KEYSLOT foo
(integer) 12182
testcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com:6379> CLUSTER KEYSLOT TechTrip
(integer) 570
testcluster.lfvmpx.clustercfg.apn2.cache.amazonaws.com:6379>
두번째 샤드, 첫번째 샤드에 배치된 슬롯을 각각 배정받았다. Redis는 이런 방식으로 데이터의 샤딩 위치를 결정한다.
'Public Cloud > AWS' 카테고리의 다른 글
CloudWatch (0) | 2023.02.08 |
---|---|
IAM의 이해 (0) | 2023.02.08 |
[AWS] NACL과 Security Group의 차이 (2) | 2022.04.26 |
[AWS] EFS(Elastic File System) 사용법 (0) | 2022.04.22 |
[AWS] Lambda 실습 (0) | 2022.04.16 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!