ReDiS 특징
- REmote DIctionary Server
- 메모리내에 자료구조를 저장하는 DB
- 메모리를 저장소로 사용해 빠른 IO 보장
- Memcached와 비슷하지만 다양한 자료구조 저장
- key-value 형태로 데이터 저장
- key(일반적으로 string)와 그 키에 저장되는 value(다양한 자료구조 사용 가능)형태로 저장 및 조회
- String, hash, lists, sets, sorted set, bitmap 등 다양한 자료구조 사용
- nested 자료구조는 사용 불가
- 소개페이지
- https://redis.io/ 레디스 홈페이지
- https://www.joinc.co.kr/w/man/12/REDIS/IntroDataType REDIS 소개, 설치, 데이터 타입 테스트
- http://ryufree.tistory.com/211 레디스(Redis, Remote Dictionary Server)
ReDiS 운영 방식
- Single Instance
- 단일인스턴스로도 대부분의 환경에서 충분히 사용가능
- Fail Over대응이 불가
- 일반적으로 HA 및 Sharding이 가능한 Sentinel 및 Cluster모드로 사용
- Sentinel
- HA(Hi Availability) 지원(HA 만 지원)
- 최대 키 개수가 2^32개로 한정
- 메모리 제한
- Master - Slave Replication
- 하나의 Master에 여러 Slave 를 구성하고 2n+1(최소 3)개의 Sentinel 프로세스로 구성
- Master가 죽는 경우 Sentinel이 이를 감지하여 Slave중 하나를 선택 해 Master로 승격
- Client측에서 어떤 Node가 Master인지 알 수 없는 구조(HAProxy 사용으로 극복 가능)
- Sentinel 구성 예
- 총 3개의 Redis Node 구성
- 총 3개의 Sentinel Node 구성
- 3개의 Redis Node 중 1개를 Master로 나머지 2개를 Slave로 설정
- 모든 Sentinel에 Redis Master Node가 어떤 노드인지 설정
- Cluster
- HA 및 Sharding 지원
- n개의 노드를 생성 해 1개의 클러스터를 구성 후 각 노드들의 Master - Slave 구조를 지정
- HashSlot(CRC16)으로 16384개의 Slot을 적절히 분배 해 Sharding 구성
- Sharding갯수를 조절하여 최대 키 개수제한(2^32개)을 피해갈 수 있다
- 어떤 Node에 접속 하더라도 해당 키를 가진 노드로 Redirect시켜 데이터를 가져올 수 있다
- Cluster 구성 예
- 총 12개의 Node 생성
- 12개 Node 모두 1개의 Cluster로 구성
- Slot을 0~4095, 4096~8191, 8192~12287, 12288~16383 으로 구분 해 샤딩 구성
- 각 샤딩별로 2개의 Node를 Replica로 설정
HAProxy 특징
- S/W 방식의 L4 Switch
- The Reliable, High Performance TCP/HTTP Load Balancer
- Balancing 옵션은 Round Robin외에도 다양한 옵션을 제공
- 단순히 서버를 나열하는것 외에 다양한 프로토콜(http, smtp, redis, tcp)을 통해 특정 서비스만 추출 가능
- 소개 페이지
- http://www.haproxy.org HAProxy 홈페이지
- https://d2.naver.com/helloworld/284659 NaverD2 L4/L7 스위치의 대안, 오픈 소스 로드 밸런서 HAProxy
ReDiS와 HAProxy 연동 구성
- ReDiS를 안정적으로 운영하기 위해 아래 요건사항을 기반으로 서비스 구성
- Sentinel의 경우 Sharding을 지원하지 못해 고려하지 않음
- ReDiS Cluster
- Cluster모드 사용
- Replication을 통해 Master-Slave 구조
- Master: read/write 모두 가능
- Slave: read만 가능
- Sharding
- 여러개의 Master 인스턴스를 만들어 각 Master에 데이터를 분산해 저장
- hash값에 따라 16384개의 slot으로 구분되는 저장소 이용
- 4대의 Master인스턴스 별로 0~4095, 4096~8191, 8192~12287, 12288~16383 슬롯을 사용
- Cluster모드로 연결 시 내부적으로 알맞는 slot을 가지는 인스턴스로 redirect
- 각 Master인스턴스 별로 2개의 Slave인스턴스 구성
- Fault Tolerance
- 4 Masters, 8 Slaves 로 구성
- Cluster내에 Master의 수가 2개 이하인 경우 failover 불가능(redis의 구성정책인 듯)
- Master에 문제가 생겨 서비스가 불가한 경우 Slave중 하나를 Master로 승격
- 단일 연결포인트
- Master가 바뀌는 경우 Client에서 새로운 Master를 찾아야 하는 문제 발생
- HAProxy를 이용해 Master와 Slave를 별도 포트로 서비스
- Client에서는 항상 HAProxy의 포트로 Master와 Slave 구분가능
- HAProxy도 단일 연결포인트가 되니 다수의 HAProxy를 L4로 연결(이 부분은 실제 구현하지 않고 안만 제시)
ReDiS와 HAProxy에 대한 간단한 개념을 먼저 정리해 봤다
이 후 ReDiS Cluster를 어떻게 구성하는지와 HAProxy를 어떻게 연동하는지 차례로 진행 할 예정